伸缩性测试
概述
可伸缩性(可扩展性)是一种对软件系统计算处理能力的设计指标,在系统扩展成长过程中,高度可伸缩的软件能够保证旺盛的生命力,通过很少的改动甚至只是硬件设备的添置,就能实现整个系统处理能力的线性增长。系统的伸缩性可以使用以下两个维度衡量:
- 纵向伸缩: 在同一个逻辑单元内增加资源来提高处理能力,比如增加 CPU 主频。
- 横向伸缩: 增加更多逻辑单元的资源,令它们像是一个单元一样工作来提高处理能力。
Phoenix 重点关心线性的横向伸缩能力,Phoenix 的处理单元是聚合根,Phoenix 框架可以根据 CPU 核心数动态调整处理聚合根的能力,可以根据节点个数动态调整每个节点处理聚合根的个数。 下面分别通过实例的伸缩和 CPU 核心数量的伸缩来证明 Phoenix 的横向伸缩能力。
实例数量伸缩测试
测试场景
Phoenix 框架弹性测试(实例数量伸缩)基于 bank-account 服务进行。通过在系统濒临崩溃时增加 Kubernetes 环境中 bank-account 服务集群的节点数量,来证明 Phoenix 的弹性。
校验方法
测试过程中使用 Grafana 监控请求的处理情况,观察系统的负载能力(Phoenix 监控图中的 TPS )在增加 bank-account 实例前后的变化。
测试环境
实例个数 | CPU | 内存 | 聚合根 | |
---|---|---|---|---|
增加实例前 | 2个 | 2C | 2Gb | 10个 |
增加实例后 | 4个 | 2C | 2Gb | 10个 |
测试步骤
- 在 Kubernetes 环境中,使用 bank-account 服务,部署两个节点,给定每个节点 2C(2个核心)的 CPU,不断调试前端的压测请求数量,观察 Grafana,测出服务的极限 TPS (这里测试为 2000/s)。
- 保证每个节点的 CPU 资源不变,前端的压测程序持续以 2000/s 的 TPS 发送请求。
- 待服务处理一段时间之后,节点数量增加到 4 个.
- 待服务继续处理一段时间之后,关闭前端请求。观察 Grafana。
- 观察压测结果,发现前期(只有两个节点的时候)服务的处理能力不太稳定,并且处理耗时较高。当增加两个节点之后,服务的处理能力稳定在 2000 左右,和前端的 请求速率持平,且消息处理耗时明显降低。
CPU资源伸缩测试
测试场景
Phoenix 框架高伸缩性测试(CPU 资源伸缩)基于 bank-account 服务进行。通过伸缩 Kubernetes 环境中 bank-account 服务集群节点的 CPU 核心数限制阈值,来证明 Phoenix 能够根据 CPU 资源来进行横向伸缩,以增大或者减少整个系统的负载能力。
校验方法
测试过程中使用 Grafana 监控请求的处理情况,观察系统的负载能力(Phoenix 监控图中的 TPS)在增加 CPU 资源(核数)前后的变化。
测试环境
实例个数 | CPU | 内存 | 聚合根 | |
---|---|---|---|---|
增加实例前 | 2个 | 2C | 2Gb | 10个 |
增加实例后 | 2个 | 4C | 2Gb | 10个 |
测试步骤
- 在 Kubernetes 环境中,使用 bank-account 服务,创建两个节点,给定每个节点 2C 的 CPU,不断调试前端的压测请求数量,观察 Grafana,观察 Grafana,测出服务的极限 TPS (这里测试为 2000/s)。
- 保证实例个数不变,前端的压测程序持续以 2000/s 的 TPS 发送请求。
- 待服务处理一段时间之后,升级 CPU 核心为 4C
- 待服务继续处理一段时间之后,关闭前端请求。观察 Grafana。
- 观察压测结果,发现在增加 CPU 资源前后服务均能较为平稳的进行处理。
结论
经过上述两个维度的横向伸缩性验证,证明 Phoenix 具有线程级别和进程级别的横向伸缩能力。