首页 > 其他分享 >RPC 框架性能测试,注意这 8 点就够了

RPC 框架性能测试,注意这 8 点就够了

时间:2023-07-13 16:34:54浏览次数:44  
标签:框架 性能 Server RPC Client 测试

某天,二狗子写了一个 RPC 框架后,简单测了一下性能,发现超出 grpc 一大截。二狗子一高兴,忍不住找同事吹了一波。结果,同事亲测后对二狗子说框架性能也就这样。二狗子表示不服,跟同事一番唇枪舌剑后才发现,两个人测试方法有点不大一样。先不论测试方法不同在哪里,今天二狗子先来聊聊,对 RPC 框架做性能测试要注意什么。

1.确定要观察指标

一般情况下,必要且重要的指标有:吞吐率(tps)、平均耗时、最大耗时、中位数耗时和 p99 耗时。通常情况下,二狗子不会记录 CPU 和内存的消耗,因为这两者的数值会一直变化,测试时并不好记录。

2. 确定压测对象

衡量一个 RPC 框架的性能需要从两个视角去思考:Client 视角与 Server 视角。只要消息协议、传输协议相同,同一种语言的实现就可以有好多种。在大规模的业务架构中,上游 Client 不见得使用的也是下游的框架,而开发者调用的下游服务也同样如此。

如果 Client 和 Server 部署在同一台机器上,且未绑定核,则测试时两端会互相影响。如果要压测 Server,那么我们应该给 Client 足够多的资源,这样才能把 Server 压到极致。

3.减少外部因素的影响

这个很好理解,如果外部因素影响过大,则无法测试 RPC 性能的优劣。

一般在测试时,会把 Server 和 Client 放在同一台机器上,这样可以减少网络的影响。如果网络影响过大,则主要耗时在网络传输上,无法测试 RPC 性能好坏。这里需要注意上面提到的第二点,部署在同一台机器上的时候需要为进程绑核数。

Server 和 Client 在同一台机器上的情况,Client 请求 Server 是不需要经过网卡转发的,这与实际情况不同,有需要的同学可以分开部署再进行压测一次。但是根据其它框架的压测结果来看,性能表现差距不大。

4.必须要有上下文切换

有一些测试程序非常简单,简单到只是客户端发送了一段“hello world”字符串,服务端直接把字符串原封不动地返回给客户端。这样测试出来的结果是不可信的,因为真实场景不可能这么简单。仔细想想,这样并不是在测试框架的性能,而是在测试你的框架读/写 socket 的速度。

RPC 业务特征是 Handler 逻辑较重,耗时较长,显然是不能串行处理的。因此 RPC 场景,Handler 必须要异步处理,上下文切换、I/O 协作等都是必须考虑的代价。

5.调用链路不应该太简单

一次 RPC 调用往往需要多个微服务协作完成,而下游服务又会有其自身依赖,所以整个调用链路会是一个复杂的网状结构。测试的时候,具体这样做:

1.  我们在 Server 内用 Client 访问下游 Server,这能考察 Server 和 Client 的综合表现

2.  一个 Client 访问多个 Server,这能考察负载均衡是否足够并发,真实场景中很少一个 Client 只访问一个 Server

6.请求必须包含长尾

真实的请求中肯定会有长尾。对于在同一个线程里的请求,如果前面的请求慢了一下,那也只能跟着慢了,所以 1% 的长尾会影响远超 1% 的请求。

模拟长尾请求的方法有很多,最简单的就是在服务器端增加故意引发延迟的代码来模拟长尾请求。比如在服务端随机增加一个延迟等待的时间,在一定概率下增加延迟并使请求变为长尾请求。

7. 包体积不应太大,也不应该太小

如果有需要,可以对大包和小包分开测试。

对于 HTTP 框架来说,数据可以放在 query、path、header、body 等地方,不同位置对解析造成的影响也不一样。

8. 与其它 RPC 相比时,需要保证公平性

需要考虑以下几点:

  1. 序列化方式对齐:对于 RPC 框架来说,计算开销主要都集中在序列化与反序列化中。拿 protobuf 举例,有些框架为了追求性能,使用了 gogo/protobuf,而有些框架为了可维护性选择了官方的 protobuf 库
  2. 对齐连接模型:常规的 RPC 连接模型有短连接、长连接、连接多路复用三种。其中连接多路复用是性能最好的,但这可能并不是框架默认的配置,所以在开始测试前就需要设置好

