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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

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

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

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

Locust

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

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

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

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

Tsung (IDX-Tsunami)

Дает возможность провести нагрузочное тестирование клиент-серверных приложений и поддерживает 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

Позволяет писать скрипты для тестов на 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-рассылок. 

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

Источник: https://habr.com/ru/companies/cloud_mts/articles/779888/


Интересные статьи

Интересные статьи

Современные реалии таковы, что большинство людей в своих социальных сетях сами пишут на себя досье. В этой статье вы узнаете о некоторых инструментах, которые помогут вам узнать о человеке максимум. ...
Если ваша задача заключается в аналитике данных или в машинном обучении, то успех её выполнения зависит от создаваемых вами конвейеров данных и способов их создания. Но даже для опытных дата-инженер...
В процессе серийного производства электронных устройств следующим этапом после монтажа печатных плат является стенд серийной прошивки и тестирования. На нем производится прошивка микроконтроллера/микр...
Привет, Хабр! Продолжаем наш цикл статей по знакомству сообщества с различными инструментами биржевой торговли, историей трейдинга и описанием разных инструментов, которые нужны трейдерам. Сегодня пре...
Вначале была функция и вызывали ее в одном месте. Потом мы захотели вызвать ее в другом месте с новыми возможностями и обновили ее. Нам эта ф-ия так понравилась, что мы вызвали ее в третьем месте...