性能测试报告
测试方案
测试工具
使用开源的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,符合接口预期
 
通过压测,不同规格的北极星集群可以稳定支撑服务实例数量均满足预期。