Awesome
Benchmark
测试环境
- CPU: 2.5 GHz Intel Core i7
- Memory: 16 GB 2133 MHz LPDDR3
- OS: MacBook Pro (13-inch, 2017, Two Thunderbolt 3 ports)
- Go: 1.11
测试代码client是通过protobuf编解码和server通讯的。 请求发送给server, server解码、更新两个字段、编码再发送给client,所以整个测试会包含客户端的编解码和服务器端的编解码。 消息的内容大约为581 byte, 在传输的过程中会增加少许的头信息,所以完整的消息大小在600字节左右。
测试用的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;
optional int32 field280 = 280;
optional int32 field6 = 6 [default=0];
optional int64 field22 = 22;
optional string field4 = 4;
repeated fixed64 field5 = 5;
optional bool field59 = 59 [default=false];
optional string field7 = 7;
optional int32 field16 = 16;
optional int32 field130 = 130 [default=0];
optional bool field12 = 12 [default=true];
optional bool field17 = 17 [default=true];
optional bool field13 = 13 [default=true];
optional bool field14 = 14 [default=true];
optional int32 field104 = 104 [default=0];
optional int32 field100 = 100 [default=0];
optional int32 field101 = 101 [default=0];
optional string field102 = 102;
optional string field103 = 103;
optional int32 field29 = 29 [default=0];
optional bool field30 = 30 [default=false];
optional int32 field60 = 60 [default=-1];
optional int32 field271 = 271 [default=-1];
optional int32 field272 = 272 [default=-1];
optional int32 field150 = 150;
optional int32 field23 = 23 [default=0];
optional bool field24 = 24 [default=false];
optional int32 field25 = 25 [default=0];
optional bool field78 = 78;
optional int32 field67 = 67 [default=0];
optional int32 field68 = 68;
optional int32 field128 = 128 [default=0];
optional string field129 = 129 [default="xxxxxxxxxxxxxxxxxxxxx"];
optional int32 field131 = 131 [default=0];
}
测试的并发client是 100, 500 and 1000。总请求数一百万。
测试结果
teleport
teleport 是一个通用、高效、灵活的Socket框架。可用于Peer-Peer对等通信、RPC、长连接网关、微服务、推送服务,游戏服务等领域。
一个服务器和一个客户端,在同一台机器上
并发client | 平均值(ms) | 中位数(ms) | 最大值(ms) | 最小值(ms) | p99 | 吞吐率(TPS) |
---|---|---|---|---|---|---|
100 | 1 | 1 | 30 | 0 | 8 | 50002 |
500 | 11 | 10 | 67 | 0 | 29 | 44942 |
1000 | 23 | 22 | 145 | 0 | 57 | 42867 |
gRPC
gRPC 是Google开发的一个RPC框架,支持多种编程语言。
一个服务器和一个客户端,在同一台机器上
并发client | 平均值(ms) | 中位数(ms) | 最大值(ms) | 最小值(ms) | p99 | 吞吐率(TPS) |
---|---|---|---|---|---|---|
100 | 3 | 2 | 55 | 0 | 14 | 33089 |
500 | 15 | 14 | 154 | 0 | 77 | 32069 |
1000 | 34 | 31 | 233 | 0 | 104 | 28769 |
rpcx
rpcx 是一款国人开发的类似阿里巴巴Dubbo 和微博Motan 的分布式的RPC服务框架,基于Golang net/rpc实现。
一个服务器和一个客户端,在同一台机器上
并发client | 平均值(ms) | 中位数(ms) | 最大值(ms) | 最小值(ms) | p99 | 吞吐率(TPS) |
---|---|---|---|---|---|---|
100 | 2 | 1 | 85 | 0 | 13 | 45442 |
500 | 11 | 10 | 108 | 0 | 63 | 42025 |
1000 | 26 | 23 | 263 | 0 | 144 | 36837 |