参考:

标签:框架,性能,Server,RPC,Client,测试
From: https://www.cnblogs.com/upyun/p/17551265.html

相关文章

  • ASP.NET Core 6框架揭秘实例演示[40]:基于角色的授权
    原文:https://www.cnblogs.com/artech/p/inside-asp-net-core-6-40.htmlASP.NET应用并没有对如何定义授权策略做硬性规定,所以我们完全根据用户具有的任意特性(如性别、年龄、学历、所在地区、宗教信仰、政治面貌等)来判断其是否具有获取目标资源或者执行目标操作的权限,但是针对角色......
  • 现代C++(Modern C++)基本用法实践:零、概述&测试项目
    序言习惯上,我们把C++11之前的C++语法特性称之为“传统C++”,而把c++11之后的语法特性称之为现代C++。有一种说法称C++为中级语言,因为它的特性介于低级语言(如各类汇编语言)和高级语言(Python、C#)之间--一般来说,它在运行效率上比高级语言要高,而在开发效率上又比高级语言低一些。随着C......
  • Nginx:client_body_temp_path 指令的上传文件测试
    结论硬盘必须要有上传文件3倍大小的剩余空间。否则会报错“nospaceleftondevice”。需要注意,这3份数据都会写到硬盘。大文件上传,实时观察硬盘剩余空间watch-n0.1"df-hm/",会看到很大的波动。默认临时文件路径文档Syntax: client_body_temp_pathpath[level1[lev......
  • 性能测试我选RunnerGo!
    性能测试是软件质量保障的关键环节之一,性能测试可以评估应用的可靠性、稳定性和响应时间。然而,性能测试通常需要大量的时间和资源,因此需要使用高效的性能测试工具来减少测试工作量,并快速识别应用中的性能瓶颈问题。RunnerGo简化了性能测试用例的配置步骤,带来更好的性能测试解决方......
  • Apipost 一键压测,并发测试不用再去找测试
    背景研发同学在调试完成某些接口后需要验证一下高并发情况下的接口运行情况。这时候必须得跟测试同学协调一下,但这来来回回也有点麻烦,而实际上,这个工作量并不算太大。所以Apipost也是推出了一键压测功能来解决这个痛点场景。这篇文章给大家介绍Apipost的一键压测功能。使用方法......
  • 【Python】数据可视化利器PyCharts在测试工作中的应用
    PyCharts简介PyCharts是一个基于Python的数据可视化库,它支持多种图表类型,如折线图、柱状图、饼图等。PyCharts提供了简洁的API,使得用户能够轻松地创建各种图表,同时支持个性化的配置,以满足不同需求。PyCharts的底层依赖于ECharts,这使得它在功能和性能上都具有很高的优势。......
  • uniapp 微信小程序 camera 组件,测试版和体验版都正常,上线后全量发布扫码就是白屏,
    解决办法:需要更新隐私协议右边菜单最下面“设置”—拖到下方服务内容声明块--去完善用户隐私保护指引 ......
  • [渗透测试]—3.3 漏洞评估和报告编写
    在渗透测试过程中,漏洞评估和报告编写是非常重要的环节。漏洞评估可以帮助你确定哪些漏洞更加关键,需要优先修复。而报告则是向客户或公司领导展示渗透测试结果的关键文档。本节将介绍漏洞评估和报告编写的基本概念、方法和要点。1.漏洞评估漏洞评估是对已发现的安全漏洞进行分析......
  • 给程序员准备的“蜜糍”--SOD框架简介
    注:本文是SOD框架源码仓库的首页介绍,原文地址一、框架介绍1,SOD框架是什么?以前有一个著名的国产化妆品“大宝SOD密”,SOD框架虽然跟它没有什么关系,但是名字的确受到它的启发,因为SOD框架就是给程序员准备的“蜜糍”(一种含有蜂蜜的糍粑),简单灵活且非常容易“上手”。SOD框架是一个......
  • 怎么看网站是否开启CDN加速?测试网站全国访问速度方法详解
    注意域名,动静分离的网站,只对静态文件的域名做了cdn怎么看网站有没开启CDN?要看一个网站是否开启CDN,方法很简单,只要在不同的地区ping网址就可以,比如在山东济南ping www.jb51.net 得到的IP地址是111.161.66.167,但在江苏地区ping www.jb51.net得到的IP确是61.147.92.111,像这样在不同......