Home

Awesome

流行的RPC框架测试

先前的rpcx-benchmark提供了一个很好的各种RPC框架性能测试结果。它采用启动一定数量的线程/纤程,每个线程独立使用一个client进行服务调用,用来获取服务调用的吞吐率和耗时。这种测试模式模拟了现实生活中很多的业务客户端并发访问RPC服务的时候,RPC服务所能提供的能力(吞吐率和延迟,这是一对相爱相杀的性能指标)。

但是,测试最难的是无法实现一个“银弹”,来模拟现实中所有的场景,所以新建了这个测试工程,期望能测试更多的场景:

每个rpc框架包含一个单独的子文件夹,里面包含一个server文件夹和client文件夹。server文件用来启动一个server,client文件夹用来测试并输出测试结果。

你可以参考已存在的框架测试代码添加你相测试的RPC框架,客户端和服务器端必须要包含相同的序列化和反序列化逻辑,以及相同的处理逻辑,不同通过hack的方式绕过序列化反序列化违反公平性。

proto包含测试用的proto文件和生成的Go代码文件,这是公用的。如果需要,你也可以生成自己的Go代码,但是需要基于同样的proto文件。如果你修改成proto3的代码,我认为也是合理的和可以接受的。

注意

RPC 框架

测试的RPC框架包括:

欢迎补充todo的代码,欢迎提交其它rpc框架的测试代码。

测试步骤

启动server

进入每个rpc框架对应的server文件夹下,运行服务端,你可以指定监听地址

./xxx_server -s xxx.xxx.xxx.xxx:xxxx

启动client

./xxx_client -s xxx.xxx.xxx.xxx:xxxx -c 100 -n 1000000

另外你还可以指定-pool,指定客户端使用几个rpc的client调用。-r可以指定测试使用最大的吞吐率,可以用来检验在特定的吞吐率下的延迟情况。

通过设定不同的-c,可以统计在不同的并发情况下框架的吞吐和延迟能力。

比如:

[root@localhost]#  ./rpcx_client -s 127.0.0.1:8973 -c 2000 -n 1000000
2021/07/18 16:39:12 rpcx_client.go:39: INFO : concurrency: 2000
requests per client: 500

2021/07/18 16:39:12 rpcx_client.go:47: INFO : Servers: 127.0.0.1:8973

2021/07/18 16:39:12 rpcx_client.go:58: INFO : message size: 581 bytes

2021/07/18 16:39:17 stats.go:15: INFO : took 4677 ms for 1000000 requests
2021/07/18 16:39:17 stats.go:36: INFO : sent     requests    : 1000000
2021/07/18 16:39:17 stats.go:37: INFO : received requests    : 1000000
2021/07/18 16:39:17 stats.go:38: INFO : received requests_OK : 1000000
2021/07/18 16:39:17 stats.go:42: INFO : throughput  (TPS)    : 213812

2021/07/18 16:39:17 stats.go:45: INFO : mean: 9188986 ns, median: 7920507 ns, max: 71082749 ns, min: 49247 ns, p99.9: 37877032 ns
2021/07/18 16:39:17 stats.go:46: INFO : mean: 9 ms, median: 7 ms, max: 71 ms, min: 0 ms, p99.9: 37 ms