当前位置:网站首页>Rpc interface stress test
Rpc interface stress test
2022-08-10 05:03:00 【Yehenara Hermione】
前言
现今有比较多的rpc框架应用于实际的生产中,像比较流行的Dubbo、Motan、 Thrift、Grpc等.今天作者将以最近项目中用到的grpc为例,结合jmeter来介绍下rpc压测实施步骤.学习本文前需对rpc框架、jmeter有个大致的了解,知道rpc如何用工具生成各种语言的代码.Grpc本身是支持很多种语言的,而jmeter本身只支持java语言,因此我们的脚本也需要选用java.
步骤一:rpc脚本准备
先来看看我本地的项目目录,对结果有个大致的了解,我的工程里包含多个微服务(gnid、hdr等)的代码,每个微服务我建了一个包.这里只以gnid为例来说明:

1.IDE新建maven项目,修改pom.xml,加入grpc、jmeter的依赖包,以及grpc的代码生成插件

在src/main/java下新建目录(如命名proto),将项目的.proto文件copy进去,如图1中的gnid.proto
执行”maven install”,会生成相应的通信及服务代码

4.将图3中生成的代码copy到图1中的建的gnid包中去
- 编写rpc的client端的代码,如下图.在构造方法中初始化与server端的连接(这里的写法都是固定的).需要说明的是,接口多个参数赋值,可按照下图中2的方法进行(对check和sign两个参数赋值)

步骤二:java sample 脚本准备
- 编写jmeter的java sample代码.
关于jmeter的java sample脚本这里需要说明下:
创建一个类并实现JavaSamplerClient接口或继承bstractJavaSamplerClient,并重写如下几个方法:
public Arguments getDefaultParameters()://设置可用参数的默认值;
public void setupTest(JavaSamplerContext arg0)://每个线程测试前执行一次,做一些初始化工作;
public SampleResult runTest(JavaSamplerContext arg0)://开始测试,从arg0参数可以获得参数值;
public void teardownTest(JavaSamplerContext arg0)://测试结束时调用;


至此,脚本就准备好了.关于脚本还有如下几个点需要注意的:
a. rpc建立的是长连接,初始化服务端连接的代码应放在“setupTest”方法中,这样单个用户在执行期间都是复用该连接(实际生产中也是这么用的,建立连接的过程还是挺耗时的).同样, shutdown请求,放在teardownTest方法中即可

b. 通常一个rpc服务会包含多个接口,为了避免每个接口都写一个java sample请求,这里有个小技巧,可以在参数中增加一个字段,用于区分不同的接口

步骤三:将脚本打成可执行包,放到jmeter的\lib\ext\目录下
步骤四:启动jmeter,新建“线程组”,在线程组下新建java请求


选择测试类

填写在代码中设定的参数:

剩下的增加相应的断言、监听器、参数化(如需要),就可以像玩http一样开始压测了.
总结
本文重点介绍了两个方面的知识点.其一,rpc压测脚本如何写;其二,jmeter如何执行java sample请求.有问题的小伙伴,欢迎留言区交流~~
边栏推荐
- 万字总结:分布式系统的38个知识点
- 什么是遗留代码:有效地处理遗留代码的8个小贴士
- LeetCode·124.二叉树中的最大路径和·递归
- 元宇宙 | 你能通过图灵测试吗?
- FPGA工程师面试试题集锦31~40
- 线性模型中的高级特征选择技术——基于R
- 【心理学·人物】第二期(学术X综艺)
- 2022 T Elevator Repair Exam Questions and Mock Exams
- 兴盛优选监控场景的时序数据库选型与落地实践
- [Web3 Series Development Tutorial - Create Your First NFT (7)] Create an NFT DApp and assign attributes to your NFT, such as pictures
猜你喜欢

#【软件STM32cubeIDE下F103配置uart3+DMA收发+简单数据解析-基础样例】

LeetCode·124.二叉树中的最大路径和·递归

tensorflow分词深度学习——影评预测

leetcode每天5题-Day11

成为黑客不得不学的语言,看完觉得你们还可吗?

An article to master the entire JVM, JVM ultra-detailed analysis!!!

深度学习之-01

Flutter开发:报错The following assertion was thrown resolving an image codec:Unable to…的解决方法
Kubernetes资源编排系列之一: Pod YAML篇

线程(下):读写者模型\环形队列\线程池
随机推荐
@Autowired注解 --required a single bean, but 2 were found出现的原因以及解决方法
Guys, the test in the idea uses FlinkCDC SQL to read Mysql data and write it into Kafka. The code creates
小影科技IPO被终止:年营收3.85亿 五岳与达晨是股东
最强大脑(1)
ctf-pikachu-file_inclusion
22牛客多校3 A.Ancestor(LCA + 枚举)
SQL Server查询优化
An article to master the entire JVM, JVM ultra-detailed analysis!!!
oracle cdc时,设置并行度2插槽数1,最终任务只有一个tm,是不是因为oracle不支持并发
关于rust的mongodb驱动count方法无法与near条件一同使用的问题
深度学习——循环神经网络RNN 未完待续
From entry to mastery of PHPCMS imitation station, Xiaobai is enough to watch this set of courses
2022年R2移动式压力容器充装考试题库模拟考试平台操作
重要转型升级
Ueditor编辑器任意文件上传漏洞
SQL数据库字段追加到主表
栈与队列 | 用栈实现队列 | 用队列实现栈 | 基础理论与代码原理
Stacks and Queues | Implementing Queues with Stacks | Implementing Stacks with Queues | Basic Theory and Code Principles
Promise原理及实现
【LeetCode】41、 缺失的第一个正数