1 - 性能测试报告
测试方案
测试工具
使用开源的ghz工具进行压测。测试工具地址: ghz
测试规格
测试组网
客户端直接发送请求到北极星服务端:
- 服务注册/反注册请求会对MySQL进行增删操作
- 心跳上报请求会对Redis进行KV修改操作
- 服务发现请求会对服务端缓存进行操作
准备动作
- 下载polaris代码
git clone https://github.com/polarismesh/polaris.git
- 打包proto
chmod 777 polaris/common/api/protoc/bin/* && cd polaris/common/api/v1/ && sh build.sh
测试结果
实例注册
测试数据
规格 | TPS | 平均RT(ms) | 最大RT(ms) | P99 RT(ms) | 服务端CPU负载 | MySQLCPU负载 | Redis CPU负载 |
---|---|---|---|---|---|---|---|
1C2G | 2144 | 354.75 | 2450 | 379.92 | 64.68 | 90.54 | 1.40 |
2C4G | 4563 | 448.183 | 2300 | 492.31 | 66.09 | 82.33 | 1.60 |
4C8G | 13608 | 187.22 | 2380 | 210.53 | 76.37 | 86.14 | 2.39 |
8C16G | 29457 | 79.01 | 2030 | 83.03 | 58.63 | 89.03 | 2.43 |
8C32G | 35912 | 67.89 | 2500 | 75.35 | 63.02 | 87.31 | 2.43 |
测试命令
- 执行(ghz命令与配置文件至于polaris/common/api/v1 目录下):
./ghz --config=./register_instance.json -c {并发数, eg 100} -x {持续执行时间, eg 60s}
- 配置文件 register_instance.json 如下:
{
// 实际执行时请把所有注释行删除
// 请求总数
"total": 1,
// 并发数
"concurrency": 1,
"proto": "./grpcapi.proto",
"call": "v1.PolarisGRPC.RegisterInstance",
"data": {
"id": "polaris-perf-test-1-ins-{{.RequestNumber}}",
// 服务名称
"service": "POLARIS-PERF-TEST-1",
// 命名空间名称
"namespace": "default",
// 随机域名
"host": "fakehost-{{randomString 8 }}.com",
// 随机端口
"port": "{{randomInt 1000 50000}}",
"enable_health_check": true,
"health_check": {
"type": 1,
"heartbeat": {
"ttl": 3
}
},
"healthy": true,
"isolate": false,
"ctime": "{{.TimestampUnix}}",
"mtime": "{{.TimestampUnix}}"
},
// 北极星地址
"host": "127.0.0.1:8091",
"insecure": true
}
服务发现
测试数据
规格 | TPS | 平均RT(ms) | 最大RT(ms) | P99 RT(ms) | 服务端CPU负载 | MySQLCPU负载 | Redis CPU负载 |
---|---|---|---|---|---|---|---|
1C2G | 12194 | 214.75 | 654.23 | 248.64 | 64.68 | 18.9 | 6.40 |
2C4G | 27331 | 17.183 | 310.46 | 18.58 | 92.51 | 39.441 | 4.01 |
4C8G | 46118 | 38.63 | 472.42 | 45.47 | 90.567 | 25 | 5.96 |
8C16G | 80277 | 47.81 | 719 | 59.03 | 88 | 25.12 | 3.4 |
8C32G | 116021 | 298.05 | 872.81 | 372.28 | 93.02 | 27.312 | 9 |
测试命令
- 执行:
./ghz --config=./discover_instance.json -c {并发数, eg 100} -x {持续执行时间, eg 60s}
- 配置文件 discover_instance.json 如下:
{
"total":1,
"concurrency":1,
"proto":"./grpcapi.proto",
"call":"v1.PolarisGRPC.Discover",
"data":{
"type": 1,
"service": {
// 服务名称
"name": "PERF-1-TEST-SVCID-{{.WorkerID}}",
// 命名空间名称
"namespace":"default"
}
},
// 北极星地址
"host": "127.0.0.1:8091",
"insecure":true
}
心跳上报
测试数据
规格 | TPS | 平均RT(ms) | 最大RT(ms) | P99 RT(ms) | 服务端CPU负载 | MySQLCPU负载 | Redis CPU负载 |
---|---|---|---|---|---|---|---|
1C2G | 5094 | 155.31 | 564.95 | 161.84 | 92.68 | 36.34 | 50 |
2C4G | 6419 | 421.73 | 342.65 | 492.31 | 87.41 | 40.134 | 41.241 |
4C8G | 10417 | 41.47 | 840.14 | 50.96 | 90.124 | 31.2 | 23.576 |
8C16G | 32092 | 70.83 | 639.47 | 77.83 | 89.412 | 34 | 30.66 |
8C32G | 78077 | 219.42 | 371.58 | 242.79 | 90 | 35 | 32.39 |
测试命令
- 执行:
./ghz --config=./heartbeat_instance.json -c {并发数, eg 100} -x {持续执行时间, eg 60s}
- 配置文件 heartbeat_instance.json 如下:
{
// 实际执行时请把所有注释行删除
// 请求总数
"total": 1,
// 并发数
"concurrency": 1,
"proto": "./grpcapi.proto",
"call": "v1.PolarisGRPC.Heartbeat",
"data": {
"id": "polaris-perf-test-1-ins-{{.RequestNumber}}",
// 服务名称
"service": "POLARIS-PERF-TEST-1",
// 命名空间名称
"namespace": "default",
"healthy": true,
"isolate": false,
"mtime": "{{.TimestampUnix}}"
},
// 北极星地址
"host": "127.0.0.1:8091",
"insecure": true
}
实例反注册
测试数据
规格 | TPS | 平均RT(ms) | 最大RT(ms) | P99 RT(ms) | 服务端CPU负载 | MySQLCPU负载 | Redis CPU负载 |
---|---|---|---|---|---|---|---|
1C2G | 903 | 573.75 | 797.03 | 682.78 | 45.42 | 91.54 | 2.4 |
2C4G | 1485 | 448.18 | 621.231 | 391.07 | 69.241 | 82.33 | 3.8 |
4C8G | 2959 | 57.59 | 389.36 | 88.25 | 67.51 | 93.1251 | 2.39 |
8C16G | 8694 | 61.70 | 265.97 | 123.03 | 73.41 | 91.03 | 2.3 |
8C32G | 14356 | 61.70 | 423.51 | 323.95 | 63.39 | 87.31 | 6.196 |
测试命令
- 执行:
./ghz --config=./deregister_instance.json -c {并发数, eg 100} -x {持续执行时间, eg 60s}
- 配置文件 deregister_instance.json 如下:
{
// 实际执行时请把所有注释行删除
// 请求总数
"total": 1,
// 并发数
"concurrency": 1,
"proto": "./grpcapi.proto",
"call": "v1.PolarisGRPC.DeregisterInstance",
"data": {
"id": "polaris-perf-test-1-ins-{{.RequestNumber}}",
// 服务名称
"service": "POLARIS-PERF-TEST-1",
// 命名空间名称
"namespace": "default"
},
// 北极星地址
"host": "127.0.0.1:8091",
"insecure": true
}
结论
在长时间的压力测试下,不同规格的北极星集群均维持正常运行状态,集群可承载的实例容量从1k实例到10w实例,相关依赖组件的系统资源消耗也均在预期内,并未出现相关依赖组件高负载不可用现象。
- 注册实例的TPS最高可达35912,符合接口预期
- 服务发现的QPS最高可达116021,符合接口预期
- 实例心跳的TPS最高可达78077,符合接口预期
- 注销实例的TPS最高可达14356,符合接口预期
通过压测,不同规格的北极星集群可以稳定支撑服务实例数量均满足预期。