Як витримати підвищені навантаження на систему: розповідаємо про масштабну підготовку до Чорної П'ятниці

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

У 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, створюючи для кожного відвідувача свою версію інтернет-магазину, але в умовах підвищених навантажень зниження швидкості дозволяє іншим сервісам продовжити роботу.

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

Підсумки

Ми впоралися з усім навантаженням навіть без необхідності задіяти додаткові білди машини. І завдяки завчасній підготовці нам не знадобився жоден із розроблених планів реагування. Але вся виконана робота - безцінний досвід, який допоможе нам справлятися з несподіваними і величезними напливами трафіку.
Як і в 2017 році, навантаження на сервіс зросло на 40%, а кількість користувачів в інтернет-магазинах за Чорну П'ятницю збільшилася на 60%. Усі труднощі та помилки припали на підготовчий період, що врятувало нас та наших клієнтів від непередбачених ситуацій.

А як ви переживаєте Чорну П'ятницю? Як готуєтеся до критичних навантажень?

Джерело: habr.com

Додати коментар або відгук