в Рабочее

Взгляд на Воротилу с серверной стороны

Мне периодически задают вопросы про то, как Воротила устроен изнутри в техническом плане. И вот на днях меня спросили про это в очередной раз, после чего я решил написать про это отдельный пост.

Шаг 1. Решение «Всё в одном»

Первый сервер Воротилы

Когда мы стартовали весной 2012 года, у нас был только один сервер, на фото он самый нижний.

Это было решение «всё в одном». Тут у нас работали и веб-приложение, и база данных, и пользовательские фотографии хранились, и почтовый сервис, и всё прочее, что нужно в работе небольшому, но гордому проекту.

Сервер, кстати, IBM-овский, и я им очень доволен. Вполне шустрый и достаточно широкопрофильный. Сейчас подобные мы используем в реальном боевом окружении (говоря проще, на продакшне) в качестве серверов приложений. Только на нашем первом сервере винчестеров было ощутимо больше, поскольку мы и фотографии хранили там же.

Но и при таком небольшом масштабе мы подошли к вопросу ответственно — данные хранились с достаточной избыточностью, бэкапы накапливались, всё мониторилось, синхронизировалось, в общем, можно было жить и радоваться.
Прошло немного времени, и мы поняли, что мощности этого сервера нам перестаёт хватать. А особенно — возможностей. Нам очень не хватало целого ряда сервисов, в планах было увеличивать аудиторию Воротилы, а потому пришло время расширять и серверные мощности, которые на тот момент размещались в датацентре в Украине.

Шаг 2. Три богатыря

Три сервера Воротилы

Этому решению способствовал и факт падения под нагрузкой от очередного гугловского бота. Многие сайты попали под эту раздачу, но мы сделали свои выводы и начали серьёзно дорабатывать сайт под работу с высокими нагрузками.

Докупили ещё 2 сервера (тоже айбиэмовские) и, имея уже 3 сервера на руках, выстроили классическую трёхзвенную платформу из фронтэнда, бэкэнда приложений и базы данных. На фронте мы также разместили кэш и организовали хранение фотографий, которые выдавались уже с отдельного домена и не нагружали остальные серверы.

Достаточно долго нам вполне хватало этой платформы. Часть серверов работала под управлением Windows, часть — под Linux, так что мы могли позволить себе пробовать новые технологии и устанавливать их, ничего не меняя радикально в инфраструктуре. С лета 2012 до осени 2013 Воротила работал на этих 3 серверах, разве что мы добавили к ним ещё один слабенький сервер, который занимался мониторингом состояния всей системы и другой обслуживающей работой.

Шаг 3. Пришло время серьёзного масштабирования

Время шло, нагрузки росли и росли. Мы задумались о дальнейшем масштабировании. В идеале хотелось получить такую инфраструктуру, которая могла бы уместить в себе и Воротилу, и другие наши будущие проекты, которая бы легко горизонтально масштабировалась при необходимости, сохраняя производительность. И это у нас блестяще получилось!

Немного расскажу про горизонтальное масштабирование. Представьте, что у вас есть сайт, который работает на единственном сервере. И вот нагрузка у вас вырастает, вам уже не хватает мощности одного сервера. Вы ставите второй. Если вы заранее готовились к этому, правильно написали программный код сайта и настроили систему на серверах, то производительность вашей системы в целом должна вырасти в два раза. Это и называется «горизонтальным масштабированием» — увеличение производительности системы путём добавления новых узлов в общую инфраструктуру.

К сожалению, не везде и не всегда получается добиться такого эффекта. А «вертикальное масштабирование» (например: «Сервер потребляет много памяти? Увеличим её в 2 раза!») — более простой способ, который помогает только до какого-то предела, после которого всё равно придётся заняться горизонтальным.
Так вот, у нас всё получилось. Полгода мы планировали инфраструктуру, читали мануалы, во многом разбирались самостоятельно, пробовали, ошибались, переделывали, набивали шишки, внедрили целый ряд новых сервисов взамен старых, а также почти полностью переписали код сайта для работы с такой распределённой системой. И перевезли аппаратную часть проекта в Европу, для собственного спокойствия.

И что мы имеем сейчас?

15 серверов в центре обработки данных класса TIER III, первом и пока что единственном в Северной Европе. Эти серверы обеспечивают работу всей нашей инфраструктуры. Она состоит из нескольких ключевых узлов, каждый из которых дублируется как минимум дважды, имеет бешеную отказоустойчивость, быстро и без особых сложностей горизонтально масштабируется. Мы уже имели возможность в этом убедиться.

На базе этой инфраструктуры мы можем развивать и Воротилу, и другие наши проекты. Запас мощности — огромный. Сейчас мы работаем на считанные единицы процентов от того, что можем себе позволить.

А я и моя команда — мы получили бесценный опыт практической работы с системой, изначально заточенной под высокие нагрузки и уже не раз проходившей такие испытания. Думаю, немногие в Украине могут сказать о себе то же самое.

В последние дни (и ночи) весны 2014 мы закончили работу над масштабированием последнего ключевого узла — базы данных. И теперь можно с уверенностью сказать, что мы готовы принять практически любые нагрузки.

И, зная амбициозные планы наших маркетологов, я могу сказать, что эти нагрузки будут уже очень скоро :)

Серверный шкаф Воротилы

(вот так это выглядит в серверной нашего ЦОДа)

Эти посты могут быть интересными для вас

Напишите комментарий

Комментарии