点击上方 好好学java ,选择 星标 公众号

重磅资讯、干货,第一时间送达
今日推荐:为什么魂斗罗只有 128 KB却可以实现那么长的剧情?个人原创+1博客:点击前往,查看更多
原文地址:https://ricstudio.top/archives/dubbo-benchmark-jmeter
转载请注明出处!

前言

最近在做Dubbo服务与Prometheus的监控集成,为了测试监控组件对Dubbo RPC 调用的性能影响,就需要对添加前后做性能测试。虽然之前给组内搭建了统一的Dubbo 服务测试平台,但是无法用于性能测试。

说起性能测试,大家可能会有很多选择,wrk、JMeter等等。但是相信大家一般都是用于测试HTTP接口,对于这种Dubbo框架的这种私有协议dubbo://,这些工具没有提供原生的支持。第一个想法就是通过Dubbo 的泛化调用来自己写一个客户端,然后统计测试结果,但是这样一是不优雅,二是有可能重复造轮子,浪费时间。经过一番google之后,果然得到了想要的答案。

今天要介绍的,就是一款来自于Dubbo 社区的JMeter 插件jmeter-plugins-for-apache-dubbo,使用这款插件,就可以让JMeter 对Dubbo 服务的测试。

本文假定读者使用JMeter 进行过简单的性能测试,并且安装了JMeter

正文

Step 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)

image.png

Step 2:编写JMeter 脚本

1、创建Dubbo Sample

【测试计划】 区域右键单击 【线程组】,并选择 【添加】 > 【取样器】 > Dubbo Sample

image.png

Dubbo Sample 对话框中配置注册中心地址、服务接口名(Java interface 类名)、方法名、参数类型和参数值等信息。

配置步骤如下:

  • 配置注册中心,通常使用 ZooKeeper。(配置完成之后,点击上面Get Provider List 按钮获取注册的服务列表)

    • Protocol 选择为 zookeeper,则 Address 填写 ZooKeeper 地址。

    • 若生产环境通常包含多个 ZooKeeper 节点,可填写多个 ZooKeeper 地址并用英文逗号(,)隔开。

    • 若针对单台服务器进行测试,则将 Protocol 选择 noneAddress 填写 Dubbo 服务地址。

  • 按需调整服务调用配置,如分组 Group、版本 Version、调用超时时间 Timeout(默认为 1 秒)等。

  • 配置 Dubbo 服务的完整 Java 接口类名和方法名。

  • 配置每个参数的参数类型和参数值。

    • 参数类型:基本类型(如 boolean, int 等)直接写类型名,其他类型写完整 Java 类名(注意哦,是完整类名)。

    • 参数值:基本类型和字符串直接写参数值,复杂类型用 JSON 表示填写

image.png

为了方便本地调试测试脚本,可以添加结构监听器,右键单击 【线程组】,选择 【添加】 > 【监听器】> 【察看结果树】,添加 察看结果树 监听器。

Step 3:测试执行

在**【线程组】上右击,点击【验证】**,执行单次请求,来测试工具与服务的联通性。

在**【察看结果树】选项卡中可以看到【响应数据】**返回如预期,说明可以正常执行 Dubbo 调用了。

image.png

Step 4:添加断言

有时候你会看到执行结果显示成功,但是实际上Dubbo 服务调用失败了,或者业务处理失败,返回结果中包含了错误码。比如下面两张图。

RPC 调用失败。

image.png

业务处理失败。

image.png

解决方法:

针对此类问题,可以添加断言来检查服务是否成功。泛化调用的结果以 JSON 形式返回,可以添加断言检查返回的 JSON 数据,以更准确的校验服务执行是否成功。

具体步骤就是,在 jmeter的 【测试计划】 区域右键单击 Dubbo Sample,并选择 【添加】 > 【断言】 > 【JSR233 Assertion】

image.png

这里我给出我的groovy 测试脚本代码:

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) {// passlog.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);}
}

image.png

让我们看看,添加了断言之后,再验证的结果。

image.png

可以看到,断言起到了业务校验的作用,并且提示了报错信息。

至于如何编写脚本的其他部分,就要考虑你要模拟的场景来设置了,属于如何使用JMeter的部分,所以这里就不过多叙述。

更多常见问题

关于该插件的更多常见问题,请参考该插件的github wiki中的FAQ。

参考

  • jmeter-plugins-for-apache-dubbo)

