Как выдержать повышенные нагрузки на систему: рассказываем о масштабной подготовке к Черной Пятнице

Привет, Хабр!

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

Цель поставили самую амбициозную из возможных: мы хотели быть полностью готовыми к любым, даже самым мощным, всплескам активности и начали заранее выводить новые мощности в течение года.

Наш CTO Андрей Чиж (chizh_andrey) рассказывает, как мы готовились к Черной Пятнице 2018, какие меры предприняли, чтобы избежать падений, и, конечно, же о результатах такой тщательной подготовки.

Как выдержать повышенные нагрузки на систему: рассказываем о масштабной подготовке к Черной Пятнице

Сегодня хочу рассказать о подготовке к Черной Пятнице 2018. Почему сейчас, когда большинство крупных распродаж позади? Мы начали готовиться примерно за год до масштабных акций, и методом проб и ошибок нашли оптимальное решение. Рекомендуем и вам заранее позаботиться о горячих сезонах и предотвратить факапы, которые могут всплыть в самый неподходящий момент.
Материал будет полезен всем, кто хочет выжать максимальной профит из подобных акций, т.к. техническая сторона вопроса не уступает здесь маркетинговой.

Особенности трафика на больших распродажах

Вопреки расхожему мнению, черная Пятница — это не один день в году, а практически целая неделя: первые предложения о скидках поступают за 7-8 дней до распродажи. Трафик сайтов начинает плавно расти всю неделю, доходит до своего пика в пятницу и довольно резко спадает в субботу до регулярных показателей магазина.

Как выдержать повышенные нагрузки на систему: рассказываем о масштабной подготовке к Черной Пятнице

Это важно учитывать: интернет-магазины становятся особенно чувствительны к любым «замедлениям» в системе. Кроме того, наше направление email-рассылок тоже ощутило значительный прирост количества отправок.

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

  • Трекинг и выдача товарных рекомендаций,
  • Выдача сопутствующих материалов (к примеру, изображений оформления блоков рекомендаций, таких как стрелки, логотипы, иконки и другие визуальные элементы),
  • Выдача товарных картинок нужного размера (для этих целей у нас есть “ImageResizer” — подсистема, которая скачивает изображение с сервера магазина, сжимает ее до нужного размера и через кэширующие сервера выдает изображения нужного размера для каждого товара в каждом блоке рекомендаций).

Фактически в период Черной Пятницы 2019 нагрузка на сервис выросла на 40%, т.е. количество событий, которые отслеживает и обрабатывает система Retail Rocket на сайтах интернет-магазинов выросло с 5 до 8 тысяч запросов в секунду. За счет того, что мы готовились к более серьезным нагрузкам, такой всплеск мы пережили легко.

Как выдержать повышенные нагрузки на систему: рассказываем о масштабной подготовке к Черной Пятнице

Общая подготовка

Черная Пятница — жаркая пора для всего ритейла и для ecommerce в частности. Количество пользователей и их активность в это время растет в разы, поэтому мы как всегда основательно готовились к этой напряженной поре. Добавим сюда факт, что к нам подключено множество интернет-магазинов не только в России, но и в Европе, где ажиотаж бывает гораздо выше, и получим уровень накала страстей похлеще бразильского сериала. Что нужно предпринять, чтобы быть полностью готовыми к повышенным нагрузкам?

Работа с серверами

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

В то же время часть билд машин была переустановлена для использования в виде Application серверов. Мы сразу подготовили их для использования разных функций: и для выдачи рекомендаций, и для сервиса ImageResizer, чтобы в зависимости от типа нагрузки каждую из них можно было использовать для одной из этих ролей. В штатном режиме у Application и ImageResizer серверов четко обозначенные функции: первые занимаются выдачей рекомендаций, вторые — поставляют изображения для писем и рекомендательных блоков на сайте интернет-магазинов. В ходе подготовки к Черной Пятнице решено сделать все сервера двойного назначения, чтобы балансировать трафик между ними в зависимости от типа загрузки.

Затем мы добавили два больших сервера для Кафки (Apache Kafka) и получили кластер из 5 мощных машин. К сожалению, все прошло не так гладко, как хотелось бы: в процессе синхронизации данных две новые машины заняли всю ширину сетевого канала, и пришлось экстренно разбираться как провести процесс добавления быстро и безопасно для всей инфраструктуры. Для решения этого вопроса нашим администраторам пришлось доблестно пожертвовать выходными.

Работа с данными

Помимо серверов, мы решили оптимизировать файлы для облегчения нагрузки и большим шагом для нас стал перевод статических файлов. Все статические файлы, которые ранее хостились на серверах, увели на S3 + Cloudfront. Давно хотели это сделать, поскольку нагрузка на сервер была близка к предельным значениям, и вот появился отличный повод.

За неделю до Черной Пятницы увеличили время кеширования картинок до 3-х дней, чтобы в случае падения ImageResizer, ранее закешированые изображения были получены с cdn. Также это снизило нагрузку на наши сервера, поскольку чем дольше хранится изображение, тем реже нам нужно тратить ресурсы на ресайз.

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

Планы реагирования на сложные ситуации

Какой бы качественной подготовка ни была, факапы всегда возможны. И мы разработали 3 плана реагирования на возможные критические ситуации:

  • снижение нагрузки,
  • отключение некоторых сервисов,
  • полное отключение сервиса.

План A: снижение нагрузки. Должен был быть задействован, если из-за всплеска нагрузки наши сервера выйдут за допустимые тайминги ответа. На этот случай мы подготовили механизмы постепенного снижения нагрузки за счет переключения части трафика на сервера Amazon, которые на все запросы просто отдавали бы «200 OK» и давали пустой ответ. Мы понимали, что это деградация качества сервиса, но выбор между тем, что сервис не работает совсем или не показывает рекомендации для примерно 10% трафика, очевиден.

План B: отключение сервисов. Подразумевал частичную деградацию сервиса. Например, снижение скорости расчета персональных рекомендации ради разгрузки некоторых баз данных и каналов связи. В штатном режиме рекомендации рассчитываются в режиме real-time, создавая для каждого посетителя свою версию интернет-магазина, но в условиях повышенных нагрузок снижение скорости позволяет другим core сервисам продолжить работу.

План C: на случай армагеддона. Если произойдет полный отказ системы, мы подготовили план, который позволит безопасно отключить нас от клиентов. Покупатели магазинов просто перестанут видеть рекомендации, производительность интернет-магазина никак не пострадает. Для этого пришлось бы обнулить наш интеграционный файл, чтобы новые пользователи перестали взаимодействовать с сервисом. То есть мы отключили бы работу нашего главного трекинг кода, сервис перестал бы собирать данные и рассчитывать рекомендации, а пользователь просто видел бы страницу без блоков рекомендаций. Для всех тех, кто ранее уже получил интеграционный файл, мы предусмотрели вариант переключения DNS записи на Амазон и заглушку 200 OK.

Итоги

Мы справились со всей нагрузкой даже без необходимости задействовать дополнительные билд машины. И благодаря заблаговременной подготовке, нам не понадобился ни один из разработанных планов реагирования. Но вся проделанная работа — бесценный опыт, который поможет нам справляться с самыми неожиданными и огромными наплывами трафика.
Как и в 2017 году, нагрузка на сервис выросла на 40%, а количество пользователей в интернет-магазинах за Черную Пятницу увеличилось на 60%. Все трудности и ошибки пришлись на подготовительный период, что спасло нас и наших клиентов от непредвиденных ситуаций.

А как вы переживаете Черную Пятницу? Как готовитесь к критическим нагрузкам?

Источник: habr.com