3. 压测场景库设计原则
构建 Saga 模式数据传输优化的压测场景库,必须遵循系统化的设计原则。场景库的质量直接决定压测结果的有效性和可复现性。本章从场景分类、数据量级定义、压测指标三个维度,建立一套可落地、可量化的设计规范。
3.1 场景分类:正常 / 异常 / 边界
压测场景应覆盖三类核心场景,确保对 Saga 数据传输路径的全面验证。每类场景需明确其触发条件、预期行为和监控要点。
| 场景类别 | 定义 | Saga 数据传输典型场景 | 预期行为 |
|---|---|---|---|
| 正常场景 | 业务逻辑与系统环境均符合预期,无任何异常注入 | 订单创建 → 库存扣减 → 支付 → 完整提交 | 所有参与者成功提交,数据最终一致 |
| 异常场景 | 模拟服务超时、网络抖动、节点宕机、数据冲突等故障 | 支付服务超时 → 触发补偿事务 → 回滚库存 | 补偿事务正确执行,数据回滚至初始状态 |
| 边界场景 | 测试系统在极限条件下的行为,如最大并发、最小超时、空数据 | 并发 1000 笔订单同时触发 Saga,超时阈值设为 100ms | 系统不崩溃,部分事务超时回滚,数据无丢失 |
实践建议: 异常场景应至少覆盖“参与者超时”、“参与者返回失败”、“协调器宕机恢复”三种基本故障模式。边界场景需结合业务峰值流量和基础设施限制(如连接池大小、线程池队列深度)来定义。
下图展示了三类场景在 Saga 数据传输流程中的覆盖范围:
3.2 数据量级定义
压测数据量级需与生产环境特征对齐,避免“小数据量压测通过,大数据量生产崩溃”的脱节问题。建议按以下四级量级定义数据规模:
| 量级级别 | 单事务数据量 | 并发事务数 | 总数据规模 | 适用场景 |
|---|---|---|---|---|
| L1 - 微量 | ≤ 1 KB | 10 ~ 50 | ≤ 100 MB | 功能验证、冒烟测试 |
| L2 - 中量 | 1 KB ~ 10 KB | 50 ~ 500 | 100 MB ~ 5 GB | 日常回归、性能基线 |
| L3 - 大量 | 10 KB ~ 100 KB | 500 ~ 5000 | 5 GB ~ 50 GB | 容量规划、极限压测 |
| L4 - 超量 | ≥ 100 KB | ≥ 5000 | ≥ 50 GB | 极端场景、稳定性测试 |
注意: Saga 数据传输优化中,单事务数据量不仅包含业务 payload,还应包括 Saga 上下文(事务 ID、补偿端点、状态机快照)。上下文数据过大时,会显著增加协调器内存压力和网络传输开销。
数据量级定义需与 Saga 数据传输路径中的关键节点对应:
3.3 压测指标:TPS、响应时间、失败率
压测指标是衡量 Saga 数据传输优化效果的核心标尺。三个指标需联合分析,单一指标达标不代表系统健康。
3.3.1 TPS(每秒事务数)
TPS 反映系统在单位时间内能完成的 Saga 事务总数。注意:Saga 事务包含多个参与者调用,TPS 计算应以“完整 Saga 事务提交/回滚”为单位,而非单个参与者请求。
// TPS 计算示例
// 假设一次 Saga 事务包含 3 个参与者调用 + 1 次协调器决策
// 压测 60 秒内完成 1200 个完整 Saga 事务
TPS = 1200 / 60 = 20 个 Saga 事务/秒
// 对比:若按参与者请求计算
// 每个 Saga 事务产生 3 个参与者请求
TPS(请求级) = (1200 * 3) / 60 = 60 请求/秒
// 两者相差 3 倍,务必明确统计口径
3.3.2 响应时间
响应时间应分层采集,至少包含以下三个维度:
- 端到端响应时间: 从客户端发起 Saga 请求到收到最终结果(提交/回滚)的总耗时。
- 协调器处理时间: 协调器接收请求到发出最终决策的时间,反映协调器性能。
- 参与者调用时间: 单个参与者执行本地事务 + 响应的时间,用于定位慢参与者。
优化目标: Saga 数据传输优化后,端到端响应时间 P99 应降低 30% 以上,且协调器处理时间占比不超过总时间的 20%。
3.3.3 失败率
失败率包含两类统计口径:
| 失败类型 | 定义 | 可接受阈值 | 优化方向 |
|---|---|---|---|
| 业务失败率 | 因业务规则(如库存不足、余额不够)导致的 Saga 回滚 | ≤ 5% | 业务逻辑优化、预校验 |
| 系统失败率 | 因超时、网络异常、资源不足导致的 Saga 失败 | ≤ 0.1% | 数据传输优化、重试策略、资源扩容 |
三个指标需联合绘制成“压测仪表盘”,用于快速定位瓶颈:
联合分析法则: 当 TPS 上升时,若响应时间同步线性增长且失败率保持稳定,说明系统处于正常负载范围;若响应时间出现拐点式增长且失败率骤升,说明系统已过载,需要扩容或优化数据传输路径。