Polaris性能测试报告

测试方案

测试工具

使用开源的ghz工具进行压测。测试工具地址: ghzPolaris性能测试报告 - 图1 (opens new window)

测试规格

Polaris性能测试报告 - 图2

测试组网

客户端直接发送请求到北极星服务端:

  • 服务注册/反注册请求会对MySQL进行增删操作
  • 心跳上报请求会对Redis进行KV修改操作
  • 服务发现请求会对服务端缓存进行操作

Polaris性能测试报告 - 图3

准备动作

  • 下载polaris代码
  1. git clone https://github.com/polarismesh/polaris.git
  • 打包proto
  1. 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负载
1C2G2144354.752450379.9264.6890.541.40
2C4G4563448.1832300492.3166.0982.331.60
4C8G13608187.222380210.5376.3786.142.39
8C16G2945779.01203083.0358.6389.032.43
8C32G3591267.89250075.3563.0287.312.43

测试命令

  • 执行(ghz命令与配置文件至于polaris/common/api/v1 目录下):
  1. ./ghz --config=./register_instance.json -c {并发数, eg 100} -x {持续执行时间, eg 60s}
  • 配置文件 register_instance.json 如下:
  1. {
  2. // 实际执行时请把所有注释行删除
  3. // 请求总数
  4. "total": 1,
  5. // 并发数
  6. "concurrency": 1,
  7. "proto": "./grpcapi.proto",
  8. "call": "v1.PolarisGRPC.RegisterInstance",
  9. "data": {
  10. "id": "polaris-perf-test-1-ins-{{.RequestNumber}}",
  11. // 服务名称
  12. "service": "POLARIS-PERF-TEST-1",
  13. // 命名空间名称
  14. "namespace": "default",
  15. // 随机域名
  16. "host": "fakehost-{{randomString 8 }}.com",
  17. // 随机端口
  18. "port": "{{randomInt 1000 50000}}",
  19. "enable_health_check": true,
  20. "health_check": {
  21. "type": 1,
  22. "heartbeat": {
  23. "ttl": 3
  24. }
  25. },
  26. "healthy": true,
  27. "isolate": false,
  28. "ctime": "{{.TimestampUnix}}",
  29. "mtime": "{{.TimestampUnix}}"
  30. },
  31. // 北极星地址
  32. "host": "127.0.0.1:8091",
  33. "insecure": true
  34. }

服务发现

测试数据

规格TPS平均RT(ms)最大RT(ms)P99 RT(ms)服务端CPU负载MySQLCPU负载Redis CPU负载
1C2G12194214.75654.23248.6464.6818.96.40
2C4G2733117.183310.4618.5892.5139.4414.01
4C8G4611838.63472.4245.4790.567255.96
8C16G8027747.8171959.038825.123.4
8C32G116021298.05872.81372.2893.0227.3129

测试命令

  • 执行:
  1. ./ghz --config=./discover_instance.json -c {并发数, eg 100} -x {持续执行时间, eg 60s}
  • 配置文件 discover_instance.json 如下:
  1. {
  2. "total":1,
  3. "concurrency":1,
  4. "proto":"./grpcapi.proto",
  5. "call":"v1.PolarisGRPC.Discover",
  6. "data":{
  7. "type": 1,
  8. "service": {
  9. // 服务名称
  10. "name": "PERF-1-TEST-SVCID-{{.WorkerID}}",
  11. // 命名空间名称
  12. "namespace":"default"
  13. }
  14. },
  15. // 北极星地址
  16. "host": "127.0.0.1:8091",
  17. "insecure":true
  18. }

心跳上报

测试数据

规格TPS平均RT(ms)最大RT(ms)P99 RT(ms)服务端CPU负载MySQLCPU负载Redis CPU负载
1C2G5094155.31564.95161.8492.6836.3450
2C4G6419421.73342.65492.3187.4140.13441.241
4C8G1041741.47840.1450.9690.12431.223.576
8C16G3209270.83639.4777.8389.4123430.66
8C32G78077219.42371.58242.79903532.39

测试命令

  • 执行:
  1. ./ghz --config=./heartbeat_instance.json -c {并发数, eg 100} -x {持续执行时间, eg 60s}
  • 配置文件 heartbeat_instance.json 如下:
  1. {
  2. // 实际执行时请把所有注释行删除
  3. // 请求总数
  4. "total": 1,
  5. // 并发数
  6. "concurrency": 1,
  7. "proto": "./grpcapi.proto",
  8. "call": "v1.PolarisGRPC.Heartbeat",
  9. "data": {
  10. "id": "polaris-perf-test-1-ins-{{.RequestNumber}}",
  11. // 服务名称
  12. "service": "POLARIS-PERF-TEST-1",
  13. // 命名空间名称
  14. "namespace": "default",
  15. "healthy": true,
  16. "isolate": false,
  17. "mtime": "{{.TimestampUnix}}"
  18. },
  19. // 北极星地址
  20. "host": "127.0.0.1:8091",
  21. "insecure": true
  22. }

实例反注册

测试数据

规格TPS平均RT(ms)最大RT(ms)P99 RT(ms)服务端CPU负载MySQLCPU负载Redis CPU负载
1C2G903573.75797.03682.7845.4291.542.4
2C4G1485448.18621.231391.0769.24182.333.8
4C8G295957.59389.3688.2567.5193.12512.39
8C16G869461.70265.97123.0373.4191.032.3
8C32G1435661.70423.51323.9563.3987.316.196

测试命令

  • 执行:
  1. ./ghz --config=./deregister_instance.json -c {并发数, eg 100} -x {持续执行时间, eg 60s}
  • 配置文件 deregister_instance.json 如下:
  1. {
  2. // 实际执行时请把所有注释行删除
  3. // 请求总数
  4. "total": 1,
  5. // 并发数
  6. "concurrency": 1,
  7. "proto": "./grpcapi.proto",
  8. "call": "v1.PolarisGRPC.DeregisterInstance",
  9. "data": {
  10. "id": "polaris-perf-test-1-ins-{{.RequestNumber}}",
  11. // 服务名称
  12. "service": "POLARIS-PERF-TEST-1",
  13. // 命名空间名称
  14. "namespace": "default"
  15. },
  16. // 北极星地址
  17. "host": "127.0.0.1:8091",
  18. "insecure": true
  19. }

结论

在长时间的压力测试下,不同规格的北极星集群均维持正常运行状态,集群可承载的实例容量从1k实例到10w实例,相关依赖组件的系统资源消耗也均在预期内,并未出现相关依赖组件高负载不可用现象。

  • 注册实例的TPS最高可达35912,符合接口预期
  • 服务发现的QPS最高可达116021,符合接口预期
  • 实例心跳的TPS最高可达78077,符合接口预期
  • 注销实例的TPS最高可达14356,符合接口预期

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