3. 15 Апреля 2014
Зачем нужно нагрузочное тестирование?
3
Downtime - это очень дорого
• eBay offline — $90K / час (1999)
• Financial company down — $100K / час
• Amazon offline — $1M / час (2008)
• Если у вас «настоящий» Hi-Load ~ $50K / час
7. Виды тестирования «под нагрузкой»
7
Load testing (нагрузочное тестирование)
• Какова максимально выдерживаемая нагрузка?
• Какой у нас есть запас по прочности?
• Через какое время запаса по прочности не хватит?
• Где наше узкое место?
8. Виды тестирования «под нагрузкой»
8
Performance testing (тестирование производительности)
• Насколько быстро отвечает мой сервис/компонент?
• Насколько быстро он будет отвечать через полгода?
• Когда мой сервис/компонент начнет отвечать слишком
медленно?
9. Виды тестирования «под нагрузкой»
9
Resource utilization testing (тестирование ресурсов)
• Сколько и каких ресурсов используется при работе
сервиса/компонента?
!
• Какой запас по ресурсам у нас есть?
• В какой вид ресурса мы упираемся? Как нам решить эту
проблему?
10. Виды тестирования «под нагрузкой»
10
Stress testing (стресс тестирование)
• Как умирает моя система/компонент?
• Как проходит процесс восстановления?
11. Виды тестирования «под нагрузкой»
11
Volume testing (Обьемное тестирование)
• Как будет работать моя система при продакшен-объёмах
данных?
!
• Что будет с производительностью моей системы при
увеличении объемов данных?
!
• Когда у меня начнутся проблемы из-за объёма данных?
12. Виды тестирования «под нагрузкой»
12
Stability testing (тестирование стабильности)
• Что происходит с моей системой/компонентом под
длительной постоянной нагрузкой?
!
• Не ухудшается ли производительность со временем?
• Как потребляются ресурсы с течением времени?
14. Яндекс.Танк
14
Яндекс.Танк — представитель инструментов
нагрузочного тестирования интернет-сервисов.
!
Позволяет эмулировать нагрузку реальных
пользователей на сервер.
!
С помощью дополнительных инструментов позволяет
находить узкие места, блокировки и неоптимальные
настройки приложения.
15. Яндекс.Танк
15
Установка (Ubuntu)
sudo apt-get install python-software-properties!
sudo add-apt-repository ppa:yandex-load/main!
sudo apt-get update!
sudo apt-get install yandex-load-tank-base!
* При высоких RPS требуется тюнинг сетевого стека Linux
https://yandextank.readthedocs.org/en/latest/install.html
26. Яндекс.Танк
26
Подготовка к стрельбе
• Убедиться, что из-под танка доступна мишень
(telnet target-ip 80)
!
• Убедиться, что сервера находятся «рядом» и пакеты ходят
по минимальному маршруту
(traceroute targethost)
!
• Убедиться, что не включены никакие Anti-DDoS средства
на мишени или фаерволе.
40. Яндекс.Танк
40
А что если надо еще сложнее?
[phantom]!
address=some-site.com!
rps_schedule=line(1,100,1m) const(100,1h)
41. Яндекс.Танк
41
А что если надо еще сложнее?
• Создаем файл ammo.txt
85 tag!
POST / HTTP/1.1!
Host: example.com!
Content-Length:5!
Connection: Close!
!
Hello!
!
• Запускаем команду yandex-tank ammo.txt
43. Яндекс.Танк
43
Еще варианты?
• В качестве ленты запросов можно использовать Access.log
• Подготовка ленты запросов из HAR файлов браузера
44. Яндекс.Танк
44
Что еще?
• Стрельба по нескольким мишеням
• Стрельба из нескольких IP
• Правила для автоматический остановки стрельбы
• Стрельба по базам данных
• Расширяемость плагинами
• Возможность стрелять практически по любой мишени
(BFG - пушка)
45. Яндекс.Танк
45
Поиск узких мест — мониторинг
• Поддерживается только Linux
• Необходим безпарольный доступ по SSH c танка к мишени
• Можно мониторить несколько серверов
47. Яндекс.Танк
47
Лог файл
• Текстовый формат
• Простой (аналог CSV)
• Подробный
• Легко импортировать в любой удобный для вас
инструмент (Excel, DB, gnuplot, etc.. )
!
• Доступны онлайн-сервисы (http://loadosophia.org)
!
• Отправка статистики стрельбы в Graphite