Wolf
Roman Grossi
Tobishua
Digital nomad and originality

Для начала о том, что за “IOY” такое? Это “Improvy”, но без некоторых букв, так мы решили называть всё, что относится к сайд-работе, например, наша серверная архитектура, наша внутренняя “кухня”, любые мини-сервисы, в основном предназначенные для внутреннего использования.
А теперь к теме этого поста: как устроена наша серверная архитектура. Всё это время мы арендовали выделенный сервер в Hetzner и что бы про него не говорили, это отличная компания с прекрасным качеством услуг: с февраля 2014 года по вине Hetzner у нас набежало всего около двух часов даунтайма, а проблем с железом не было ни разу (за исключением случая с перегревом жёстких дисков, что было исправлено путём установки дополнительного охлаждения в сервер за 5 минут). И всё это время мы имели развёрнутую на этом сервере систему на которую была установлена связка Nginx+Apache+MySQL+PHP и всякие дополнительные штуки вроде Memcache, Redis, Gearman и почтового сервера. Недавно было принято решение наконец-то сделать всё по уму и через libvirt разбить сервер на несколько виртуалок, каждая из которых выполняет свою конкретную функцию.
Какие преимущества у этого решения:

  • Масштабируемость - всегда можно добавить ещё один физический сервер и развернуть на нём ещё одну виртуалку с такими же функциями как текущая, поставив их в параллельную работу
  • Защищённость - большинство виртуалок имеют только локальный IP-адрес, таким образом доступ извне к ним невозможен.
  • Возможность в максимально сжатые сроки сменить хостера: для этого понадобится всего лишь скачать диски этих виртуалок и развернуть из них новые серверы на другой платформе (общий даунтайм при этом не больше нескольких часов)
  • Возможность полного обновления ПО и перехода на другую архитектуру - всегда есть возможность создать ещё один сервер, например, для приложения и заменить Nginx+Apache на Nginx+php-fpm без даунтайма
  • Всякое другое не менее важное

Сама реализованная на текущий момент схема:

Improvy (IOY) servers architecture

Описание архитектуры

  • front-01.ioy.one (2 Cores, 2 GB RAM, 20 GB HDD) - frontend-сервер с nginx и, в будущем, +varnish. Роутит запросы на сервер приложения или на storage-01.ioy.one. Имеет публичный IP.
  • storage-01.ioy.one (1 Core, 1 GB RAM, 5 GB + GB Gb + 100 GB HDD) - хранение статики. Nginx и больше ничего.

  • app-01.ioy.one (4 Cores, 8 GB RAM, 120 GB HDD) - backend-сервер. В идеальном мире там будет только php-fpm, но пока статика не полностью отделена от скриптов, там также установлен nginx. (публичного IP-адреса не имеет). 

  • cache-01.ioy.one (1 Core, 12 GB RAM, 10 GB HDD) - сервер кеша. Redis, Memcache - всё, что крайне требовательно к RAM.

  • db-01.ioy.one (6 Cores, 32 GB RAM, 80 GB HDD) - сервер баз данных. MySQL.

  • dev.ioy.one (2 Cores, 1 GB RAM, 60 GB HDD) - сервер для внутренних нужд. VPN который даёт доступ в приватную сеть, в будущем GitLab и система мониторинга. Есть публичный IP.

Также, на всех серверах с публичными IP установлен bind9 для того, чтобы хостить DNS. На dev.ioy.one помимо этого он также является кеширующим DNS-сервером для собственных нужд. Конечно это большой недостаток, но, пока что так. Также, виртуалкам выделено больше ядер чем есть на самом деле, но это не баг, а фича ;)