ݺߣ

ݺߣShare a Scribd company logo
Нагрузочное тестирование
по-живому
Indonesia PhilippinesMalaysia ThailandSingapore Vietnam
1
Что такое Lazada
2
Зачем стрелять
• Распродажи
• Стабильность
• Предсказуемость
• Поиск багов
3
Мишени для стрельбы
• Сайт
• API для мобильных приложений
• Отдельные сервисы
• Что угодно, если это доступно по сети
4
Куда стрелять
• Отдельное окружение для тестов
долго делать
дорого стоит
не даёт гарантий
полностью независимо
• Стрелять в стейджинг
не всегда показательно
конфликтует с разработкой
стейджинг не всегда стабилен
• Стрелять в лайв
100% показательно
опасно, можно убить бизнес
ограничения по времени
не во всё можно пострелять (заказы)
но мы именно так и делаем
5
Чем стрелять
• Различные профили тестов: мобильный пуш /
просмотр каталога / распродажа / …
• Сбор статистики на регулярной основе и
коррекция профилей тестирования
• Ручная настройка: любые протоколы, любые
запросы, любые данные
6
Из чего стрелять
• Множество больших и маленьких скриптов
• Jmeter кластер
• Мастер-нода
Управляет остальными нодами
Даёт нодам патроны для стрельбы
Собирает с нод логи, строит по ним отчёты
Обеспечивает остановку стрельбы
Ноды без доступа к мастеру умирают
• Команда – 3 разработчика + тимлид
7
Как не бояться стрелять в лайв
• Автоматическая остановка
По достижению определённого процента ошибок
По времени ответа
Любые условия
Вручную
Настраивается для каждого типа запросов отдельно
• Мониторинг всего + алёрты
То, что нельзя измерить – нельзя улучшить
• Graceful degradation
• «Эластичная» архитектура
Circuit breakers
Rate limiters
8
Когда стрелять
• Регулярные стрельбы каждую ночь в минимум
трафика
• Исключения – праздники, распродажи,
внеплановые релизы, плановое обслуживание
инфраструктуры
• По договорённости в любое время
• Обычно стрельба длится 10-15 минут
• Всё настраивается
9
Уведомления
• Механизм хуков
• Можно получить уведомление о любом событии
(начало/конец стрельбы, автоматическая
остановка и т.д.)
• Интеграция со Slack/Jira/Prometheus/Email/…
10
Статистика
• История всех стрельб
11
Результаты стрельбы
12
Что дальше
• Пробуем разные генераторы нагрузки
Я.Танк (phantom), Siege, …
• Тестирование заказов и чекаута
Маршрутизация запросов в отдельные сервисы/хранилища (a-la
canary deployment)
• Регулярные стрельбы по отдельным сервисам + SLA
Не попал в SLA – не релизишься
• Переход на k8s
13
Вопросы
Антон Степаненко
VP Engineering
Lazada Group
anton.stepanenko@lazada.com
14

More Related Content

Нагрузочное тестирование по-живому

  • 3. Зачем стрелять • Распродажи • Стабильность • Предсказуемость • Поиск багов 3
  • 4. Мишени для стрельбы • Сайт • API для мобильных приложений • Отдельные сервисы • Что угодно, если это доступно по сети 4
  • 5. Куда стрелять • Отдельное окружение для тестов долго делать дорого стоит не даёт гарантий полностью независимо • Стрелять в стейджинг не всегда показательно конфликтует с разработкой стейджинг не всегда стабилен • Стрелять в лайв 100% показательно опасно, можно убить бизнес ограничения по времени не во всё можно пострелять (заказы) но мы именно так и делаем 5
  • 6. Чем стрелять • Различные профили тестов: мобильный пуш / просмотр каталога / распродажа / … • Сбор статистики на регулярной основе и коррекция профилей тестирования • Ручная настройка: любые протоколы, любые запросы, любые данные 6
  • 7. Из чего стрелять • Множество больших и маленьких скриптов • Jmeter кластер • Мастер-нода Управляет остальными нодами Даёт нодам патроны для стрельбы Собирает с нод логи, строит по ним отчёты Обеспечивает остановку стрельбы Ноды без доступа к мастеру умирают • Команда – 3 разработчика + тимлид 7
  • 8. Как не бояться стрелять в лайв • Автоматическая остановка По достижению определённого процента ошибок По времени ответа Любые условия Вручную Настраивается для каждого типа запросов отдельно • Мониторинг всего + алёрты То, что нельзя измерить – нельзя улучшить • Graceful degradation • «Эластичная» архитектура Circuit breakers Rate limiters 8
  • 9. Когда стрелять • Регулярные стрельбы каждую ночь в минимум трафика • Исключения – праздники, распродажи, внеплановые релизы, плановое обслуживание инфраструктуры • По договорённости в любое время • Обычно стрельба длится 10-15 минут • Всё настраивается 9
  • 10. Уведомления • Механизм хуков • Можно получить уведомление о любом событии (начало/конец стрельбы, автоматическая остановка и т.д.) • Интеграция со Slack/Jira/Prometheus/Email/… 10
  • 13. Что дальше • Пробуем разные генераторы нагрузки Я.Танк (phantom), Siege, … • Тестирование заказов и чекаута Маршрутизация запросов в отдельные сервисы/хранилища (a-la canary deployment) • Регулярные стрельбы по отдельным сервисам + SLA Не попал в SLA – не релизишься • Переход на k8s 13