УДК 004.054

Анализ производительности и возможностей генератора нагрузки Яндекс Pandora для тестирования веб-систем

Бевзенко Сергей Александрович – старший разработчик ООО «Яндекс-Технологии».

Аннотация: В данной работе рассматриваются особенности генераторов нагрузочного тестирования и в частности такого сервиса как Яндекс Pandora. Автор изучает функционал фреймворка Yandex.Tank, а также плюсы и минусы его основных модулей. В статье анализируются возможности нового генератора нагрузочного тестирования Яндекс Pandora из пакета Yandex.Tank по основным характеристикам производительности и использования ресурсов данного типа. 

Ключевые слова: нагрузочное тестирование, генератор нагрузочного тестирования, информационные технологии, сетевые технологии, программное обеспечение.

Актуальность темы исследования заключается в попытке проанализировать возможности одного из самых новых генераторов нагрузочного тестирования на российском рынке. Это даст возможность разработчикам обратиться к нему в ситуациях, когда прочие генераторы могут быть недостаточно эффективны. Методология исследования основана на аналитическом и сравнительном методах.

Генераторы нагрузки - это инструменты или программное обеспечение, которые используются для создания искусственной нагрузки на веб-сайты или веб-приложения [5]. Они помогают симулировать большое количество пользователей и запросов к сайту, чтобы проверить его производительность, стабильность и способность к обработке высокой нагрузки.

Генераторы нагрузки необходимы для тестирования и проверки следующих аспектов интернет-сервиса:

  1. Тестирование производительности.
  2. Масштабируемость.
  3. Идентификация уязвимостей.
  4. Оптимизация ресурсов.
  5. Имитация реальных условий.

Если проанализировать эти аспекты более глубоко можно сказать о том, что генераторы позволяют разработчикам выявлять, как веб-сайт или приложение справляется с высоким количеством одновременных пользователей. Это помогает выявить узкие места в архитектуре, оптимизировать код и улучшить производительность. Данная проверка веб-сайта или приложения важна для обеспечения плавной работы при росте числа пользователей. Генераторы нагрузки позволяют определить, насколько хорошо система масштабируется и обрабатывает растущий трафик. Злоумышленники могут использовать DDoS-атаки или другие методы для перегрузки сайта и нарушения его работы. Генераторы нагрузки позволяют протестировать устойчивость веб-сайта к таким атакам и выявить возможные уязвимости. С помощью генераторов нагрузки можно оценить, как сайт использует ресурсы сервера, такие как ЦП, память и сетевая пропускная способность. Это позволяет оптимизировать конфигурацию серверов и достичь лучшей производительности. Генераторы нагрузки позволяют симулировать различные сценарии использования, например, различные типы запросов, количество пользователей и активность на сайте, чтобы проверить, как система справляется с различными условиями.

На сегодняшний день существует ряд генераторов нагрузки от разных производителей, с различными характеристиками, которые используются для тестирования, например, Apache JMeter, Gatling, Siege, Locust и другие. Некоторые из них могут быть легко интегрированы в автоматизированные процессы тестирования, а другие предоставляют расширенные функциональные возможности. В данной работе мы рассмотрим достаточно новый генератор нагрузки Pandora. Он является одним из модулей инструмента Yandex.Tank. Yandex.Tank - это фреймворк для нескольких утилит нагрузочного тестирования, который представляет собой унифицированный интерфейс для их конфигурации, запуска и построения отчетов вне зависимости от того, какая утилита используется. Яндекс.Танк поддерживает различные протоколы, такие как HTTP, HTTPS, WebSocket, Protocol Buffers, и другие, что позволяет тестировать разнообразные типы веб-приложений. Пользователи могут настраивать сценарии нагрузки, устанавливать параметры для имитации реального поведения пользователей и моделирования различных сценариев нагрузки. Яндекс.Танк может работать в распределенном режиме, позволяя запускать тесты с нескольких машин, что увеличивает возможности тестирования на больших нагрузках. Инструмент предоставляет графический интерфейс для удобного управления тестами, а также отображения результатов и статистики. Программа является open-source, что позволяет пользователям вносить изменения и расширения под свои нужды. Этот инструмент полезен для разработчиков, DevOps-инженеров и технических специалистов, чтобы убедиться в стабильности и производительности своих веб-приложений при высоких нагрузках [2].

Основной функционал Yandex.Tank состоит в следующем: он имеет возможность простого конфигурирования инструмента используя ini-файлы; обладает гибкой настройкой профилей нагрузки; имеет настраиваемый авто-стоп тест по различным критериям (например, если время отклика сервера превышает заданный порог или допустимое количество сетевых ошибок); обладает высокой производительностью, которая однако может быть ограничена производительностью тестируемого веб-сервера, демонстрирует наглядную визуализацию процесса тестирования с использованием локального веб-сервера, а также имеет подробные статистические данные в консоли [4].

