1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/icesky1stm-wrktcp

Клонировать/Скачать
README.md 12 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 19:38 ade6178

wrktcp — безлуа-зависимый инструмент для нагрузочного тестирования TCP-протокола wrk

wrktcp — это облегчённый инструмент для нагрузочного тестирования, основанный на wrk и поддерживающий TCP-протокол. Он чувствителен к результатам ответа и может генерировать большое количество одновременных запросов с использованием меньшего количества потоков.

Инструмент имеет следующие особенности:

  • Высокая параллельность и низкие потери. Модель мультиплексирования ввода-вывода на основе wrk и redis позволяет использовать меньше потоков для генерации большого количества одновременных запросов.
  • Простота установки и развёртывания. Инструмент представляет собой один исполняемый файл, не требующий сложной установки или развёртывания.
  • Чувствительность к результатам ответа. В отличие от других инструментов, таких как wrk и ab, которые нечувствительны к возвращаемым значениям, wrktcp обеспечивает точную проверку правильности возвращаемых данных.
  • Совместимость с TCP-протоколом. На основе HTTP-протокола, используемого в wrk, добавлена поддержка TCP-протоколов.
  • Богатые параметры конфигурации. Не требуется изучать Lua-скрипты, можно использовать sample.ini для достижения функциональности, аналогичной крупным инструментам для нагрузочного тестирования.
  • Детализация результатов тестирования. Можно отслеживать общую тенденцию процесса тестирования и визуализировать результаты тестирования в HTML.

Проект был разработан в результате многолетнего опыта разработки финансовых программных продуктов. В процессе разработки использовались такие инструменты, как loadrunner, wrk и Jmeter. Однако были выявлены следующие проблемы:

  1. Loadrunner слишком тяжёлый и сложный в установке и настройке, а также требует высокой нагрузки на тестовую среду.
  2. Jmeter не обеспечивает достаточной нагрузки из-за использования Java, и часто сам Jmeter потребляет все ресурсы системы.
  3. Wrk обеспечивает высокую параллельность, но не чувствителен к правильности результатов ответа, и не поддерживает TCP-протокол, который широко используется в отрасли.

Для решения этих проблем был разработан wrktcp на основе высокопараллельной и низкопотерной архитектуры wrk. Также была добавлена поддержка TCP-протокола и проверка правильности результатов ответа. Кроме того, были учтены потребности пользователей loadrunner и опыт настройки и использования скриптов.

Основные функции инструмента включают:

  • Расширение общей структуры на основе wrk с добавлением новых параметров, таких как --test для проверки правильности конфигурации ini-файла и вывода журнала тестов, --html для вывода результатов в формате HTML и --trace для печати информации о времени в командной строке.
  • Поддержка TCP-нагрузочного тестирования с возможностью настройки заголовков сообщений, форматов тела сообщения и поддержки различных форматов, таких как фиксированный, XML, tag, fixed и JSON.
  • Возможность определения информации о сообщениях, включая данные запроса, данные ответа и критерии успешного ответа.
  • Параметризация сообщений запроса с четырьмя типами параметров: COUNTER (итератор), DATETIME (формат времени), CONNECTID (уникальный идентификатор соединения) и FILE (чтение содержимого из файла).
  • Динамическое обновление TPS и задержки во время тестирования.
  • Запись информации о тестировании и генерация HTML-страниц для демонстрации результатов.

Компиляция и установка инструмента выполняются следующим образом:

  • Для macOS: выполнить команду make в каталоге wrktcp.
  • Для Linux: выполнить команду make в каталоге wrktcp.
  • Для Windows: необходимо загрузить компилятор MINGW и затем выполнить компиляцию.

Быстрое использование инструмента включает следующие шаги:

  1. Изменение конфигурации sample_tiny.ini.
[common]
host = 127.0.0.1
port = 8000

[request]
req_body = this is a test
  1. Тестирование конфигурации с помощью команды:
wrktcp --test sample_tiny.ini
  1. Выполнение нагрузочной команды:
wrktcp -t2 -c20 -d10s --latency sample_tiny.ini

Команда представляет следующие параметры:

  • -t2: использование двух потоков.
  • -c20: параллельное выполнение 20 соединений.
  • -d10s: тестирование в течение 10 секунд. --latency: вывод информации о распределении времени отклика.
  1. Просмотр результатов:
/Users/suitm/code/c/wrktcp>wrktcp -t2 -c20 -d10s --latency sample_tiny.ini
Running 10s loadtest @ 127.0.0.1:8000 using sample_tiny.ini
  2 threads and 20 connections
  Time:10s TPS:2347.30/0.00 Latency:5.90ms BPS:48.14KB Error:0
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    64.19ms  185.36ms   1.11s    91.91%
    Req/Sec     1.42k   417.52     1.92k    73.46%
  Latency Distribution
     50%    6.03ms
     75%    8.17ms
     90%  168.91ms
     99%  983.51ms
  23503 requests in 10.09s, 482.00KB read
Requests/sec:   2328.22    (Success:2328.22/Failure:0.00)
Transfer/sec:     47.75KB

В результатах представлены следующие данные:

  • Running 10s loadtest: информация о выполнении нагрузочного теста в течение 10 секунд.
  • 2 threads and 20 connections: информация об использовании двух потоков и 20 подключений.
  • Thread Stats: статистика по потокам, включая среднюю задержку, стандартное отклонение, максимальную задержку и процент отклонения от среднего значения.
  • Latency Distribution: распределение задержек по процентилям.
  • Requests/sec и Transfer/sec: общая статистика запросов и передачи данных. Текст запроса:

报文头配置,默认只有长度 req_head = XMLHEAD$(length)20201231

必须配置,报文体长度

req_body =


$(DATE)
$(BRANCH)
$(TRACENO)
$(TERMNO)
313233000017
张三


HELLO,this is a test

[response]

报文头长度,默认是8

rsp_headlen = 23

报文头中的报文长度位置,默认是1

rsp_len_beg = 8

报文头中的报文长度的长度,默认是8

rsp_len_len = 8

报文长度是全部还是只计算报文体,默认是body可选配置为total

rsp_len_type = body

响应码类型,默认是fixed

rsp_code_type = xml

响应码位置,默认是body

rsp_code_location = body

响应码tag,默认是1 6

rsp_code_location_tag =

成功响应码,默认是000000

rsp_code_success = 000000

[parameters] TRACENO = COUNTER, 1, 100000, 1, %08ld BRANCH = FILE, branch.txt TERMNO = CONNECTID, %08ld DATE = DATETIME, %H:%M:%S Перевод текста на русский язык:

Конфигурация заголовка сообщения, по умолчанию только длина req_head = XMLHEAD$(длина)20201231

Обязательно настроить, длина тела сообщения

req_body = <корень> <голова> <дата>$(ДАТА)</дата> <ветка>$(ВЕТКА)</ветка> <трачено>$(ТРАЧЕНО)</трачено> <срок>$(СРОКНО)</срок> <банкно>313233000017</банкно> <имя>Чжан Сань</имя> </голова> <тело> <сообщение>ПРИВЕТ, это тест</сообщение> </тело> </корень>

[ответ]

Длина заголовка сообщения, по умолчанию 8

rsp_headlen = 23

Позиция длины сообщения в заголовке, по умолчанию 1

rsp_len_beg = 8

Длина длины сообщения в заголовке, по умолчанию 8

rsp_len_len = 8

Является ли длина сообщения всей или только телом сообщения, по умолчанию body, можно настроить как total

rsp_len_type = тело

Тип кода ответа, по умолчанию фиксированный

rsp_code_type = xml

Местоположение кода ответа, по умолчанию тело

rsp_code_location = тело

Тег кода ответа, по умолчанию 1 6

rsp_code_location_tag = <код возврата>

Успешный код ответа, по умолчанию 000000

rsp_code_success = 000000

[параметры] ТРАЧЕНО = СЧЁТЧИК, 1, 100 000, 1, %08лд ВЕТКА = ФАЙЛ, branch.txt СРОКНО = СОЕДИНИТЬ, %08лд ДАТА = ВРЕМЯ, %Ч:%М:%С

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/icesky1stm-wrktcp.git
git@api.gitlife.ru:oschina-mirror/icesky1stm-wrktcp.git
oschina-mirror
icesky1stm-wrktcp
icesky1stm-wrktcp
master