一文教你 Dubbo 服务性能压测(with JMeter)相关推荐

  1. Dubbo之HTTP RPC vs Dubbo RPC性能压测

    公司内部的RPC框架,经过长时间的发展,已经由完全自研演进到底层替换为Dubbo实现,但使用方式(API)还是不变.由于使用了PB序列化协议,以及业务码+操作码定义接口的方式,非常影响开发效率,可理解 ...

  2. 后端服务性能压测实践

    转自:https://mp.weixin.qq.com/s/XW9geHZ9odHdI7srDiKBIg 目录 背景 环境检测 压力机及压力工具检测 Linux openfiles limit 设置 ...

  3. 性能测试 性能测试实战(八)Jmeter性能测试平台开发,性能测试平台架构解析 ,性能测试平台搭建 分布式性能压测平台 Jmeter分布式性能测试管理平台 性能测试平台示例案例 《完结篇》

    文章目录 一.前言 二.Jmeter分布式性能测试平台 介绍 1.Jmter分布式性能测试平台 简介 2.Jmeter分布式性能测试平台 优秀案例1 3.Jmeter分布式性能测试平台 优秀案例2 4 ...

  4. 谷粒商城项目篇8_分布式高级篇_商城首页、性能压测、优化(Nginx动静分离)

    目录 商城首页 整合thymeleaf springmvc的WebMvcAutoConfiguration 首页三级分类渲染 Nginx代理 Nginx代理会丢掉host信息 压力测试 性能检测 性能 ...

  5. 软件性能测试分析与调优实践之路-JMeter对RPC服务的性能压测分析与调优-手稿节选

    一.JMeter 如何通过自定义Sample来压测RPC服务 RPC(Remote Procedure Call)俗称远程过程调用,是常用的一种高效的服务调用方式,也是性能压测时经常遇到的一种服务调用 ...

  6. 记一次Socket.IO长链服务的性能压测

    网易云信IM系统中的Web版使用了Socket.IO实现浏览器环境下的长链服务:区别于常规的长链服务,为该服务的压测提出了一些新的挑战,本文总结了测试过程中的一些收获供参考. Part1 测试工具选项 ...

  7. 性能服务器图片介绍大图,服务端图片图片上传接口性能压测总结

    服务端图片上传接口性能压测总结 一.性能测试时需要关注点 用户操作的相应时间 服务器资源使用情况是否合理 应用服务器和数据库资源使用是否合理 系统能否实现扩展 系统最多支持多少用户访问.系统最大业务处 ...

  8. 压测接口线程数设置_ZAT掌门性能压测巡检系统实战和落地

    项目背景 随着业务拓展,对于接口性能的要求也在上升,各部门也开始针对部分慢接口进行优化,从测试角度针对这些优化需求进行测试时不仅要保证对应接口的功能正常使用同时也要验证接口优化成果.在日常的开发工作中 ...

  9. 性能压测诡异的Requests/second 响应刺尖问题

    最近一段时间都在忙着转java项目最后的冲刺,前期的coding翻代码.debug.fixbug都逐渐收尾,进入上线前的性能压测. 虽然不是大促前的性能压测要求,但是为了安全起见,需要摸个底心里有个数 ...

最新文章

  1. exchange server 2003 错误处理
  2. 并发模型之——基本概念
  3. Windows如何让一个窗口显示最前(窗口锁住最前)?TopMost
  4. 【数据结构总结】第六章 图(非线性结构)
  5. ideajava目录显示类成员_c++ 目录操作
  6. Spark系列—02 Spark程序牛刀小试
  7. Node.js是什么?
  8. httos双向认证配置_APP爬虫双向认证抓包的两种方法
  9. 【体验】Silverlight 2.0 多图
  10. Debian9用户态下安装pipenv
  11. c语言四个零,输入任意四个整数(0到10),运算符只有加减乘除,还有括号.每个数只能且必须用一次。要求判断这些表达的结果中是否有24。如果有,输出计算表达式:如输入4,6,1...
  12. php 获取某文件内容
  13. 预编译stdafx.h,无法找到文件问题,红色波浪线
  14. Seata分布式事务原理
  15. 简单生成随机迷宫的算法___Prim和DFS
  16. 计算机进去bios方式,各种电脑进入BIOS方法汇总|进入bios的方法大全
  17. [精简整理]疏通中国历史脉络——“隋、唐(五代十国)”篇
  18. 路由器配置 校园网账号独立登录 DHCP关闭
  19. 非参数与半参数统计之核函数
  20. 阿里巴巴 淘特技术部 内推

热门文章

  1. C++ Primer 5th笔记(chap 17 标准库特殊设施)bernoulli_distribution 类
  2. (chap6 Http首部) 其他首部字段
  3. C++(五)——运算符重载
  4. 机器学习+算法考试有感 2019 山东大学
  5. 汉字输入练习 TypeChinese.java
  6. 设计模式--中介者(Mediator)模式
  7. ❗HTML引入JavaScript的三种常用方式汇总❗
  8. 详解android gatekeeper/fingerprint中的authToken
  9. Mysql的事务事务的特征事务的隔离级别
  10. CFileDialog 打开多个目录下的多个文件