基准测试
基准测试代码在rpcx-ecosystem/rpcx-benchmark。
相同测试环境、测试数据和测试参数,测试了grpc、rpcx、dubbo、motan、thrift和go-micro。
基于我之前的测试,dubbo、motan和go-micro的性能较低,因此他们的最新测试没有列在此处,你可以使用相同的基准测试代码来测试他们。
测试逻辑
使用protobuf作为所有测试的编解码器。proto文件是benchmark.proto:
syntax = "proto2";
package main;
option optimize_for = SPEED;
message BenchmarkMessage {
required string field1 = 1;
optional string field9 = 9;
optional string field18 = 18;
optional bool field80 = 80 [default=false];
optional bool field81 = 81 [default=true];
required int32 field2 = 2;
required int32 field3 = 3;
......
}
客户端通过设置每个字段生成一个请求,请求的大小是518字节。
服务器接收请求并设置第一个字段为“OK”、第二个字段为100,然后服务器返回该请求给客户端。
以下的两个选项可以并行和请求数量。
测试环境
- CPU:Intel Xeon CPU E5-2630 v3 @ 2.40GHz, 32核
- 内存:32G
- Go:1.9.2
- OS:CentOS 7 / 3.10.0-229.el7.x86_64
客户端和服务器安装在同一台机器中。
测试结果
TPS
对于5000并发,rpcx可以达到176894传输/秒TPS,但是grpc-go只达到了105219传输/秒。
并发 | RPCX | GRPC-GO |
---|---|---|
5000 | 176894 | 105219 |
2000 | 161660 | 109245 |
1000 | 148227 | 111351 |
100 | 145479 | 93447 |
延迟:平均时间
并发 | RPCX | GRPC-GO |
---|---|---|
5000 | 27 | 47 |
2000 | 12 | 18 |
1000 | 6 | 8 |
100 | 0 | 1 |
延迟:中间值时间
并发 | RPCX | GRPC-GO |
---|---|---|
5000 | 3 | 42 |
2000 | 7 | 15 |
1000 | 5 | 7 |
100 | 0 | 0 |