Оригинальный адрес:Стресс-тест производительности службы 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
-
Клонируйте проект:
git clone https://github.com/thubbo/jmeter-plugins-for-apache-dubbo.git
-
Упакуйте проект и соберите подключаемый модуль JMeter:
mvn clean install
Или вы можете просто пропустить два вышеуказанных шага и скачатьjmeter-plugins-dubbo-2.7.3-jar-with-dependencies.jar
-
добавить плагин в
${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.
- подобноProtocolвыбрать как
-
При необходимости настройте конфигурацию вызова службы, например группу группировки, версию версии, время ожидания вызова (по умолчанию 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.