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

16b6c87229eaf58768d25ed7b2bbbf52?s=47 CodeFest
April 05, 2018

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

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

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

16b6c87229eaf58768d25ed7b2bbbf52?s=128

CodeFest

April 05, 2018
Tweet

Transcript

  1. Нагрузка для бизнес событий BlackBlackBlack Friday 1

  2. Привет Я Михаил Косыхин Руковожу отделом QA в Lamoda В

    тестировании больше 10 лет 2
  3. 3

  4. 4

  5. Lamoda в цифрах 5 *http://datainsight.ru/top100/ 6-ой по размеру интернет магазин

    в России*
  6. Обычный день обычного пользователя 6

  7. Но случаются акции… 7

  8. Но случаются акции… 8

  9. 9

  10. 10

  11. Готовьтесь, ибо грядёт! Пользовательский трафик больше в разы! 11

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

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

  14. 14

  15. BF 2016 Actual 15

  16. 16

  17. В следующий раз всё должно быть идеально! 17

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

    и внутренние механики акций • Среды тестирования • Виды тестирования • Процессы и команда • Планирование • Работа с бизнесом 18
  19. Готовимся ещё раз • Данные для подготовки 19

  20. 20

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

    пики от обычного времени? Как себя ведут пользователи? Какие запросы чаще падают? Какими запросами можно пренебречь? Что нагружено? 21
  22. Забор нужных логов из дампов эластика 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
  23. Выбор классов эквивалентности 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
  24. Классы эквивалентности 120+ классов для сайта 90+ классов для мобильного

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

    и внутренние механики акций 25
  26. Профиль пользователя влияет на нагрузку 26

  27. Профиль пользователя Новый Старый Регистрация 27

  28. Профиль пользователя Новый Старый Регистрация Много заказов Мало заказов 28

  29. Профиль пользователя Новый Старый Регистрация Много заказов Мало заказов Спец

    скидки 29
  30. Каждая акция неповторима 30

  31. Как может выглядеть акция. Купон Количество Время Товары Категории 10+

    параметров 31
  32. Как может выглядеть акция. Купон Количество Время Товары Категории AND

    OR NOT XOR 32
  33. Как может выглядеть акция. Купон Количество Время Товары Категории Купон

    Купон Купон Купон Купон AND OR NOT XOR 33
  34. Пользователь знает лучше как покупать! 34

  35. Пользователь знает лучше как покупать! 35 Корзина как избранное

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

    и внутренние механики акций • Среды тестирования 36
  37. Тестировать на тестовой среде или на PROD? 37

  38. Тестировать на тестовой среде. Какая разница? 38

  39. Тестировать на тестовой среде. Какая разница? 39

  40. Тестировать на тестовой среде. Вроде мелочи. 40

  41. Тестировать на тестовой среде. Впрочем... 41

  42. Тестировать на тестовой среде… но нет. 42 При тесте на

    тесте мы упускаем из вида инфраструктуру
  43. ОК на проде, но каждое приложение отдельно? 43

  44. Каждое приложение отдельно? 44

  45. Каждое приложение отдельно? 45

  46. Каждое приложение отдельно? 46 Каскадные вызовы от одного запроса

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

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

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

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

    нам предсказывают. Ни больше, ни меньше. Нагрузка выглядит так: 50
  51. Целевое значение Вид в графиках: Общая нагрузка Нагрузка от теста

    51
  52. Резкий всплеск Система держащая 10К rps в пике, может не

    выдержать выход на этото пик. RPS время RPS время 13 min 1 min 52
  53. Резкий всплеск 13 min 1 min Как это выглядит на

    графиках: 53
  54. Всё-равно не попадёте, поэтому стреляйте с запасом Generals are always

    fighting the last war 54
  55. Прогнозы зыбки. Стреляем с запасом. Цифры - это только прогноз.

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

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

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

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

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

    и внутренние механики акций • Среды тестирования • Виды тестирования • Процессы и команда 60
  61. OK, грузим 61

  62. OK, грузим 62

  63. Результаты теста печалят 1. Пишем отчёт. 2. Создаём тикет с

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

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

    DBA Оперативно менять логирование. Собирать доп инфу. Делать быстрые фиксы. Накатывать Откатывать 65
  66. Внезапные беды Нагрузка с генератора Нагрузка на приложении время RPS

    время RPS 66
  67. Внезапные беды Нагрузка с генератора Нагрузка на приложении время RPS

    время RPS 67
  68. ELK 68

  69. ELK Trap 10+ mins 69

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

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

    варианты не учли. Изменения в хардваре за час до начала. Итого: первые тесты за 6 месяцев ДО. 71
  72. Готовиться за полгода?! Да! Загруженность команд. Сроки закупок железа. Время

    на План Б. 72
  73. Ежедневное планирование Предупреждаем ВСЕХ, о нагрузке на проде. Делаем расписание

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

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

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

    идеи. Предупреждаем об ограничениях. Узнаём про их смелые планы. 76
  77. Угроза от AI. 77 Новый хайповый функционал. Договорились перенести запуск.

  78. Наш результат: 78

  79. Black Friday (Mobile backend) 79

  80. Black Friday (Site backend) 80

  81. BF 2017 Expected 81

  82. BF 2017 Actual 82

  83. BF 2017 Actual 83

  84. Готовили, но не пригодилось… и хорошо. Скрипты для тестов отдельных

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

    поведение пользователя Тест на PROD и команда Провести нужные виды нагрузки Держать контакт с бизнесом 85
  86. email: mikhail.kosykhin@lamoda.ru telegram: @TestHead https://tech.lamoda.ru 86

  87. Backup 87

  88. Load stack Generator: Jmeter Data storage: InfluxDB Visualisation: Grafana Orchestration:

    Taurus Automation: Bamboo 88
  89. Stack Наш техрадар можно найти здесь: https://tech.lamoda.ru 89