5. Узкие места в архитектуре
- выбрали решение, основываясь на советах
и рекламе
- получили низкую производительность
именно в вашем случае
- потеряли время и ресурсы на переделку с
нуля
5
…на ней правда
можно возить сервера?
6. Масштабируемость
- стало не хватать ресурсов
- добавили второй сервер
- производительность выросла
незначительно
- потеряли ресурсы и время на глубокую
переделку в авральном режиме
6
если что, добавим
второй тоннель
whoops!
10. Что такое Яндекс.Танк?
open-source продукт
не генератор, а удобная обертка над
генераторами
написан на Python
быстрый генератор на C++ (phantom)
поддержка JMeter
10
14. Конфигурация
Каждый следующий — переопределяет и дополняет опции предыдущего:
системный конфиг
пользовательский конфиг
конфиг стрельбы
опции командной строки
Список плагинов тоже определяется конфигом. Т. е., можно подключить
плагин из конфига стрельбы и даже из командной строки.
14
17. Агрегатор, консоль, автостопы
агрегатор — собрать
информацию у стрелялки
посекундно
консольный вывод: статистика
по текущей стрельбе,
мониторинг, и другое — через
виджеты
автостопы — по критериям на
основе мониторинга и
статистики стрельбы
18. Отчеты
данные собираются в .json
.json кладется в .html
(генерится по шаблону)
этот .html содержит js-ку,
которая динамически строит
графики
шаблоны кастомизируемые
19. Мониторинг
на мишеньки (и, возможно, не
только) раскладываются
агенты
агенты собирают данные и
шлют обратно
все через SSH
21. Стрелялка на базе phantom
веб-сервер + клиент
standalone приложение на C++
асинхронный ввод-вывод: корутиновый движок
можно запускать без танка, но не нужно
выжимали 500 000 RPS в идеальных условиях
на вход ждет конфиг и файл с патронами с проставленными временами
21
22. Прегенерация патронов
size-prefixed формат: заголовок + запрос
заголовок: размер (следующего запроса), время, метка
тела запросов полностью: включая http-заголовки, данные форм
можно произвольные данные, даже бинарные
текущая версия степпера: 65 000 - 200 000 патронов в секунду
22
24. Входные форматы патронов
/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
маркер
размер
25. Формат phantom
86 12349 clck_page
GET /clck/page?data=hello HTTP/1.1
Host: example.org
Accept-Encoding: gzip,deflate
патрон — tuple
выходной формат — заголовок +
тело запроса
маркер
время
отправки
размер
26. Расписания
rps_schedule=line(1, 10, 10s) const(10, 15m) line(10, 100, 20s)
композиция шагов разного типа
знаем зависимость rps от
времени
нужно зависимость ts от номера
патрона
постоянныйлинейный участок снова линейный
29. Эксперимент BFG
экспериментальная пушка на Python
можно написать свою стрелялку и передать ее в BFG через конфиг
thrift, mysql, …
ответственность на вас
2000 RPS в локальный nginx — хватает для многих кейсов даже в
Яндексе
29
31. Планы и чаяния
доработка и верификация BFG
быстрая и простая стрелялка на Java
система конфигурирования и автодокументирование опций
распределенные тесты
обновление и унификация онлайн и офлайн отчетов
31