跳到主要内容
版本:2.5.4

性能测试

实体聚合根性能测试: Phoenix在华为云环境的性能测试报告。版本: 2.2.6

测试目的​

在华为云上部署 Phoenix 2.2.6 版本,做系统性的性能测试。

本次测试重点关注如下三个指标:

  • TPS: 账户管理集群每秒能处理请求的数量
  • 时延: 从发起请求到处理结束的耗时
  • 实例个数: 集群中启动服务实例的个数

根据三个指标构造如下案例:

  • 华为云 GaussDB 基准测试:单独使用一个 phoenix-server 实例对 GaussDB 进行基准测试
  • 纯框架线性测试: 不带 EventStore 的线性能力测试
  • 带存储的线性测试: 带 EventStore 的线性能力测试

在上述案例中将会使用 Phoenix 开发的账户管理业务来测试,用户可以发起对指定账户余额的增减请求。

测试环境​

硬件资源信息​

以下机器在一个网段上。

机器名称操作系统CPU内存硬盘部署服务
kunlun-phoenix-1(裸金属)EulerOS 2.3 64bit for BareMetalIntel(R) Xeon(R) Silver 4114 CPU @ 2.20GHz8*16GB DDR4 RAM(GB)机械benchmark-client, auto-benchmark, prometheus
kunlun-phoenix-2(裸金属)EulerOS 2.3 64bit for BareMetalIntel(R) Xeon(R) Gold 6161 CPU @ 2.20GHz12*32GB DDR4机械phoenix-web
kunlun-phoenix-3(裸金属)EulerOS 2.3 64bit for BareMetalIntel(R) Xeon(R) Gold 6161 CPU @ 2.20GHz12*32GB DDR4机械phoenix-web
kunlun-phoenix-4(裸金属)EulerOS 2.3 64bit for BareMetalIntel Xeon Gold 5118 V5 (2*12Core 2.30GHz)192GB DDR4 RAM(GB)机械phoenix-server
kunlun-phoenix-5(裸金属)EulerOS 2.3 64bit for BareMetalIntel Xeon Gold 5118 V5 (2*12Core 2.30GHz)192GB DDR4 RAM(GB)机械phoenix-server
kunlun-phoenix-6(裸金属)EulerOS 2.3 64bit for BareMetalIntel Xeon Gold 5118 V5 (2*12Core 2.30GHz)192GB DDR4 RAM(GB)机械phoenix-server
kunlun-phoenix-7(裸金属EulerOS 2.3 64bit for BareMetalIntel Xeon Gold 5118 V5 (2*12Core 2.30GHz)192GB DDR4 RAM(GB)机械phoenix-server
kunlun-phoenix-8(裸金属)EulerOS 2.3 64bit for BareMetalIntel Xeon Gold 5118 V5 (2*12Core 2.30GHz)192GB DDR4 RAM(GB)机械phoenix-server
kunlun-phoenix-9(裸金属)EulerOS 2.3 64bit for BareMetalIntel Xeon Gold 5118 V5 (2*12Core 2.30GHz)192GB DDR4 RAM(GB)机械phoenix-server

软件资源信息​

Kafka

实例名称kafka-phoenix
版本2.3.0
基准带宽1,200 MB/s
分区上限1800个
磁盘类型超高I/O

GaussDB

实例名称db-phoenix
节点个数2
兼容的数据库版本MySQL 8.0
时区UTC+08:00
性能规格gaussdb.mysql.4xlarge.x86.4 16核 64 GB
区域上海一
存储空间500G

软件版本信息​

软件名称软件版本备注
phoenix2.2.6
GaussDBgaussdb.mysql.4xlarge.x86.4兼容MySQL 8.0
kafka2.3.0华为云分布式消息服务kafka
grafanav7.1.1
prometheusv2.19.0

关键参数配置​

  • Phoenix 服务参数
quantex.phoenix.server.performance.transactionReliabilityMaxAge = 5
quantex.phoenix.server.performance.transactionReliabilityRetryTimeIntervalMs = 20000
quantex.phoenix.server.performance.transactionReliabilityBatchRetry = 50
quantex.phoenix.server.performance.limitMaxLiveThings = 1000
quantex.phoenix.server.performance.limitMaxRemoveTimeoutMs = 100000
quantex.phoenix.server.performance.batchProcess = 100
quantex.phoenix.server.performance.batchPersist = 200
quantex.phoenix.server.performance.eventSourcingReadBatchSize = 1000
quantex.phoenix.benchmark.single-thread-max-tps = 20000
  • Kafka 服务参数
KAFKA_NUM_PARTITIONS=36   // 默认prtition为36个

测试案例​

案例1 GaussDB基准测试​

在测试之前,对华为云的GaussDB做一下基准测试,有助于后面分析框架性能瓶颈。

测试记录参见: GaussDB基准测试

测试结果​

批量插入大小对 GaussDB 最大 TPS 的影响

show

批量插入大小对 GaussDB 的延时影响

show

测试结论​

  1. 在一个实例下做的基准测试,GaussDB 的 TPS 为 3W 左右
  2. 在 TPS 与时延方面,单实例下压测的 GaussDB 的性能表现不如 Oracle。当批量插入 400 的数据量时,GaussDB 的时延在 100ms 居高不下

案例2 带EventStore的性能测试​

该案例分别设置不同的实例数量与DB数量,测试出框架在时延低于 1000ms 下所能达到的最大 TPS,通过不断增加实例个数与 DB 个数期望得出下面结论

  1. 增加实例个数对 TPS 提升的能力
  2. 增加 DB 个数对 TPS 有一个线性的提升

资源配置​

资源名称取值范围
实例数量[3~30] 步长3
聚合根数量[1000]
单实例配置4C, 8GB
GaussDB1、2、4
kafka36partition

测试结果​

在1、2、4DB下 1000 聚合根的情况下比对折线图 show

测试结论​

  1. 实例数超过 18 之后,TPS 增长缓慢。
  2. 目前资源下带上 EventStore 的最大 TPS 在 5W5 上下
  3. 随着 DB 的增加,TPS 确有提升

测试记录参见: 带EventStore的性能测试

案例3 纯框架性能测试​

该案例不配置 EventStore,仅仅对 Phoenix 做性能测试。

资源配置​

资源名称取值范围
实例数量[3~18] 步长3
聚合根数量[1000]
单实例配置12C, 8GB
kafka36partition

测试结果​

当实例数超过12个时,即每个节点分布两个实例,一共使用24C时,TPS到达最大15w show

测试结论​

  1. 实例数超过 12 个之后,TPS 最大 15W,并且再增加实例数后不会增长 TPS。

测试记录参见: 纯框架的性能测试


事务聚合根性能测试: 测试2.3.0版本下事务聚合根最大处理能力

测试环境​

公司rancher/phoenix-benchmark环境

测试案例​

  • Phoenix version: 2.3.0
  • CPU: 4C
  • MEMORY: 8G
  • 实例个数: 10
  • 聚合根数量: 100
  • Kafka partition: 36

测试结果​

测试最大 TPS 为 5500.

show