Home » Разное » Пример нагрузочного тестирования сайта с Yandex.Tank

Пример нагрузочного тестирования сайта с Yandex.Tank

Способов проверить работу сайта под нагрузкой много от самых примитивных утилит до целых систем. Я покажу конкретный пример нагрузочного тестирования сайта с помощью Yandex.Tank. Это бесплатный инструмент с очень большим функционалом и простой в использовании.

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужно пройти .

Введение

Для начала приведу несколько полезных ссылок на тему Yandex.Tank. Они все почему-то разрозненные и не связаны логически друг с другом. Функционал этого инструмента обширный, я же рассмотрю достаточно простой пример, поэтому точно пригодится документация.

Первым делом сходите на overload.yandex.net, зарегистрируйтесь там и получите токен. Он нам нужен будет далее, чтобы в удобном виде просматривать визуализацию результатов. Это не обязательное условие для совершения тестов и можно обойтись без него. Будет простенький вывод в консоли, с помощью которого можно оценить результат нагрузочного тестирования. Но с помощью модуля overload гораздо удобнее и нагляднее интерпретировать полученные данные.

Установка Yandex.Tank

При желании, вы можете установить Yandex.Tank из пакетов, либо запустить из исходников. Он написан на Python, так что к нему понадобится еще пачка модулей. Я же предпочитаю запускать его в Docker. Это в разы удобнее и быстрее.

Для начала установите себе докер, у меня есть статья по теме - установка docker на centos. После этого создаем директорию для данных танка и кладем туда конфиг нагрузочного теста для сайта.

# mkdir ~/yandex.tank
# touch load.yaml
overload:
  enabled: true
  package: yandextank.plugins.DataUploader
  token_file: "token.txt"
phantom:
  address: www.rambler.ru:443
  header_http: "1.1"
  headers:
    - "[Host: www.rambler.ru]"
    - "[Connection: close]"
  uris:
    - /
    - /sport/
  load_profile:
    load_type: rps
    schedule: line(5, 30, 1m)
  ssl: true
autostop:
  autostop:
    - http(5xx,10%,5s)
console:
  enabled: true
telegraf:
  enabled: false
token.txt Текстовый файл с токеном от overload.yandex.net.
www.rambler.ru:443 Адрес сервера, который будем тестировать. Причем это не адрес сайта, так как это доменное имя просто резолвится в ip адрес. Можно задать сразу в виде ip.
Host: www.rambler.ru Http заголовок, в котором мы передаем имя сайта, который будем нагружать.
/, /sport/ Урлы сайта, к которым по очереди будем обращаться. В данном случае это главная страница и страница /sport. Этот список может быть указан через текстовый файл. Подробности смотрите в документации.
line(5, 30, 1m) Тип нагрузки. В данном случае это линейный рост запросов с 5 до 30 в течении одной минуты.
http(5xx,10%,5s) Условие автоматической остановки теста. В данном случае тест завершится сам, если в течении 5 секунд будет 10% пятисотых ошибок.

Создадим текстовый файл с токеном:

# touch token.txt

Не забудьте записать туда токен. Подготовку закончили, можно приступать к тестированию.

Запуск нагрузки на сайта с помощью Yandex.Tank

Запускаем Yandex.Tank:

# cd ~/yandex.tank
# docker run --rm -v ~/yandex.tank:/var/loadtest -it direvius/yandex-tank

Ждем окончания тестирования. Если укажите очень большую нагрузку, например в тысячи rps, можете повесить виртуалку или сайт (хе-хе). Вывод работы танка будет примерно такой.

Пример настройки Yandex.Tank

В нагрузочном тестировании сайта нас в первую очередь интересует время отклика. Где его можно оценить, я выделил на скриншоте. После того, как завершится тест, в завершающем выводе работы контейнера будет ссылка на overload, где вы сможете посмотреть результат через браузер.

Завершение нагрузочного тестирования

Пройдя по ней вы сможете более детально изучить поведение сайта под нагрузкой.

Просмотр результатов теста yandex.tank в браузере

Например, на приведенном результате теста четко видно, как при приближении к 25-ти одновременным запросам начинает сильно расти время ответа сервера. На 20-ти запросах в 90-й перцентиль попадали все ответы менее 500 мс, а на 25-ти уже даже в 50-й перцентиль зашли ответы 750 мс.

Имеет смысл походить по вкладкам, там много другой полезной информации. С помощью данного тестирования вы сможете достаточно быстро определить предел производительности вашего железа.

Если хотите смоделировать более реальную нагрузку, а не синтетическую, то хорошенько поработайте над набором тестов и урлов. Можно очень гибко все это настроить. Например, добавить post запросы, где-то нарастающую нагрузку сделать, а где-то постоянную. Все это описано в документации. Там есть сильно навороченные примеры.

Заключение

С помощью Yandex.Tank вы без проблем можете положить неподготовленный сайт. Главное найти в нем самые медленные и нагруженные места (например поиск или большой каталог) А потом одновременно запустите тест из разных мест. А если еще и хорошенько автоматизируете это с помощью terraform и ansible, то совсем хорошо получится. Или плохо для владельца сайта. Правда это дороговато может стоить, есть способы подешевле. Но сейчас не будем об этом.

От такого рода "тестирования" достаточно просто защититься и стоит это делать всегда. Примеры защиты я подробно описывал в своих статьях - защита от ddos, защита от dos атак. В общем случае достаточно будет стандартных возможностей nginx, iptables и fail2ban. Удивительно, но очень много кто этого не делает. Я ради любопытства иногда клал очень неожиданные сайты. Но только в академических целях и на очень короткий период времени. Помним о карме и не вредим другим людям! Используем инструменты только во благо.

Онлайн курс "Базы данных"

Онлайн-курс "Базы данных" – для разработчиков, администраторов СУБД и всех, кто хочет эффективно работать с любой базой данных (как реляционной, так и нереляционной) с помощью языка структурированных запросов SQL. Курс не для новичков – нужно пройти вступительный тест. Выпускники курса смогут:
  • проектировать базы данных и создавать оптимальную структуру их хранения;
  • различать основные СУБД, которые могут пригодиться разработчику (PostgreSQL, MySQL, Redis, MongoDB, Cassandra и т. д.);
  • освоить синтаксис и особенности работы SQL, DDL, DML;
  • оптимизировать медленные запросы и разбираться с некорректными SQL-запросами;
  • уверенно работать с индексами, оптимизировать, профилировать и обновлять базы данных.
Проверьте себя на вступительном тесте и смотрите программу детальнее по .

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

4 комментария

  1. Не забудьте записать туда токен. - а где его взять?

  2. Спасибо, раньше пользовался jmeter, но танчик порадовал)

Добавить комментарий

Ваш адрес email не будет опубликован.

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.