2. 基准测试基础:核心指标与测试方法论
基准测试(Benchmark Testing)是性能验证的起点。它通过可重复的、受控的测试,建立系统在当前环境下的性能基线。本章聚焦于衡量系统吞吐与响应速度的核心指标,以及三种最常用的测试方法论,为后续连接池与消息队列的对比验证打下基础。
2.1 核心指标:TPS、QPS、延迟与 P99
性能指标是量化系统行为的标尺。在基准测试中,以下四个指标构成最基础的度量体系:
| 指标 | 全称 | 定义 | 典型关注场景 |
|---|---|---|---|
| TPS | Transactions Per Second | 系统每秒完成的事务数。一个事务通常包含一组完整的读写操作。 | 数据库写入、订单提交、支付扣款 |
| QPS | Queries Per Second | 系统每秒处理的查询请求数。侧重读操作或单一接口调用。 | API 网关、搜索引擎、缓存读取 |
| 延迟 | Latency | 从请求发出到收到完整响应所经过的时间,通常以毫秒(ms)为单位。 | 用户体验、实时交互、流媒体 |
| P99 | 99th Percentile | 在所有请求中,99% 的请求延迟低于该值。反映尾部延迟的极端情况。 | 高可用系统、SLA 承诺、异常检测 |
实践要点:TPS 与 QPS 的区别在于事务的原子性。一个 TPS 可能包含多次 QPS(例如:一次下单事务 = 1 次库存查询 + 1 次订单写入 + 1 次支付调用)。在连接池测试中,通常以 TPS 衡量整体吞吐;在消息队列索引效率测试中,QPS 更直接反映索引查询的并发能力。
延迟的分布比平均值更重要。P99 能暴露系统在压力下的抖动,而平均延迟往往会掩盖这些异常。下图展示了典型延迟分布曲线与 P99 的位置关系:
2.2 测试方法论
不同的测试目标需要不同的方法论。在连接池与消息队列的基准验证中,以下三种方法构成完整的测试矩阵:
2.2.1 A/B 测试(对比测试)
A/B 测试用于在控制变量的前提下,对比两个或多个配置/版本的性能差异。在连接池场景中,典型 A/B 测试是“固定连接数 vs. 动态连接数”的吞吐对比。
- 控制变量:保持硬件、网络、数据量、并发线程数一致,仅改变连接池大小或队列索引类型。
- 测量指标:TPS、平均延迟、P99 延迟。
- 结果判定:使用置信区间(Confidence Interval)判断差异是否显著,避免随机波动导致的误判。
2.2.2 负载测试(Load Testing)
负载测试模拟预期的正常业务流量,验证系统能否在目标吞吐下稳定运行。它回答的问题是:“系统在预期负载下,性能指标是否达标?”
- 负载模型:基于生产环境的流量峰值(如日均 QPS 的 1.5 倍)设计。
- 持续时间:至少 15-30 分钟,观察性能是否随时间衰减(如连接泄漏、内存增长)。
- 关键观察:TPS 是否平稳、延迟是否出现阶梯式上升。
2.2.3 压力测试(Stress Testing)
压力测试持续增加负载,直到系统达到瓶颈或崩溃。它回答的问题是:“系统的极限在哪里?瓶颈是什么?”
- 递增策略:从低并发逐步增加,每阶段保持 1-2 分钟,记录拐点。
- 拐点识别:当 TPS 不再随并发增加而上升,或延迟出现非线性增长时,即为瓶颈点。
- 资源监控:同时观察 CPU、内存、磁盘 I/O、网络带宽,定位瓶颈层级。
常见误区:将负载测试与压力测试混为一谈。负载测试关注“能否达标”,压力测试关注“极限在哪”。在连接池测试中,如果只做负载测试而忽略压力测试,可能会遗漏连接池耗尽时的雪崩效应。
三种方法论的关系与适用阶段,可以通过以下流程结构图清晰呈现:
2.3 指标与方法的组合应用
在实际的基准测试中,指标与方法需要组合使用。下表总结了在连接池与消息队列场景中的典型组合:
| 测试场景 | 适用方法 | 核心指标 | 预期产出 |
|---|---|---|---|
| 连接池大小调优 | A/B 测试 | TPS、P99 | 最优连接数范围 |
| 消息队列索引类型选择 | A/B 测试 | QPS、平均延迟 | 索引类型性能对比表 |
| 系统容量规划 | 负载测试 | TPS、CPU 使用率 | 最大支撑并发数 |
| 连接池耗尽风险验证 | 压力测试 | TPS 拐点、错误率 | 连接池极限与恢复行为 |
| 消息队列积压恢复 | 压力测试 | 消费 TPS、P99 | 积压恢复时间与稳定性 |
课程实验提示:在后续章节中,我们将使用 A/B 测试对比不同连接池配置的 TPS 与 P99 延迟;使用负载测试验证消息队列在预期 QPS 下的索引效率;使用压力测试找出连接池的极限并发数。请确保在每次实验前,先明确本次测试属于哪种方法论,并记录对应的核心指标。