2. SLO基础
在发布工程中,质量门禁不能依赖“感觉”或“经验”,必须由可量化的指标驱动。服务等级目标(SLO)正是这套量化体系的基石。本章将拆解 SLO 的定义、SLI 与 SLO 的映射关系,以及错误预算如何成为阻断低质量发布的数学依据。
2.1 服务等级指标(SLI)与服务等级目标(SLO)
SLI(Service Level Indicator) 是经过良好定义的、可测量的服务质量指标。常见的 SLI 包括请求延迟、错误率、吞吐量、饱和度等。SLO(Service Level Objective) 则是为 SLI 设定的目标阈值或范围,代表“用户可接受的服务质量下限”。
核心公式: SLO = SLI 的预期目标值(例如:99.9% 的请求在 200ms 内完成)。
SLI 与 SLO 的关系可以概括为:SLI 是“测量什么”,SLO 是“目标是多少”。没有 SLI,SLO 就是空谈;没有 SLO,SLI 就缺乏评判标准。
| 维度 | SLI(服务等级指标) | SLO(服务等级目标) |
|---|---|---|
| 定义 | 可测量的服务质量原始数据 | 基于 SLI 设定的目标阈值 |
| 示例 | P99 延迟 = 180ms | P99 延迟 ≤ 200ms |
| 粒度 | 原始时间序列数据(每秒/每分钟) | 滚动窗口内的合规比例(如 30 天) |
| 用途 | 监控、告警、趋势分析 | 质量门禁、错误预算计算、发布决策 |
| 变化频率 | 实时变化 | 相对稳定,按季度/版本评审 |
实践建议: 在发布工程中,建议为每个关键用户旅程(如“登录”、“下单”)定义 1-2 个核心 SLI,并设定对应的 SLO。过多的 SLO 会导致门禁过于敏感,过少则可能遗漏关键质量维度。
2.2 SLI 到 SLO 的映射流程
从原始指标到可执行的门禁目标,需要经过一个标准化的映射流程。下图展示了 SLI 采集、聚合、目标设定到门禁应用的完整链路。
2.3 错误预算的核心原理
错误预算(Error Budget) 是 SLO 的衍生概念,它量化了服务在给定时间窗口内“允许失败”的总量。其核心公式为:
错误预算 = 1 - SLO(以小数表示)
例如:SLO = 99.9% → 错误预算 = 0.1% 的总时间或请求量
错误预算的消耗速度直接决定了发布是否应该被阻断。当错误预算消耗过快(接近或超过阈值)时,发布工程平台应自动触发门禁,阻止任何可能进一步消耗预算的变更。
关键认知: 错误预算不是“可以随意浪费的额度”,而是“风险容量的上限”。在发布工程中,错误预算的剩余量决定了发布的“风险预算”。剩余越多,发布越激进;剩余越少,发布越保守。
2.4 错误预算驱动的发布决策模型
下表展示了不同错误预算剩余状态下,发布工程自助门户应采取的默认策略:
| 错误预算剩余 | 风险等级 | 发布策略 | 门禁行为 |
|---|---|---|---|
| > 50% | 低风险 | 正常发布,可执行金丝雀+自动晋升 | 仅基础检查(编译/单元测试) |
| 20% - 50% | 中风险 | 谨慎发布,金丝雀时间延长 2x | 触发 SLI 实时对比门禁 |
| 5% - 20% | 高风险 | 仅允许紧急修复(hotfix) | 需要 SRE 手动审批 + 全量 SLI 检查 |
| < 5% | 严重 | 冻结所有发布 | 自动阻断,仅允许回滚操作 |
下图展示了错误预算的消耗与恢复周期,以及门禁在不同阶段的介入点:
2.5 错误预算的恢复机制
错误预算并非只减不增。在滚动时间窗口(通常为 30 天)内,随着时间推移,旧的失败记录会逐渐移出窗口,从而恢复预算。理解这一点对于设计门禁策略至关重要:
- 滚动窗口恢复: 默认使用 30 天滑动窗口,每天移出第 31 天的数据,移入当天数据。
- 主动恢复: 通过回滚有问题的发布、扩容、优化代码等方式降低失败率,加速预算恢复。
- 门禁自愈: 当错误预算恢复到安全阈值(如 > 50%)以上时,门禁应自动解除阻断状态,允许正常发布流程继续。
发布工程最佳实践: 错误预算的恢复不应被视为“可以继续犯错”的信号。建议在门禁设计中加入“冷却期”(Cool-down Period),即使预算恢复,也至少等待 1 小时才能执行下一次发布,避免频繁触发门禁导致发布流水线震荡。