Нагрузочное
тестирование
Яндекс.Танком
Алексей Лавренюк
PyCon 2014
Зачем проводить нагрузочное
тестирование?
3
Не хватило ресурсов
время
обслуженныеклиенты
макс. производительность
ожидаемыйрост
испорченная репутация
потери
Узкие места в архитектуре
- выбрали решение, основываясь на советах
и рекламе
- получили низкую производительность
именно ...
Масштабируемость
- стало не хватать ресурсов
- добавили второй сервер
- производительность выросла
незначительно
- потерял...
Задача нагрузочного тестирования
Управление рисками, связанными с
производительностью:
идентификация
анализ
мониторинг
7
Этапы нагрузочного тестирования
сбор информации
подготовка стенда и инструментов
тестирование
анализ результатов
8
Яндекс.Танк
9
Что такое Яндекс.Танк?
open-source продукт
не генератор, а удобная обертка над
генераторами
написан на Python
быстрый гене...
Функция танка
превратить описание стрельбы и тестовые данные
в отчет путем проведения тестирования
load.ini
ammo report.ht...
Архитектура танка
12
Общая архитектурная схема
на стороне

мишеньки
Конфигурация
Каждый следующий — переопределяет и дополняет опции предыдущего:
системный конфиг
пользовательский конфиг
кон...
Жизненный цикл теста
Модуль поддержки phantom
внешняя стрелялка C++
(подробнее — позже)
генерит файл с результатами
его читает агрегатор
Агрегатор, консоль, автостопы
агрегатор — собрать
информацию у стрелялки
посекундно
консольный вывод: статистика
по текуще...
Отчеты
данные собираются в .json
.json кладется в .html
(генерится по шаблону)
этот .html содержит js-ку,
которая динамиче...
Мониторинг
на мишеньки (и, возможно, не
только) раскладываются
агенты
агенты собирают данные и
шлют обратно
все через SSH
phantom
20
Стрелялка на базе phantom
веб-сервер + клиент
standalone приложение на C++
асинхронный ввод-вывод: корутиновый движок
можн...
Прегенерация патронов
size-prefixed формат: заголовок + запрос
заголовок: размер (следующего запроса), время, метка
тела за...
Архитектура степпера
Входные форматы патронов
/my/page
/my/other/page
список url, access.log, …
автомаркировка на базе
содержимого
фильтры на б...
Формат phantom
86 12349 clck_page
GET /clck/page?data=hello HTTP/1.1
Host: example.org
Accept-Encoding: gzip,deflate
патро...
Расписания
rps_schedule=line(1, 10, 10s) const(10, 15m) line(10, 100, 20s)
композиция шагов разного типа
знаем зависимость...
Генерация таймстемпов
27
время
время
запросы

в секунду
запросы

в секунду
BFG
28
Эксперимент BFG
экспериментальная пушка на Python
можно написать свою стрелялку и передать ее в BFG через конфиг
thrift, m...
Архитектура BFG
постановка

задач
агрегация
результатов
стрельба

в мишень
Планы и чаяния
доработка и верификация BFG
быстрая и простая стрелялка на Java
система конфигурирования и автодокументиров...
Спасибо за внимание!
Алексей Лавренюк, Яндекс
twitter: @direvius
Ссылки
https://github.com/yandex-load/yandex-tank — репозиторий Я.Танка
http://clubs.ya.ru/yandex-tank/ — клуб на Я.ру
33
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2014)
Upcoming SlideShare
Loading in …5
×

Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2014)

1,102 views

