Стресс-тест производительности службы Dubbo (с JMeter)

Java
Стресс-тест производительности службы Dubbo (с JMeter)

Оригинальный адрес:Стресс-тест производительности службы Dubbo (с JMeter)

Пожалуйста, укажите источник!

предисловие

В последнее время я занимаюсь мониторингом интеграции службы Dubbo и Prometheus.Чтобы проверить влияние компонентов мониторинга на производительность вызовов Dubbo RPC, необходимо выполнить тесты производительности до и после их добавления. Хотя ранее для группы была построена единая тестовая платформа сервиса Dubbo, она не использовалась для тестирования производительности.

Когда дело доходит до тестирования производительности, у вас может быть много вариантов: wrk, JMeter и т. д. Но я считаю, что все обычно привыкли тестировать HTTP-интерфейс.Для этого приватный протокол фреймворка Dubbodubbo://, эти инструменты не обеспечивают встроенную поддержку. Первая идея — написать клиента через обобщающий вызов Dubbo, а потом считать результаты тестов, но это не элегантно, и можно повторить колесо и потратить время. После некоторого google я получил ответ, который я хотел.

Сегодня я хочу представить плагин JMeter от сообщества Dubbo.jmeter-plugins-for-apache-dubbo, Используя этот подключаемый модуль, вы можете позволить JMeter протестировать службу Dubbo.

В этой статье предполагается, что читатель выполнил простой тест производительности с помощью jmeter и установилjmeter

текст

Шаг 1: Установите плагин Dubbo

  1. Клонируйте проект:git clone https://github.com/thubbo/jmeter-plugins-for-apache-dubbo.git

  2. Упакуйте проект и соберите подключаемый модуль JMeter:mvn clean install

    Или вы можете просто пропустить два вышеуказанных шага и скачатьjmeter-plugins-dubbo-2.7.3-jar-with-dependencies.jar

  3. добавить плагин в${JMETER_HOME}\lib\ext(Перезапустите jmeter после установки)

Шаг 2: Напишите сценарий JMeter

1. Создайте сэмпл Даббо

существует【План тестирования】область правой кнопкой мыши【Группа тем】и выберите【Добавить к】 > 【Семплер】 > Dubbo Sample

существуетDubbo SampleВ диалоговом окне настройте адрес реестра, имя интерфейса службы (имя класса интерфейса Java), имя метода, тип и значение параметра и другую информацию.

Шаги настройки следующие:

  • Настройте реестр, обычно используя ZooKeeper. (После завершения настройки нажмитеGet Provider Listкнопку, чтобы получить список зарегистрированных сервисов)

    • подобноProtocolвыбрать какzookeeper,ноAddressЗаполните адрес ZooKeeper.
    • Если производственная среда обычно содержит несколько узлов ZooKeeper, вы можете указать несколько адресов ZooKeeper и разделить их запятыми (,).
    • При тестировании на одном сервереProtocolвыберитеnone,AddressЗаполните сервисный адрес Dubbo.
  • При необходимости настройте конфигурацию вызова службы, например группу группировки, версию версии, время ожидания вызова (по умолчанию 1 секунда) и т. д.

  • Настройте полное имя класса интерфейса Java и имя метода службы Dubbo.

  • Настройте тип параметра и значение параметра для каждого параметра.

    • Тип параметра: базовые типы (такие как boolean, int и т. д.) напрямую пишут имя типа, другие типы пишутполное имя класса Java(обратите внимание на полное имя класса).
    • Значения параметров: основные типы и строки напрямую записывают значения параметров,Сложные типы заполняются представлением JSON.

Чтобы облегчить локальную отладку тестовых сценариев, вы можете добавить прослушиватель структуры, щелкнув правой кнопкой мыши【Группа тем】,выберите【Добавить к】 > 【Слушатель】> 【Просмотреть дерево результатов】,Добавить кПосмотреть дерево результатовслушатель.

Шаг 3: Выполнение теста

В **【Группе тем】щелкните правой кнопкой мыши, щелкните【Проверить】**, выполнить один запрос для проверки возможности подключения инструментов и сервисов.

В **【Просмотреть дерево результатов】можно посмотреть во вкладке[Данные ответа] **Возврат соответствует ожидаемому, указывая на то, что вызов Dubbo может быть выполнен нормально.

Шаг 4: Добавьте утверждения

Иногда вы увидите, что результат выполнения показывает успех, но на самом деле вызов службы Dubbo завершается сбоем или бизнес-обработка завершается с ошибкой, а возвращаемый результат содержит код ошибки. Например, две картинки ниже.

Ошибка вызова RPC.

Не удалось обработать бизнес.

Решение:

Для таких проблем можно добавить утверждения, чтобы проверить, была ли служба успешной. Результат вызова обобщения возвращается в формате JSON. Вы можете добавить утверждение для проверки возвращенных данных JSON, чтобы более точно проверить, успешно ли выполняется служба.

Конкретные шаги в jmeter【План тестирования】область правой кнопкой мышиDubbo Sampleи выберите【Добавить к】 > 【утверждение】 > 【Утверждение JSR233】.

Здесь я даю свой отличный код тестового сценария:

String respStr = null;
Map<String, Object> resp = null;
try {
respStr = SampleResult.getResponseDataAsString();
resp = (Map<String, Object>) com.alibaba.fastjson.JSON.parse(respStr);
} catch (Throwable ex) {
// pass
log.error("error", ex);
}
if (resp == null) {
AssertionResult.setFailure(true);
AssertionResult.setFailureMessage("RESPONSE IS NOT JSON: " + respStr);
} else {
// 简单检查: dubbo 泛化调用失败时, 返回 JSON 包含 code 和 detailMessage 字段.
if (resp.get("code") != null && resp.get("detailMessage")) {
AssertionResult.setFailure(true);
AssertionResult.setFailureMessage("rpc exception, code=" + resp.get("code") + " detailMessage=" + resp.get("detailMessage"));
} else if(!"SUCCESS".equals((String)resp.get("code"))) {
// TODO 根据你自己的实际业务,校验请求是否成功.
AssertionResult.setFailure(true);
AssertionResult.setFailureMessage("请求失败, code=" + resp.get("code"));
} else {
AssertionResult.setFailure(false);
}
}

Посмотрим результат проверки после добавления утверждения.

Видно, что утверждение играет роль проверки бизнеса и вызывает сообщение об ошибке.

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

Другие часто задаваемые вопросы

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

Ссылаться на