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

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

Углубленный онлайн-курс по MikroTik

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.

Введение

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

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

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

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

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

# mkdir ~/yandex.tank && cd yandex.tank
# touch load.yaml
overload:
  enabled: true
  package: yandextank.plugins.DataUploader
  token_file: "token.txt"
phantom:
  address: news.mail.ru:443
  header_http: "1.1"
  headers:
    - "[Host: news.mail.ru]"
    - "[Connection: close]"
  uris:
    - /
    - /economics/
  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.
news.mail.ru:443 Адрес сервера, который будем тестировать. Причем это не адрес сайта, так как это доменное имя просто резолвится в ip адрес. Можно задать сразу в виде ip.
Host: news.mail.ru Http заголовок, в котором мы передаем имя сайта, который будем нагружать.
/, /economics/ Урлы сайта, к которым по очереди будем обращаться. В данном случае это главная страница и страница /economics/. Этот список может быть указан через текстовый файл. Подробности смотрите в документации.
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 yandex/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. Удивительно, но очень много кто этого не делает. Я ради любопытства иногда клал очень неожиданные сайты. Но только в академических целях и на очень короткий период времени. Помним о карме и не вредим другим людям! Используем инструменты только во благо.

Углубленный онлайн-курс по MikroTik.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.

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

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

Автор Zerox

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

6 комментариев

  1. Vladimir Samotokin

    Хорошая статья для тех кто понимает о чём идёт речь. Но для неискушённого (начинающего) веб-мастера хочется инструмент по проще. Лично меня как пользователя виртуального хостинга интересует один главный вопрос: КАКИЕ ПРЕИМУЩЕСТВА Я ПОЛУЧУ ПРИ ПЕРЕХОДЕ Н ДЕШОВЫЙ VPS или лучше этого не делать? Использую WordPress и конечно мечтаю создать грандиозный сайт с большой посещаемостью! ВОПРОС - какими характеристиками должен обладать хостинг чтобы выдерживать большой поток посетителей к примеру 150 тыс.месяц (Посетители в месяц - 144K ≈ 4.6K в день Просмотры -195K ≈ 6.5K в день - ЭТО ПАРАМЕТРЫ ВАШЕГО САЙТА) КАКОВЫ ПАРАМЕТРЫ ВАШЕГО ХОСТИНГА К ПРИМЕРУ если не секрет конечно? Понятное дело что чем мощнее тем лучше, но когда ресурсы ограничены нужно искать компромисс, не так-ли. А уж если замахнуться в мировом масштабе - до 1 млн. посетителей в месяц? Не нужны точные расчёты как делают остальные умники - дайте краткий совет. Заранее надеюсь на вашу компетентность в этом вопросе.

    • Для указанной посещаемости хватит виртуального сервера с 1 CPU и 1 GB оперативной памяти. То есть самая минималка. Это нагрузка, как говорится, ни о чём.

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

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

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar