Статья опубликована в рамках: Научного журнала «Студенческий» № 2(256)
Рубрика журнала: Информационные технологии
Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2, скачать журнал часть 3, скачать журнал часть 4, скачать журнал часть 5, скачать журнал часть 6, скачать журнал часть 7, скачать журнал часть 8
РЕАЛИЗАЦИЯ БЭКЕНД-СЕРВЕРА ДЛЯ АВТОМАТИЗАЦИИ РАБОТЫ С УТИЛИТОЙ НАГРУЗОЧНОГО ТЕСТИРОВАНИЯ YANDEX-TANK
IMPLEMENTATION OF A BACKEND SERVER FOR AUTOMATING WORK WITH THE YANDEX-TANK LOAD TESTING UTILITY
Ruslan Svirskiy
student, department KB-2 "Information and analytical systems of cybersecurity", MIREA — Russian Technological University,
Russia, Moscow
АННОТАЦИЯ
В статье рассматривается пример реализации бэкенд-сервера для автоматизированной работы с утилитой yandex-tank, распространяемой со свободной лицензией. Анализируются возможности утилиты, её API, затрагиваемые файлы при работе системы, а также настройка файла конфигурации. Рассматриваются несколько генераторов нагрузки. После анализа утилиты реализовывается бэкенд на языке программирования golang.
ABSTRACT
The article considers an example of the implementation of a backend server for automated work with the yandex-tank utility distributed with a free license. The capabilities of the utility, its API, affected files during system operation, as well as configuration file settings are analyzed. Several load generators are being considered. After analyzing the utility, the backend is implemented in the golang programming language.
Ключевые слова: нагрузочное тестирование, бэкенд, yandex-tank, автоматизация, контейнеризация, golang, клиент-серверная архитектура.
Keywords: load testing, backend, yandex-tank, automation, containerization, golang, client-server architecture.
Yandex Tank - это расширяемая утилита нагрузочного тестирования для unix-подобных систем. Она написана на Python и использует разные модули генератора нагрузки на разных языках.
Утилита состоит из нескольких модулей, что позволяет ей быть расширяемой:
- Ядро - основные этапы подготовки теста, настройки, выполнения. Хранение артефактов. Управляет плагинами/модулями;
- Генераторы нагрузки - модули, которые используют генераторы нагрузки и управляют ими (генераторы нагрузки не входят в модуль);
- Загрузчики артефактов - модули, которые загружают артефакты во внешние хранилища и сервисы;
- Другие полезные инструменты - инструменты мониторинга, онлайн-экран консоли, автозапуски и так далее.
Рисунок 1. Архитектура утилиты Tank
В утилите предусмотрены несколько генераторов нагрузок. Первый – Phantom. Представляет из себя высокопроизводительный асинхронный генератор нагрузки. Он конфигурируется с помощью файла load.yaml, находящегося в домашней директории образа.
На рисунке 2 представлен пример конфигурационного файла. Для нагрузки необходимо указать адрес и порт нагружаемого сервиса, параметра запроса, а также тип нагрузки. Возможны несколько типов нагрузки – линейная, ступенчатая и константная.
Рисунок 2. Конфигурационный файл Phantom
Следующий генератор нагрузок – Pandora. Написан на Golang и может поддерживать более 100 000 параллельных соединений и генерировать нагрузку до 90 000 запросов в секунду.
В Pandora есть встроенные инструменты для тестирования по следующим протоколам:
- gRPC
- HTTP/2
- HTTP(S)
Также, утилита предоставляет возможность использовать сервис Yandex overload для визуализации в виде графиков проведенных нагрузок. Для это необходимо зарегистрироваться и передать в файл конфигурации ключ авторизации.
В качестве генератора нагрузки будет использован Phantom в силу его простоты конфигурации.
Yandex-Tank при использовании генерирует директорию и файлы в ней на каждую нагрузку. В директории logs создаются эти поддиректории. Вся информация о нагрузке лежит в файле phout.log. При наличии собственной утилиты анализа логов нагрузки или необходимости “сырых” данных можно парсить данные из вышеупомянутого файла. Получить индентификатор для визуализации можно из файла jobno_file.txt, после чего формировать URL для пользователей. При необходимости можно удалять обработанные директории с нагрузками.
Рисунок 3. Директория логов
Бэкенд разрабатывается на языке программирования Golang и фреймворка gin. Основной целью бэкенда является автоматизация работы с директориями утилиты, конечный пользователь системы сможет указать адрес и порт нагружаемого сервиса, выбрать тип нагрузки и её параметры, бэкенд сам создаст файл конфигурации и вызовет утилиту. Также, для сохранения истории запросов имеет смысл создать базу данных и записывать в нее результаты каждой нагрузки. В данной статье проектирование базы данных не рассматривается, но её реализация является полезным и можно сказать почти обязательным этапом.
В качестве протокола взаимодействия клиента и сервера был выбран HTTP в силу своей простоты реализации и скорости ответа, хоть в рамках разрабатываемой системы в этом нет необходимости. Также стоит упомянуть, что реализации с помощью протокола удаленного вызова процедур gRPC или WebSockets имеет место при реализации более сложной логики и необходимости в потоковом канале передачи данных.
Рисунок 4. Пример Dockerfile из образа yandex-tank
Поскольку утилита может быть задействована только в одной нагрузке, то необходимо предусмотреть конкурентный доступ к ней с помощью элементов синхронизации. В текущей реализации используется mutex при вызове утилиты. Поскольку утилита может работать продолжительное время, то при реализации с помощью http имеет смысл отдавать результат пользователю сразу, а после окончания работы yandex tank добавлять данные в базу данных. На рисунке 5 представлен пример кода с использованием mutex для доступа к утилите нагрузочного тестирования.
Рисунок 5. Пример использования примитива синхронизации для доступа к утилите
Список литературы:
- Yandex Tank documenation – Modules. URL: https://yandextank.readthedocs.io/en/latest/core_and_modules.html (дата обращения: 12.12.2023)
- Pandora documentation. URL: https://yandex.github.io/pandora/ (дата обращения: 13.12.2023)
- Phantom source code and documentation. URL: https://github.com/mamchits/phantom (дата обращения: 13.12.2023)
- Overload - performance analytics service. URL: https://overload.yandex.net/ (дата обращения: 13.12.2023)
Оставить комментарий