- PVSM.RU - https://www.pvsm.ru -

Открытые бенчмарки для нагрузочного тестирования серверов и веб-приложений

Это — подборка утилит, составленная на основе рекомендаций резидентов Hacker News и GitHub. В список вошли: Locust, Vegeta, Slow_cooker, k6 и Siege. Ими пользуются инженеры из DICE, EA и Buoyant, а также разработчики Kubernetes и Load Impact. Расскажем об этих инструментах.

Открытые бенчмарки для нагрузочного тестирования серверов и веб-приложений - 1 [1]
Фото — Victor Freitas [2] — Unsplash

Locust.io [3]

Инструмент для нагрузочного тестирования сайтов. Все сценарии пишутся на Python. Специальный веб-интерфейс, построенный на Flask [4], позволяет мониторить результаты в реальном времени. Авторы Locust — швейцарские инженеры, среди которых числятся сотрудники компаний DICE и EA, занимающихся разработкой и изданием компьютерных игр.

В основу инструмента заложена интересная концепция: Locust («саранча») эмулирует поведение целого роя насекомых (виртуальных пользователей), «атакующих» сайт во время теста. Запросы формируют с помощью сетевой библиотеки для организации параллельных вычислений — gevent [5]. Вот пример простого теста, который приведен на официальном сайте проекта:

from locust import HttpLocust, TaskSet, task

class WebsiteTasks(TaskSet):
    def on_start(self):
        self.client.post("/login", {
            "username": "test_user",
            "password": ""
        })

    @task
    def index(self):
        self.client.get("/")

    @task
    def about(self):
        self.client.get("/about/")

class WebsiteUser(HttpLocust):
    task_set = WebsiteTasks
    min_wait = 5000
    max_wait = 15000

Locust задействует библиотеку requests. Эта надстройка над стандартными средствами Python упрощает работу с HTTP и SSL и делает код более наглядным. К слову, документацию [6] requests можно использовать в качестве шпаргалки для отладки тестов на Locust.

Этот инструмент для нагрузочного тестирования существует уже более семи лет. За это время вокруг него сформировалось обширное комьюнити — на GitHub более 10 тыс. звезд [7]. Locust использовали при оценке работоспособности сети Battlelog для серии игр Battlefield. Об инструменте положительно отозвался [8] Армин Ронахер (Armin Ronacher), автор фреймворка Flask.

Среди недостатков Locust выделяют [9] довольно низкую производительность и периодические ошибки при оценке времени ответа сайтов. Также инструмент не умеет строить графики, но проблема решается выгрузкой результатов в виде CSV [10]-файлов и отрисовкой графиков в редакторе таблиц.

Если вы хотите поближе познакомиться с Locust, то стоит обратить внимание на документацию [11] инструмента. Также можно рекомендовать выступление [12] Алексея Романова из Wargaming на Python Meetup. Он рассказывает, как писать сценарии, эмулирующие поведение пользователей.

Vegeta [13]

Утилита командной строки для тестирования HTTP-сервисов, написанная на Go. Её можно подключить как библиотеку для создания своих инструментов нагрузочного тестирования. Разработчиком Vegeta выступил один из авторов отрытой платформы Sourcegraph [14] — это движок для рецензирования и навигации по исходному коду, который используют в Lyft, Uber и Yelp.

Vegeta оценивает возможности сетевых ресурсов, «бомбардируя» их запросами с установленной частотой. Например, для проверки localhost достаточно прописать следующую команду:

echo "GET http://localhost/" | vegeta attack -duration=5s | tee results.bin | vegeta report

По умолчанию Vegeta работает со стандартным потоком чтения команд (stdin), поэтому ресурс для тестирования передается через echo. Параметр duration указывает продолжительность теста. Репорт будет сгенерирован в файл results.bin. Отчеты Vegeta генерирует в текстовом формате, но при этом умеет рисовать графики [15]. Сгенерировать их можно следующей командой:

vegeta plot -title=Results results.bin > results-plot.html

Вокруг Vegeta сформировалось крупное сообщество — 12 тыс. звезд на GitHub [16]. Инструмент даже использовали [17] разработчики Kubernetes для оценки производительности своей платформы — тогда Vegeta генерировала около 10 млн запросов в секунду к кластеру из тысячи узлов.

