本项目展示了 kitex 的几种简单用法, 并提供了若干对比项目。
由于不同框架使用的 协议、传输模式等 存在差异,不能强行拉齐。kitex 给出了几种简单的组合,可供参考。
- kitex:
- 对比项目:
执行前请先确认满足环境要求。
./scripts/benchmark_thrift.sh
./scripts/benchmark_pb.sh
loopback 模式数据并未真正进入网卡,未能真实模拟线上服务情况。所以也提供了 Client 与 Server 分别部署执行的方式。
但是需要注意的是,如果执行机器上拥有超过 taskset 设置的核心,网络包会通过 softirq 借道其他未被 taskset 控制的 ksoftirqd 内核线程,进而享受了其他 CPU 的计算。所以需要严格的压测数据时,推荐使用和 taskset 一致的机器配置,或是删除 taskset。
./scripts/run_thrift_servers.sh
./scripts/run_thrift_servers.sh
./scripts/benchmark_pb.sh
修改 ./scripts/env.sh
文件:
# 发送压测请求数
n=5000000
# 请求体大小
body=(1024 5120)
# 并发度
concurrent=(100 200 400 600 800 1000)
OS: Linux
- 默认依赖了命令
taskset
, 限定 client 和 server 运行的 CPU; 如在其他系统执行, 请修改脚本。
CPU: >= 16核心
- 默认需要 16核 CPU, 具体在脚本的
taskset -c ...
部分, 可以修改或删除。
- CPU: Intel(R) Xeon(R) Gold 5118 CPU @ 2.30GHz, 48 Cores
- Mem: 187 GB
- OS: Debian 5.4.56.bsk.1-amd64 x86_64 GNU/Linux
- Go: 1.15.4
并发数 | thrift | 传输 | TPS | TP99(ms) | TP999(ms) |
---|---|---|---|---|---|
100 | |||||
kitex | 长连接池 | 249586.69 | 1.39ms | 9.23ms | |
kitex | 连接多路复用 | 223230.54 | 1.46ms | 2.46ms | |
200 | |||||
kitex | 长连接池 | 251653.10 | 3.23ms | 11.56ms | |
kitex | 连接多路复用 | 259954.09 | 2.48ms | 4.23ms | |
400 | |||||
kitex | 长连接池 | 251758.62 | 8.05ms | 13.76ms | |
kitex | 连接多路复用 | 284189.41 | 4.31ms | 7.57ms | |
600 | |||||
kitex | 长连接池 | 252804.29 | 8.79ms | 14.17ms | |
kitex | 连接多路复用 | 293386.70 | 5.97ms | 10.13ms | |
800 | |||||
kitex | 长连接池 | 249029.06 | 10.69ms | 14.75ms | |
kitex | 连接多路复用 | 301462.58 | 7.91ms | 13.99ms | |
1000 | |||||
kitex | 长连接池 | 243720.26 | 12.35ms | 16.68ms | |
kitex | 连接多路复用 | 303662.55 | 9.37ms | 14.98ms |
并发数 | protobuf | 传输 | TPS | TP99(ms) | TP999(ms) |
---|---|---|---|---|---|
100 | |||||
kitex | 连接多路复用 | 200806.62 | 1.66ms | 2.77ms | |
kitex | 长连接池 | 204468.11 | 1.78ms | 4.99ms | |
rpcx | 连接多路复用 | 178903.63 | 2.09ms | 3.03ms | |
grpc | 连接多路复用 | 104432.22 | 3.22ms | 5.09ms | |
200 | |||||
kitex | 连接多路复用 | 217474.75 | 2.85ms | 4.84ms | |
kitex | 长连接池 | 208105.67 | 2.62ms | 7.48ms | |
rpcx | 连接多路复用 | 176322.84 | 4.58ms | 6.35ms | |
grpc | 连接多路复用 | 110597.72 | 6.32ms | 8.97ms | |
400 | |||||
kitex | 连接多路复用 | 237156.98 | 5.02ms | 8.22ms | |
kitex | 长连接池 | 208927.09 | 4.70ms | 10.23ms | |
rpcx | 连接多路复用 | 164350.65 | 9.46ms | 13.50ms | |
grpc | 连接多路复用 | 112539.80 | 12.41ms | 17.37ms | |
600 | |||||
kitex | 连接多路复用 | 248210.98 | 7.35ms | 12.27ms | |
kitex | 长连接池 | 206585.82 | 6.70ms | 13.77ms | |
rpcx | 连接多路复用 | 155863.11 | 14.95ms | 21.68ms | |
grpc | 连接多路复用 | 110447.42 | 18.83ms | 26.65ms | |
800 | |||||
kitex | 连接多路复用 | 250869.87 | 9.61ms | 16.63ms | |
kitex | 长连接池 | 202175.99 | 10.00ms | 16.73ms | |
rpcx | 连接多路复用 | 153935.56 | 19.69ms | 27.43ms | |
grpc | 连接多路复用 | 110728.66 | 24.74ms | 34.08ms | |
1000 | |||||
kitex | 连接多路复用 | 254485.37 | 12.09ms | 20.89ms | |
kitex | 长连接池 | 198328.16 | 11.68ms | 17.25ms | |
rpcx | 连接多路复用 | 154200.48 | 23.99ms | 32.87ms | |
grpc | 连接多路复用 | 112437.62 | 29.55ms | 41.08ms | |
Protocol | QPS | TP99 | TP999 |
---|---|---|---|
Thrift | |||
Protobuf |