Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CodeFest 2018. Михаил Косыхин (Lamoda) — Тестирование производительности для бизнес событий (Black Friday)

CodeFest
April 05, 2018

CodeFest 2018. Михаил Косыхин (Lamoda) — Тестирование производительности для бизнес событий (Black Friday)

Посмотрите выступление Михаила: https://2018.codefest.ru/lecture/1275/

IT специалисты, да и многие простые пользователи, подсознательно понимают, что значит: сайт работает под нагрузкой. Однако, просто сделать 100500 вызовов страниц сайта совсем не означает, что тестирование реальной нагрузкой с живыми пользователями пройдёт успешно. О том, что может произойти, если выбрать неправильные сценарии и профиль нагрузки и как подготовиться к тестированию производительности, я хочу рассказать на примере подготовки к важному событию в мире eCommerce - Black Friday: что нам удалось, на каких ошибках мы учились и какой опыт заберём с собой в будущее.

CodeFest

April 05, 2018
Tweet

More Decks by CodeFest

Other Decks in Programming

Transcript

  1. 3

  2. 4

  3. 9

  4. 10

  5. Подготовка к BF 2016 Готовились за 3 месяца. Давали нагрузку

    сопоставимую по RPS и сценариям. Нашли много узких мест и все успели исправить. Ждём результата. 12
  6. 14

  7. 16

  8. Готовимся ещё раз • Данные для подготовки • Пользовательские сценарии

    и внутренние механики акций • Среды тестирования • Виды тестирования • Процессы и команда • Планирование • Работа с бизнесом 18
  9. 20

  10. Логи по запросам пользователей Что запрашивают? Когда пики? Чем отличаются

    пики от обычного времени? Как себя ведут пользователи? Какие запросы чаще падают? Какими запросами можно пренебречь? Что нагружено? 21
  11. Забор нужных логов из дампов эластика for i in `ls

    /logs/elasticdump/access-log*`; do zcat $i \ | jq -c 'select(._type == "logs")' \ | jq 'select(._source.host | contains ("lb-ext-"))' 2>/dev/null \ | jq 'select(._source.http_host | contains ("www.lamoda.")),select(._source.http_host | contains ("apigw.lamoda."))' 2> /dev/null \ | jq -c '._source' \ | jq -c '[.http_host,.response_code,.request_method,.request_uri,.response_time,."@timestamp",.trace_id,.remo te_addr]' >/logs/prepared-log_`basename $i`.txt done 22
  12. Выбор классов эквивалентности grep 'www.lamoda.ru' /logs/prepared-log*.txt \ | grep -v

    'loadtest' \ | sed -E 's/ \/c\/[0-9]+\/[-_a-z0-9]+/ \/c\/<id>\/<categoryname>/' \ | sed -E 's/ \/c\/[0-9]+/ \/c\/<id>/' \ | sed -E 's/ \/b\/[0-9]+\/brand-[-_a-z0-9]+/ \/b\/<id>\/<brandname>/' \ | sed -E 's/ \/p\/<SKU12>\/[-_a-z0-9]+/ \/p\/<SKU12>\/<productname>/' \ | sed -E 's/ \/p2\/<SKU12>\/[-_a-z0-9]+/ \/p2\/<SKU12>\/<productname>/' \ .................... .................... | sort | uniq -c | sort -k1,1 -n -r 23
  13. Классы эквивалентности 120+ классов для сайта 90+ классов для мобильного

    бэкенда >0,05% от всех запросов - статистически значимые 0,05% - это десятки тысяч в сутки. Важные запросы как, например, покупка. 24
  14. Готовимся ещё раз • Данные для подготовки • Пользовательские сценарии

    и внутренние механики акций • Среды тестирования 36
  15. Тестировать на тестовой среде… но нет. 42 При тесте на

    тесте мы упускаем из вида инфраструктуру
  16. Всё-таки тестировать на проде Но это риски. А мы любим

    своих покупателей. Поэтому: Грузим только ночью Измеряем 95-ый перцентиль и не меньше Автостоп при превышении критериев Ручной контроль никто не отменял Контроль всех приложений 47
  17. Готовимся ещё раз • Данные для подготовки • Пользовательские сценарии

    и внутренние механики акций • Среды тестирования • Виды тестирования 48
  18. У нас есть цель Она выражается в продажах. Её рассчитывают

    профессионалы в своей области. С помощью какой магии - мне не понятно. Но судя по опыту - они промахиваются редко. 49
  19. Целевое значение время RPS Целевые RPS Тестируем те цифры, которые

    нам предсказывают. Ни больше, ни меньше. Нагрузка выглядит так: 50
  20. Резкий всплеск Система держащая 10К rps в пике, может не

    выдержать выход на этото пик. RPS время RPS время 13 min 1 min 52
  21. Прогнозы зыбки. Стреляем с запасом. Цифры - это только прогноз.

    Реальность отличаться. Возможно в разы. Экспертная оценка: 30% запаса. Если есть возможность, то жмём до смерти. 55
  22. Максимальная нагрузка Тестируем до выхода за рамки критериев успешности. Или

    до смерти. время RPS Целевые RPS Нагрузка Ошибки Смерть 56
  23. Максимальная нагрузка Как это выглядит на графиках: Нагрузка Ошибки Смерть

    57 Есть несколько минут чтобы успеть исправить ситуацию Время пошло
  24. Loooong tests (aka stability) Прошел пик - ещё не победа.

    Есть редкие но тяжелые операции. Чаще всего они ведут в базу. И они со временем съедают всё. После прохождения пика, надо дать выдержку в 2 и более часов. Чем дольше - тем показательнее. 58
  25. Готовимся ещё раз • Данные для подготовки • Пользовательские сценарии

    и внутренние механики акций • Среды тестирования • Виды тестирования • Процессы и команда 60
  26. Результаты теста печалят 1. Пишем отчёт. 2. Создаём тикет с

    описанием проблемы. 3. Делаем митинги. 4. …. 5. …. 6. PROFIT! 63
  27. Результаты теста печалят 1. Пишем отчёт. 2. Создаём тикет с

    описанием проблемы. 3. Делаем митинги. 4. …. 5. …. 6. PROFIT! Но нет же! Прошел месяц 64
  28. Результаты теста печалят. Берем команду. +DEV + DevOps(aka Admin) +

    DBA Оперативно менять логирование. Собирать доп инфу. Делать быстрые фиксы. Накатывать Откатывать 65
  29. Готовимся ещё раз • Данные для подготовки • Пользовательские сценарии

    и внутренние механики акций • Среды тестирования • Виды тестирования • Процессы и команда • Планирование 70
  30. Тестировать раньше. Насколько? В прошлый раз - 3 месяца. Все

    варианты не учли. Изменения в хардваре за час до начала. Итого: первые тесты за 6 месяцев ДО. 71
  31. Ежедневное планирование Предупреждаем ВСЕХ, о нагрузке на проде. Делаем расписание

    дежурств для тестировщиков. Делаем расписания для остальной команды. 73
  32. Осторожно! Это PROD! 1. Не тестируем в прайм тайм. 2.

    Помним о клиентах. 3. Продумываем влияние на всё. 4. Договариваемся о подстраховке. 5. Решаем в только в чате можно ли поменять изначальную программу тестов. Никаких “личных ответственностей”.Потом тяжело бывает объяснить, почему ты вдруг решил в 4 утра завалить сайт. 74
  33. Готовимся ещё раз • Данные для подготовки • Пользовательские сценарии

    и внутренние механики акций • Среды тестирования • Виды тестирования • Процессы и команда • Планирование • Работа с бизнесом 75
  34. Бизнес на нашей стороне Уточняем планы по пользователям. Предлагаем свои

    идеи. Предупреждаем об ограничениях. Узнаём про их смелые планы. 76
  35. Готовили, но не пригодилось… и хорошо. Скрипты для тестов отдельных

    приложений. Дежурство тестировщиков во время события. Дополнительные генераторы нагрузки. 84
  36. Чтобы подготовиться нам потребовалось: Целевые цифры Опыт предыдущих акций Понимать

    поведение пользователя Тест на PROD и команда Провести нужные виды нагрузки Держать контакт с бизнесом 85