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 天滑动窗口内误差预算的消耗与恢复过程:

误差预算消耗与重置机制(30天滑动窗口) Day 0 Day 7 Day 15 Day 22 Day 30 预算总额(43.2 min) 故障1(8 min) 故障2(15 min) 预算恢复期 旧故障数据随时间移出滑动窗口 → 预算自动恢复(无需手动重置)

2.5 误差预算作为风险量化工具的价值

误差预算将“风险”从定性描述转化为定量指标,为 SRE 和研发团队提供统一的决策语言:

应用场景 传统做法 误差预算驱动
发布决策 人工判断“风险高/低” 预算充足 → 允许发布;预算耗尽 → 冻结变更
故障优先级 凭经验定 P0/P1 按预算消耗速率动态调整优先级
容量规划 基于峰值预测 基于预算消耗趋势预测扩容时机
MTTR 复盘 固定复盘周期 预算消耗超过阈值 → 触发复盘
团队考核 考核“可用性百分比” 考核“预算消耗效率”和“预算恢复速度”
核心价值:误差预算让 SRE 从“救火队”转变为“风险管理者”。团队不再追求 100% 可用性(成本无限高),而是在预算约束下最大化业务迭代速度。

2.6 误差预算驱动的决策框架

下图展示了误差预算如何连接 SLO 监控、发布决策和 MTTR 复盘:

误差预算驱动的风险决策框架 误差预算 SLO 合规率监控 故障时长统计 发布决策 MTTR 复盘触发 容量/预算规划 核心逻辑:预算充足 → 允许变更/发布;预算耗尽 → 冻结变更 + 触发 MTTR 复盘 + 启动容量评估

2.7 误差预算的工程落地要点

  • 窗口选择:推荐 28 天或 30 天滑动窗口,避免固定日历月带来的边界效应。
  • 粒度控制:按服务/API 维度独立计算预算,避免“一个服务拖垮全局”。
  • 告警阈值:设置预算消耗率告警(如 50%/75%/90%),预留响应时间。
  • 自动化联动:预算耗尽时自动阻断发布流水线,触发复盘工单。
  • 可视化看板:实时展示预算消耗曲线、剩余预算、消耗速率趋势。
最佳实践:将误差预算消耗率作为 MTTR 复盘口径动态调整的核心输入。当预算消耗速率超过历史 P90 时,自动缩短复盘周期;当预算充足时,允许团队聚焦长期改进而非短期救火。