4. 验收标准:混沌实验通过/失败判定标准、SLO/SLI与基线的关系
混沌实验的验收不是“实验没报错”或“系统没挂”这种二元结果,而是需要一套可量化的判定体系。本章聚焦三个核心问题:如何定义实验通过/失败、SLO/SLI 如何作为判定依据、基线数据在其中的锚定作用。
4.1 混沌实验通过/失败判定标准
判定标准必须前置定义,在实验设计阶段就写入实验计划。标准分为三个层级:
| 层级 | 判定维度 | 通过条件 | 失败条件 |
|---|---|---|---|
| L1 原子级 | 实验注入是否生效 | 目标资源故障注入成功(如 CPU 打满、网络延迟注入) | 注入失败、注入未命中目标、注入范围错误 |
| L2 服务级 | 业务指标是否在 SLO 范围内 | 实验期间 SLI 均未突破 SLO 阈值 | 任意 SLI 超出 SLO 阈值,或触发告警/降级/熔断 |
| L3 基线级 | 恢复后是否回归基线 | 实验结束后 5 分钟内所有 SLI 恢复至基线 ±5% 区间 | 恢复后指标偏离基线超过 5%,或出现残留异常 |
实践建议:L1 是前置条件,L1 失败则实验无效,直接标记为“无效实验”而非“失败”。只有 L1 通过后,才进入 L2 和 L3 的判定。
4.2 SLO/SLI 与基线的关系模型
SLO(服务等级目标)、SLI(服务等级指标)和基线三者构成混沌实验的度量三角:
- SLI:可测量的原始指标,如 P99 延迟、错误率、吞吐量。
- SLO:SLI 的目标边界,如“P99 延迟 ≤ 200ms”。
- 基线:正常生产环境下的 SLI 统计分布,通常取过去 7~30 天的 P50/P95/P99 值。
三者关系可概括为:基线定义“正常”,SLO 定义“可接受”,SLI 定义“当前状态”。混沌实验的通过/失败,本质是验证“当前状态”在故障注入后是否仍在“可接受”范围内,且恢复后能回到“正常”区间。
关键公式:
实验通过 = (SLI实验期间 ≤ SLO阈值) ∧ (SLI恢复后 ∈ 基线区间)
实验通过 = (SLI实验期间 ≤ SLO阈值) ∧ (SLI恢复后 ∈ 基线区间)
4.3 基线验收的三种典型场景
在实际 GameDay 联动中,基线验收会呈现三种典型结果:
| 场景 | 实验期间 SLI | 恢复后 SLI | 判定结果 | 后续动作 |
|---|---|---|---|---|
| 完全通过 | 未突破 SLO | 回归基线 ±5% | 通过 ✅ | 更新混沌实验报告,归档基线 |
| 部分通过 | 未突破 SLO | 偏离基线 5%~15% | 有条件通过 ⚠️ | 标记为“需观察”,触发自动回滚或人工确认 |
| 不通过 | 突破 SLO | 偏离基线 >15% 或未恢复 | 失败 ❌ | 立即停止实验,触发应急响应,修复后重新验收 |
注意:“部分通过”场景最容易引发争议。建议在实验计划中提前定义“有条件通过”的容忍窗口(如 5 分钟),超过窗口仍未回归基线则自动转为“不通过”。
4.4 基线漂移与动态基线
基线不是一成不变的。生产环境会因发布、流量变化、基础设施调整而发生基线漂移。混沌实验的验收标准必须考虑基线时效性:
- 静态基线:取固定时间窗口(如版本发布前 7 天),适合版本级验收。
- 动态基线:取滚动窗口(如过去 24 小时),适合持续混沌实验。
- 季节性基线:按业务周期(如工作日 vs 周末、促销期 vs 平峰期)分别建立基线。
推荐在混沌实验计划中明确标注基线来源和基线有效期,避免因基线过期导致误判。
4.5 验收报告关键字段
每次混沌实验的验收结果应记录以下字段,便于后续审计和基线回溯:
实验ID: CHAOS-2025-04-001
目标服务: user-service
注入类型: 网络延迟 500ms
实验时长: 15 分钟
基线窗口: 2025-03-25 ~ 2025-03-31 (7天)
SLO阈值: P99延迟 ≤ 200ms
实验期间 P99: 180ms → 通过
恢复后 P99: 145ms (基线 P99: 140ms) → 偏差 3.6% → 通过
最终判定: ✅ 通过
备注: 恢复后偏差在基线 ±5% 范围内,无需人工干预
自动化建议:将验收判定逻辑编码为自动化脚本,在实验结束后自动比对 SLI、SLO 和基线,生成判定结果并写入混沌实验平台。人工只需审核“有条件通过”和“不通过”的案例。