До появления модуля Pandora, основными (и самыми популярными) элементами Yandex.Tank были: Phantom и JMeter. Рассмотрим их основные характеристики. Phantom -это генератор нагрузки c акцентом на высокую производительность, малое потребление ресурсов и точность выходных данных. Его применяют для проверки HTTP-сервисов. Она создана на Python – языке программирования общего назначения и работает исключительно в Unix-системах (переносимые, многозадачные и многопользовательские операционные программы). У Phantom существует опция автоматической остановки рабочего процесса. Для формирования модулей применяется открытая конфигурация. Интегрирован с модулем загрузки результатов в хранилище Graphite. Работу серверов контролируют по ssh-протоколу (удаленное управление ОС и туннелирование протокола передачи данных в интернете (TCP). Из минусов можно отметить отсутствие кроссплатформенности (способность программного обеспечения программного взаимодействовать с несколькими платформами и операционными системами).

JMeter: свободная к доступу программа с открытым исходным кодом. К особенностям можно отнести проверку выработки динамических и статических сайтов, возможность моделирования, усиленного воздействие на один сервер или группу. JMeter – популярный альтернативный вариант коммерческим платформам, который решает большинство задач. Кроссплатформенная система разработана на языке программирования Java, ею легко пользоваться, для проведения тестов не нужна сложная инфраструктура. По сравнению с другими платформами программа имеет понятный интерфейс с меньшим количеством тестовых сценариев. Простые диаграммы и графики позволяют без проблем анализировать статистические данные. JMeter совмещается с большим числом инжекторов нагрузки, которыми можно управлять с одного контроллера. Работает с HTTP, HTTPS, SOAP, XML, FTP и др. Для выполнения особых заданий можно написать свою расширенную версию или воспользоваться многочисленными готовыми плагинами. Среди минусов можно отметить что она не работает с JavaScript, поэтому при тестировании приложений, созданных на базе данного языка программирования, могут возникать сложности. Также ограничены лимиты памяти, если их превысить, возникают ошибки. Кроме того, отмечают ее негибкость и более низкую скорость нежели у предыдущего генератора [4].

Итак, Pandora — это достаточно новый (запущенный только в 2017 году) опенсорсный генератор нагрузки, написанный на языке программирования Go, он так же встроен в систему Yandex.Tank.

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

Для завершения нашего исследования проведем анализ генератора нагрузочного тестирования Pandora по наиболее актуальным параметрам применения, обслуживания и поддержки системы:

  1. Интерфейс
  2. Доступная среда.
  3. Эффективность.
  4. Масштабируемость.
  5. Протоколы.
  6. Стоимость.
  7. Интеграция. Адаптивность и расширяемость.
  8. Поддержка.

У Pandora нет графического интерфейса, так как он занимает много ресурсов, а задача. А задача генератора быстрая работа при экономии ресурсов. работать наиболее быстро, то есть экономить ресурсы. Поэтому даже генераторы, у которых есть графический интерфейс, используют его только для настройки тестов. Настройка у Pandora происходит в файлах, поэтом графический интерфейс здесь не имеет значения. Кроме того, Pandora можно использовать как фреймворк для разработки пользовательских версий. В комплекте идет удобный интерфейс для написания своих тестов на языке программирования Go. Он легок в использовании, быстрый, и поддерживает асинхронность на уровне языка.

Обширная экосистема языка Go, особенно в области сетевых библиотек, позволяет работать практически с любым протоколом. Кроме того, Pandora прозрачно интегрируется в Yandex.Tank, позволяет автоматизировать запуск нагрузочных тестов, собирать мониторинг и получать красивые отчеты. Инструмент имеет доступ к аппаратным и сетевым ресурсам, чтобы создавать необходимые условия для проведения тестирования (рост объема трафика, данных и т.д.). Система тестирования одномоментно может поддерживать более 100 000 параллельных соединений. Чем больше количество участников, тем выше эффективность инструмента [1].

Pandora способна генерировать нагрузку до 90 000 RPS простыми запросами, что практически равно показателям флагманского инструмента Phantom, о котором упоминалось выше.

Программа поддерживает протоколы: HTTP1.1, HTTP2, gRPC, которые значительно расширяют возможности нагрузочного тестирования. Pandora можно использовать для разработки пользовательских версий. Это позволяет подавать сценарную нагрузку, а также нагружать большинство протоколов, для которых есть клиентские библиотеки, написанные на Go, например, для WebSocket, PostgreSQL или DNS [1].

При достаточно больших возможностях, Pandor является бесплатным сервисом. Для создания нагрузки на сайты можно использовать один из готовых сценариев, но гораздо полезнее здесь возможность создавать свои сценарии (на языке программирования Go). Высокая скорость работы компилятора позволяет получать высокопроизводительный генератор, настроенный индивидуально именно под конкретный сервис. Написанные на Go нагрузочные тесты можно хранить в личном репозитории и работать с ними как с кодом. Кроме того, у пользователей сервиса есть возможность обратиться к разработчикам со своими вопросами и получить обратную связь по работе.

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

Список литературы

  1. Генераторы нагрузки [Электронный ресурс]. – 2023. – URL: https://cloud.yandex.ru/docs/load-testing/concepts/load-generator (дата обращения 01.08.2023).
  2. Гильмуллин Т. Автоматизация нагрузочного тестирования при помощи инструмента Яндекс.Танк[Электронный ресурс]. – 2013. – URL: https://forworktests.blogspot.com/2013/11/yandex-tank.html (дата обращения 01.08.2023).
  3. Ермыкин А.А. Разработка метода построения комплекса нагрузочного тестирования распределенной информационной системы. СПб: Изд-во СПбГУ ИТМО, 2005. 147 с.
  4. Инструменты для нагрузочного и перформанс тестирования [Электронный ресурс]. – 2022. – URL: https://d-element.ru/about/blog/instrumenty-dlya-nagruzochnogo-i-performans-testirovaniya/ (дата обращения 01.08.2023).
  5. Рудюк Е.П., Соломатин А.А. Оценка производительности сервера базы данных путем применения нагрузочного тестирования // Наука, техника и образование: электрон, 2016. № 4 (9). С. 97-10.
  6. Уткин Г.С., Башарин А. П. Особенности построения модели нагрузочного тестирования. // Лесной вестник. №6. С.145-147.

Интересная статья? Поделись ей с другими: