Открытые инструменты нагрузочного тестирования

b88b28e7755054090471c4c371ea423a.jpg

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

Как помочь ИТ-системам справиться с ростом трафика? Конечно, обеспечить эластичные вычисления и надежные каналы связи — сделать это можно с помощью облака. А еще на помощь приходит нагрузочное тестирование перед пиковыми событиями: вы должны знать, может ли приложение справиться с масштабированием или нет.

Для проведения нагрузочного тестирования следует определиться с методологией: наметить цели, продумать метрики и сценарии, подходы к интерпретации результатов. Разобраться с существенной частью этих задач должны специализированные открытые инструменты, и сегодня мы поговорим о некоторых заметных из них. В подборке: Locust, который позволяет писать тесты на Python, легковесный Drill, производительный Wrk, а еще — k6 и Tsung.

Locust

e363cbda933a0c105ea0072ce27d6e82.png

Инструмент позволяет писать нагрузочные тесты на Python, благодаря чему можно отслеживать изменения в коде и детально настраивать параметры. Веб-интерфейс в данном случае является скорее дополнением — отображает значения метрик и позволяет менять нагрузку по ходу тестирования.

История появления Locust напоминает ретроспективу классического стартапа: разработчиков не устраивали возможности JMeter и Tsung с необходимостью прописывать все в XML-файлах, и они предложили альтернативный подход на основе Python. Получилось гибкое решение, в том числе допускающее работу с кастомными обертками для достаточно широкого спектра задач.

Locust задействует greenlet’ы и возможности библиотеки gevent для работы с тысячами виртуальных узлов. Само название решения в переводе с английского означает «саранча» и акцентирует его потенциал по нагрузочному тестированию. 

Продукт распространяют по лицензии MIT с 2017 года, он регулярно получает обновления (как минимум раз в несколько месяцев) и попадает в рейтинги (например, Test Guild). Лучшее руководство по инструменту — его собственная документация. Она содержит раздел, посвящённый запуску первого теста, и более комплексные примеры. 

Tsung (IDX-Tsunami)

ac1b7359e6c4421a5ab7714e04a4d3f4.png

Дает возможность провести нагрузочное тестирование клиент-серверных приложений и поддерживает HTTP, XMPP, LDAP, WebDAV, а также PostgreSQL и MySQL. Tsung спроектировали на основе фреймворка Erlang/OTP с поддержкой параллелизма, поэтому он может работать с сотнями тысяч процессов. Однако конфигурирование тестов здесь происходит в XML-файлах, что снижает гибкость решения.

Проект с большой историей — существует с 2001 года. Кстати, его перевели в open source практически сразу после запуска, и сегодня решение доступно по GPL 2.0. 

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

Drill

По словам разработчика, который написал Drill на Rust для собственной практики во время изучения этого языка программирования, на запуск решения его вдохновил простой синтаксис системы управления конфигурациями Ansible.

С Drill работают с помощью YAML-файлов. Среди его преимуществ можно назвать простую интеграцию в CI/CD-пайплайн и возможность выставить пороговые значения для успешного прохождения испытаний. 

С момента релиза — в 2018 году — проект получает обновления в среднем раз в полгода. Сегодня его распространяют по лицензии GPL 3.0, а на GitHub разработчики дают базовую информацию: объясняют, как выглядит файл конфигурации, что необходимо для установки, и дают некоторые примеры.

k6

e4135ee78bf996d7ab4421de44a626d1.png

Позволяет писать скрипты для тестов на JavaScript, при необходимости подключая сторонние модули. По умолчанию поддерживает работу с HTTP, WebSockets и gRPC.Тесты можно легко интегрировать в CI/CD-пайплайн, а результаты —импортировать в различные системы мониторинга, например, Prometheus. 

В целом у k6 есть более 70 разнообразных расширений, например, для Apache Kafka и Mongo, а также для работы с AMQP и уведомлениями в Telegram. Повысить информативность логов можно опять же с помощью расширений — например, для работы с Elasticsearch.

Инструмент появился GitHub в 2017-м, его распространяют по лицензии AGPL 3.0. Решение, конечно же, обладает официальной документацией с подразделами по установке, запуску первых тестов и выводу отчетов. В руководстве по работе с k6 также можно найти разборы по комплексным и распределённым тестам, базовые материалы о проверке API и не только.

Wrk

Ключевое преимущество Wrk — его производительность. Он позволяет генерировать в разы большую нагрузку по сравнению с k6, Gatling, Drill и сопоставимыми инструментами на аналогичной инфраструктуре благодаря многопоточности и поддержке интерфейсов вроде epoll и kqueue.

Решение подходит не для всех тест-кейсов со сложной логикой: например, когда нужно имитировать действия пользователя при покупке в онлайн-магазине. 

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

Гибкое и оперативное масштабирование

Периодически компании сталкиваются с пиковыми нагрузками на инфраструктуру. Например, нагрузка на отдельные критические сервисы может ненадолго превысить типичную в несколько раз во время массовых push-рассылок. 

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

© Habrahabr.ru