Skip to content

smallnest/kitex-benchmark

 
 

Repository files navigation

kitex-benchmark

本项目展示了 kitex 的几种简单用法, 并提供了若干对比项目。

由于不同框架使用的 协议、传输模式等 存在差异,不能强行拉齐。kitex 给出了几种简单的组合,可供参考。

  1. kitex:
    1. 多协议:thrift (推荐)、protobuf
    2. 多传输模式:长连接池(推荐)、连接多路复用(mux)
  2. 对比项目:
    1. thrift 方向,暂时没有找到较为流行的对比框架,后续可以添加。
    2. protobuf 方向,提供了 grpcrpcx 作为对比项目(均使用连接多路复用)。

使用说明

快速执行:loopback 模式

执行前请先确认满足环境要求

Thrift

./scripts/benchmark_thrift.sh

Protobuf

./scripts/benchmark_pb.sh

跨机器执行

loopback 模式数据并未真正进入网卡,未能真实模拟线上服务情况。所以也提供了 Client 与 Server 分别部署执行的方式。

但是需要注意的是,如果执行机器上拥有超过 taskset 设置的核心,网络包会通过 softirq 借道其他未被 taskset 控制的 ksoftirqd 内核线程,进而享受了其他 CPU 的计算。所以需要严格的压测数据时,推荐使用和 taskset 一致的机器配置,或是删除 taskset。

Thrift

./scripts/run_thrift_servers.sh

./scripts/run_thrift_servers.sh

Protobuf

./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

数据 (echo size 1KB)

并发数 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 image image image
Protobuf image image image

About

No description, website, or topics provided.

Resources

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 83.2%
  • Shell 12.2%
  • Python 4.3%
  • Thrift 0.3%