Published on

  • Be the first to comment

  • Be the first to like this

Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2014)

  1. 1. Нагрузочное тестирование Яндекс.Танком Алексей Лавренюк PyCon 2014
  2. 2. Зачем проводить нагрузочное тестирование? 3
  3. 3. Не хватило ресурсов время обслуженныеклиенты макс. производительность ожидаемыйрост испорченная репутация потери
  4. 4. Узкие места в архитектуре - выбрали решение, основываясь на советах и рекламе - получили низкую производительность именно в вашем случае - потеряли время и ресурсы на переделку с нуля 5 …на ней правда можно возить сервера?
  5. 5. Масштабируемость - стало не хватать ресурсов - добавили второй сервер - производительность выросла незначительно - потеряли ресурсы и время на глубокую переделку в авральном режиме 6 если что, добавим второй тоннель whoops!
  6. 6. Задача нагрузочного тестирования Управление рисками, связанными с производительностью: идентификация анализ мониторинг 7
  7. 7. Этапы нагрузочного тестирования сбор информации подготовка стенда и инструментов тестирование анализ результатов 8
  8. 8. Яндекс.Танк 9
  9. 9. Что такое Яндекс.Танк? open-source продукт не генератор, а удобная обертка над генераторами написан на Python быстрый генератор на C++ (phantom) поддержка JMeter 10
  10. 10. Функция танка превратить описание стрельбы и тестовые данные в отчет путем проведения тестирования load.ini ammo report.html
  11. 11. Архитектура танка 12
  12. 12. Общая архитектурная схема на стороне
 мишеньки
  13. 13. Конфигурация Каждый следующий — переопределяет и дополняет опции предыдущего: системный конфиг пользовательский конфиг конфиг стрельбы опции командной строки Список плагинов тоже определяется конфигом. Т. е., можно подключить плагин из конфига стрельбы и даже из командной строки. 14
  14. 14. Жизненный цикл теста
  15. 15. Модуль поддержки phantom внешняя стрелялка C++ (подробнее — позже) генерит файл с результатами его читает агрегатор
  16. 16. Агрегатор, консоль, автостопы агрегатор — собрать информацию у стрелялки посекундно консольный вывод: статистика по текущей стрельбе, мониторинг, и другое — через виджеты автостопы — по критериям на основе мониторинга и статистики стрельбы
  17. 17. Отчеты данные собираются в .json .json кладется в .html (генерится по шаблону) этот .html содержит js-ку, которая динамически строит графики шаблоны кастомизируемые
  18. 18. Мониторинг на мишеньки (и, возможно, не только) раскладываются агенты агенты собирают данные и шлют обратно все через SSH
  19. 19. phantom 20
  20. 20. Стрелялка на базе phantom веб-сервер + клиент standalone приложение на C++ асинхронный ввод-вывод: корутиновый движок можно запускать без танка, но не нужно выжимали 500 000 RPS в идеальных условиях на вход ждет конфиг и файл с патронами с проставленными временами 21
  21. 21. Прегенерация патронов size-prefixed формат: заголовок + запрос заголовок: размер (следующего запроса), время, метка тела запросов полностью: включая http-заголовки, данные форм можно произвольные данные, даже бинарные текущая версия степпера: 65 000 - 200 000 патронов в секунду 22
  22. 22. Архитектура степпера
  23. 23. Входные форматы патронов /my/page /my/other/page список url, access.log, … автомаркировка на базе содержимого фильтры на базе содержимого и маркера 86 clck_page GET /clck/page?data=hello HTTP/1.1 Host: example.org Accept-Encoding: gzip,deflate маркер размер
  24. 24. Формат phantom 86 12349 clck_page GET /clck/page?data=hello HTTP/1.1 Host: example.org Accept-Encoding: gzip,deflate патрон — tuple выходной формат — заголовок + тело запроса маркер время
 отправки размер
  25. 25. Расписания rps_schedule=line(1, 10, 10s) const(10, 15m) line(10, 100, 20s) композиция шагов разного типа знаем зависимость rps от времени нужно зависимость ts от номера патрона постоянныйлинейный участок снова линейный
  26. 26. Генерация таймстемпов 27 время время запросы
 в секунду запросы
 в секунду
  27. 27. BFG 28
  28. 28. Эксперимент BFG экспериментальная пушка на Python можно написать свою стрелялку и передать ее в BFG через конфиг thrift, mysql, … ответственность на вас 2000 RPS в локальный nginx — хватает для многих кейсов даже в Яндексе 29
  29. 29. Архитектура BFG постановка
 задач агрегация результатов стрельба
 в мишень
  30. 30. Планы и чаяния доработка и верификация BFG быстрая и простая стрелялка на Java система конфигурирования и автодокументирование опций распределенные тесты обновление и унификация онлайн и офлайн отчетов 31
  31. 31. Спасибо за внимание! Алексей Лавренюк, Яндекс twitter: @direvius
  32. 32. Ссылки https://github.com/yandex-load/yandex-tank — репозиторий Я.Танка http://clubs.ya.ru/yandex-tank/ — клуб на Я.ру 33

×