Доклад с конференции Стачка 2017
Нагрузочное тестирование в Lazada
* Как мы до этого дошли и зачем нам это надо
* Что мы используем готового и что пришлось разработать самим
* Как мы анализируем результаты тестов и какую статистику собираем
* Почему мы доверяем результатам тестирования
* Как мы стреляем по продакшену и ничего не боимся
* Какие ресурсы нужны для построения системы нагрузочного тестирования
* Что мы хотим сделать в будущем
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