Документация с описанием всех функций и флагов для тестов Vegeta есть в репозитории на GitHub [13]. Там же можно найти [18] предварительно скомпилированные исполняемые файлы.

Slow_cooker [19]

Это — инструмент для нагрузочного тестирования серверов, написанный на Go. Его разработали инженеры из компании Buoyant, которая создает сервисную сеть для Kubernetes — Linkerd. Она является частью Cloud Native Computing Foundation и считается [20] конкурентом Google Istio [21].

Открытые бенчмарки для нагрузочного тестирования серверов и веб-приложений - 2
Фото — Joshua Aragon [22] — Unsplash

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

Специалисты из Buoyant используют свою разработку для тестирования Linkerd и других сервисов, например nginx. Инструмент довольно молодой — ему около трех — поэтому пока он не обзавелся большим комьюнити. Но в будущем ситуация может измениться, например, его репозиторий уже форкнули [23] в Skysсanner, международном сервисе для поиска авиабилетов.

Исходный код вы можете найти на GitHub [24].

k6 [25]

Инструмент для нагрузочного и регрессионного тестирования микросервисов, контейнеров и сайтов, размещенных в облаке. Он написан на Go и JavaScript разработчиками из Load Impact — это приложение для тестирования «стойкости» сайтов.

Работа с k6 строится по модели everything as code, когда логика тестов и все настройки пишутся на JavaScript. В скриптах отдельные шаги можно объединять в группы (group), что может быть удобно для тех, кто привык следовать принципам BDD. Вот пример такой группы:

import { group } from "k6";

export default function() {
  group("user flow: returning user", function() {
    group("visit homepage", function() {
      // load homepage resources
    });
    group("login", function() {
      // perform login
    });
  });
};

Также инструмент дает возможность записывать скрипты [26] и строить графики [27] — последняя функция реализована на InfluxDB и Grafana. И у него есть интеграции с CI-системами вроде Jenkins, Circle CI, Team City и GitLab.

Пользователи говорят, что k6 не требователен [28] к ресурсам, и у него удобный API. Но есть и несколько недостатков, в частности, k6 не поддерживает [29] websocket и не умеет [30] проводить тесты на распределенных системах. Хотя разработчики k6 в тематическом треде на Hacker News рассказали [31], что эти функции появятся в будущем.

Если вы хотите познакомиться с возможностями k6 самостоятельно, резиденты HN рекомендуют начать с технической документации [32] — она подробная и с примерами. Если будут возникать какие-либо вопросы, можно обратиться на официальный форум [33].

Siege [34]

Siege позволяет провести нагрузочное тестирование веб-серверов. Утилиту создал инженер Джефф Фалмер (Jeff Fulmer), чтобы разработчики могли проверить ресурсоемкость своего кода в условиях, приближенных к боевым. Siege эмулирует непрерывный поток обращений к сайту от множества пользователей, как бы удерживая сервер «под осадой» — отсюда и название инструмента.

После теста утилита показывает: время проверки, число транзакций за секунду, пропускную способность, количество удачных и неудачных запросов, а также их число с ответным кодом 200. Вот пример [35] отчета, генерируемого Siege.

Siege получил довольно широкое распространение в ИТ-сообществе. Например, нагрузочному тестированию с его помощью посвящен целый раздел в книге «NGINX High Performance [36]». Также его используют [37] некоторые облачные провайдеры.

Из недостатков Siege можно выделить нестандартный синтаксис и неочевидные методы подсчета параметров тестирования — например, редиректы считаются [38] успешными транзакциями, поэтому их количество может превышать общее число запросов. Если вы хотите опробовать Siege на практике, изучите онлайн-руководство [39] — там разобраны некоторые «странности» системы.

Дополнительное чтение в блоге 1cloud.ru:

Открытые бенчмарки для нагрузочного тестирования серверов и веб-приложений - 3 Что нового в Linux kernel 5.3 — графические драйверы, виртуализация и другие обновления [40]
Открытые бенчмарки для нагрузочного тестирования серверов и веб-приложений - 4 Почему разработчики мейнстрим-браузера снова отказались от отображения поддомена [41]
Открытые бенчмарки для нагрузочного тестирования серверов и веб-приложений - 5 Почему Apple изменила требования к разработчикам приложений [42]

