2. 误差预算原理
误差预算(Error Budget)是 SRE 实践中最具操作性的量化工具。它将抽象的可靠性目标转化为可消耗、可追踪、可决策的“预算额度”,让团队在稳定性与迭代速度之间做出理性权衡。
2.1 误差预算定义
误差预算 = 1 − SLO 目标值。它代表服务在 SLO 时间窗口内允许的最大不可用比例。
| SLO 目标 | 误差预算(30天窗口) | 含义 |
|---|---|---|
| 99.9% | 0.1%(约 43.2 分钟) | 每月最多允许 43 分钟不可用 |
| 99.99% | 0.01%(约 4.32 分钟) | 每月最多允许 4 分钟不可用 |
| 99.999% | 0.001%(约 25.9 秒) | 每月最多允许 26 秒不可用 |
关键认知:误差预算不是“失败配额”,而是“风险预算”。只要预算未耗尽,团队可以自由选择如何“消费”它——包括发布有风险的新功能。
2.2 误差预算计算方式
误差预算的计算基于 SLO 合规率。以月度滑动窗口为例:
误差预算总额 = 总时间窗口 × (1 − SLO 目标)
已消耗预算 = 总时间窗口 × (1 − 实际可用性)
剩余预算 = 误差预算总额 − 已消耗预算
实际案例(30天窗口,SLO=99.9%):
总时间窗口 = 30 × 24 × 60 = 43,200 分钟
误差预算总额 = 43,200 × 0.001 = 43.2 分钟
假设本月已发生 20 分钟故障:
已消耗预算 = 20 分钟
剩余预算 = 43.2 − 20 = 23.2 分钟
预算消耗率 = 20 / 43.2 ≈ 46.3%
2.3 误差预算消耗与重置机制
误差预算的消耗和重置遵循严格的滑动窗口规则:
- 消耗触发:任何导致 SLO 未达标的事件(延迟、错误、超时)都会消耗预算。消耗量 = 未达标请求数 × 请求权重。
- 消耗速率:突发故障会快速消耗预算;持续低水平错误则缓慢消耗。
- 重置方式:采用滑动窗口机制,旧数据随时间推移自动移出窗口,预算逐步恢复。
- 重置周期:通常为 28 天或 30 天滑动窗口,非固定日历月。
常见误区:误差预算不会在每月 1 日“归零重置”。它是滑动窗口,旧故障数据过期后预算自然恢复。固定日历月重置会导致月初大量发布、月末不敢变更的“踩踏效应”。
2.4 误差预算消耗与重置可视化
下图展示了一个 30 天滑动窗口内误差预算的消耗与恢复过程:
2.5 误差预算作为风险量化工具的价值
误差预算将“风险”从定性描述转化为定量指标,为 SRE 和研发团队提供统一的决策语言:
| 应用场景 | 传统做法 | 误差预算驱动 |
|---|---|---|
| 发布决策 | 人工判断“风险高/低” | 预算充足 → 允许发布;预算耗尽 → 冻结变更 |
| 故障优先级 | 凭经验定 P0/P1 | 按预算消耗速率动态调整优先级 |
| 容量规划 | 基于峰值预测 | 基于预算消耗趋势预测扩容时机 |
| MTTR 复盘 | 固定复盘周期 | 预算消耗超过阈值 → 触发复盘 |
| 团队考核 | 考核“可用性百分比” | 考核“预算消耗效率”和“预算恢复速度” |
核心价值:误差预算让 SRE 从“救火队”转变为“风险管理者”。团队不再追求 100% 可用性(成本无限高),而是在预算约束下最大化业务迭代速度。
2.6 误差预算驱动的决策框架
下图展示了误差预算如何连接 SLO 监控、发布决策和 MTTR 复盘:
2.7 误差预算的工程落地要点
- 窗口选择:推荐 28 天或 30 天滑动窗口,避免固定日历月带来的边界效应。
- 粒度控制:按服务/API 维度独立计算预算,避免“一个服务拖垮全局”。
- 告警阈值:设置预算消耗率告警(如 50%/75%/90%),预留响应时间。
- 自动化联动:预算耗尽时自动阻断发布流水线,触发复盘工单。
- 可视化看板:实时展示预算消耗曲线、剩余预算、消耗速率趋势。
最佳实践:将误差预算消耗率作为 MTTR 复盘口径动态调整的核心输入。当预算消耗速率超过历史 P90 时,自动缩短复盘周期;当预算充足时,允许团队聚焦长期改进而非短期救火。