性能测试报告

测试方案

测试工具

使用开源的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,符合接口预期

通过压测,不同规格的北极星集群可以稳定支撑服务实例数量均满足预期。