Автор: 1cloud

Источник [43]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/linux/335459

Ссылки в тексте:

[1] Image: https://habr.com/ru/company/1cloud/blog/474474/

[2] Victor Freitas: https://unsplash.com/photos/vjkM-0m34KU

[3] Locust.io: http://Locust.io

[4] Flask: https://palletsprojects.com/p/flask/

[5] gevent: http://www.gevent.org/

[6] документацию: https://2.python-requests.org/en/latest/

[7] более 10 тыс. звезд: https://github.com/locustio/locust/stargazers

[8] отозвался: https://twitter.com/mitsuhiko/status/457145862947635200

[9] выделяют: https://news.ycombinator.com/item?id=15733943

[10] CSV: https://ru.wikipedia.org/wiki/CSV

[11] документацию: https://docs.locust.io/en/stable/

[12] выступление: https://youtu.be/65Xa__DMhAw

[13] Vegeta: https://github.com/tsenart/vegeta

[14] Sourcegraph: https://about.sourcegraph.com/

[15] рисовать графики: https://sun9-3.userapi.com/c846120/v846120228/1a06ff/76A-H0NCNrY.jpg

[16] 12 тыс. звезд на GitHub: https://github.com/tsenart/vegeta/stargazers

[17] использовали: https://news.ycombinator.com/item?id=11445695

[18] можно найти: https://github.com/tsenart/vegeta/releases

[19] Slow_cooker: https://github.com/BuoyantIO/slow_cooker

[20] считается: https://siliconangle.com/2019/03/14/service-mesh-company-bouyant-lands-10m-take-googles-istio/

[21] Google Istio: https://www.opennet.ru/opennews/art.shtml?num=46598

[22] Joshua Aragon: https://unsplash.com/photos/EaB4Ml7C7fE

[23] форкнули: https://github.com/BuoyantIO/slow_cooker/network/members

[24] на GitHub: https://github.com/buoyantio/slow_cooker

[25] k6: https://k6.io/

[26] записывать скрипты: https://docs.k6.io/docs/session-recording-har-support

[27] строить графики: https://docs.k6.io/docs/influxdb-grafana

[28] не требователен: https://blog.maddevs.io/k6-4e8768723c41

[29] не поддерживает: https://news.ycombinator.com/item?id=14281488

[30] не умеет: https://github.com/loadimpact/k6/issues/140

[31] рассказали: https://news.ycombinator.com/item?id=14279389

[32] технической документации: https://docs.k6.io/docs

[33] на официальный форум: https://community.k6.io/

[34] Siege: https://github.com/JoeDog/siege

[35] пример: https://en.wikipedia.org/wiki/Siege_(software)

[36] NGINX High Performance: https://www.amazon.com/Nginx-High-Performance-Rahul-Sharma/dp/1785281836

[37] используют: https://www.linode.com/docs/tools-reference/tools/load-testing-with-siege/

[38] считаются: https://blog.loadimpact.com/open-source-load-testing-tool-review

[39] онлайн-руководство: https://www.joedog.org/siege-manual/

[40] Что нового в Linux kernel 5.3 — графические драйверы, виртуализация и другие обновления: https://1cloud.ru/blog/chto-novogo-v-linux-kernel-5-3?utm_source=habrahabr&utm_medium=cpm&utm_campaign=benchnew&utm_content=blog

[41] Почему разработчики мейнстрим-браузера снова отказались от отображения поддомена: https://1cloud.ru/blog/chrome-otkazalis-ot-otobragenia-www?utm_source=habrahabr&utm_medium=cpm&utm_campaign=benchnew&utm_content=blog

[42] Почему Apple изменила требования к разработчикам приложений: https://1cloud.ru/blog/apple-izmenila-trebovania-k-razrabotchikam-prilogenii?utm_source=habrahabr&utm_medium=cpm&utm_campaign=benchnew&utm_content=blog

[43] Источник: https://habr.com/ru/post/474474/?utm_campaign=474474&utm_source=habrahabr&utm_medium=rss