Черную пятницу можно назвать фестивалем распродаж. Фестиваль, как любое развлекательное мероприятие, является развлечением для посетителей и результатом слаженной работы организаторов и систем. Причем высокие требования выставляются к обоим. И чтобы им соответствовать, необходима некоторая подготовка. Вот и мы решили подготовиться.

Исходная архитектура.


Старая система Цитруса (www.citrus.ua) едва выдерживала ежедневные нагрузки. Еще бы. Интернет-магазин, который по результатам исследования 2015 года находится в 5ке лидеров направления «Электроника и бытовая техника», изначально располагался на 2х серверах: веб и база данных, где уживались frontend на Bitrix с MySQL и backend на Laravel с PostgreSQL и Redis.

Все это скромно было прикрыто CDN.
Проанализировав показатели работы, было принято решение расширяться. В качестве промежуточного решения для обеспечения стабильности работы и балансировки нагрузки использовалась схема с сервером-балансировщиком HAProxy и несколькими web серверами. Cначала было добавлено три backend сервера. Такая топология выявила проблемные места, которыми оказались процессорные мощности и нагрузки на сеть.

Полученная архитектура


На следующем этапе было принято решение о замене аппаратной составляющей и увеличении количества серверов. Добавляли по мере надобности.

Пережив Черную пятницу и проанализировав показатели полученной системы, появилось желание добавить еще один сервер баз данных для разделения MySQL и PostgreSQL. В первую очередь такое решение было принято из соображений безопасности, а также для того, чтобы разгрузить сервер, обеспечив возможность дальнейшего беспрепятственного роста системы. Таким образом, финальная конфигурация получилась следующая:

Все изменения проводились поэтапно на протяжении месяца.

Особенности реализации


Старая аппаратная инфраструктура после первой попытки расширения оказалась в разных дата-центрах: всего 3 физических не очень новых сервера и 2 виртуальных машины. Нагрузка в часы пик была на них такая, что если исключить из работы хоть один из этих серверов, то сайт перестает работать.
Нами было принято решение заказать 5 новых однотипных серверов со следующими характеристиками:
  • HP DL380eG8 (8xLFF)
  • 2x Intel Hexa-Core Xeon E5-2420
  • 64GB DDR3
  • 8x2TB SATA

Для страховки оставили один старый сервер…
  • Brand and Model Hp — DL180 G6
  • Processor 2x Intel Quad-Core Xeon E5620 [ 4 Core(s) ]
  • RAM 32 GB
  • HDD 8x300 GB SAS

…и отдельно стоящие сервера DB и HAProxy.
  • Brand and Model Dell — R730xd
  • Processor 2x Intel Octa-Core Xeon E5-2630v3 [ 8 Core(s) ]
  • RAM 128 GB
  • HDD 4x480 GB SSD 2.5 Inch


  • Brand and Model Hp — DL380e Gen8 (12 LFF)
  • Processor 2x Intel Hexa-Core Xeon E5-2420 [ 6 Core(s) ]
  • RAM 64 GB
  • HDD 4x480 GB SSD 2.5 Inch


  • Brand and Model Hp — DL120 G7
  • Processor 1x Intel Dual-Core Pentium G850 [ 2 Core(s) ]
  • RAM 16 GB

Александр (старший системный администратор system-admins.ru):
«Все аппаратные ресурсы расположили в одном дата-центре. Это решение имеет дополнительное преимущество при коммутации. Сервера объединили в один отдельный свитч, что позволило получить максимальную скорость передачи данных между серверами и экономию трафика. Если раньше между веб-серверами и базой служебного трафика за месяц накапливалось на десятки терабайт, который надо было оплачивать как обычный, то сейчас заказчик платит только за трафик от веб-сервера до клиента, что на порядок меньше».

Компания уже долгое время плодотворно сотрудничает с некоторым дата-центром. Новые сервера, приобретенные в нем — все физические. Это оказалось заметно дешевле, чем аналогичные виртуальные мощности.
На шести серверах расположилась веб-ферма, сервера с базами данных и прокси не задублированы. Отказоустойчивость обеспечивается с помощью репликации на резервные виртуальные машины. Но это уже совсем другая история.
На серверах используем Ubuntu 16.04 Xenial и Docker 1.12.
Виктор (Генеральный диретктор):
«Докер ускорил установку новых серверов, значительно снизив требуемые человеко-ресурсы на реализацию задачи по переносу системы на новое оборудование».

На каждом веб-узле по одному контейнеру, который «нафарширован» всем необходимым. На серверах БД расположились контейнеры с различными типами баз данных для нужд системы.
Развертывание выполнялось по стандартной откатанной схеме: предварительная настройка сервера, установка докера, копирование файлов настроек и сайтов, запуск контейнера докер. На уровне веб-сервисов изменений не производилось.
При планировании были пересмотрены задачи по обслуживанию серверов. Предусмотрительно на время ожидаемой высокой нагрузки были отключены некритичные регламентные задания, которые могли нагрузить базу в неподходящий момент. Что, к слову, не помогло избежать незапланированных сюрпризов.
Менеджеры с разгар Черной Пятницы решили поменять цены на сайте и создали приличную нагрузку, которая к счастью не оказала критического влияния на работу сайта. Такое конечно стоит делать заранее. Но от человеческого фактора никуда не денешься.
Виталий (Системный администратор):
«Так как менеджеры решили посреди дня обновить акцию, и почти весь день была повышенная нагрузка, то запас ресурсов системы был не очень большой, я бы даже сказал на пределе. Без этого процентов 20-30 было бы как минимум. В штатном режиме система работает ‘в зеленой зоне’: Нагрузка процессорных мощностей колеблется на уровне 30%, объемы занятой оперативной памяти в среднем по ферме не доходит до 90%, занятое дисковое пространство на всех серверах за некоторым исключением не превышает 50%. Нагрузка на сетевом интерфейсе на выходе к пользователю в пике не превышает 20ти %»

На графике месячные объемы трафика, выдаваемые системой в Сеть.

В такой конфигурации система с легкостью выдерживает более 250 000 уникальных пользователей в день.

Большое количество используемой памяти объясняется высокими потребностями php-скриптов. Для работы некоторых из них лимиты подняты до нескольких гигабайт.

Вывод


Таким образом, все изменения позволили повысить критический порог нагрузки на систему. Что можно явно увидеть на графике обращений к системе. Если на начало месяца нагрузочные значения были практически потолочными, то после изменений, даже при увеличении нагрузки более чем в 2 раза в Черную Пятницу, еще остается запас около 20%.

Как видно из продолжения графика, система успешно справляется с повышением нагрузок.

За половину декабря 2016 среднесуточная нагрузка составляет около 50М запросов, таким образом, прирост составляет приблизительно 40% по сравнению с прошлым месяцем. И это теперь далеко не предел.
Поделиться с друзьями
-->

Комментарии (0)