2. Error Budget 的数学定义

Error Budget(错误预算)是 SLO 工程实践的核心量化工具。它把抽象的“系统可靠性”转化为一个可消耗、可追踪的数值指标,让团队能够基于数据而非直觉来决策:什么时候应该停止发布、全力修复稳定性,什么时候可以继续交付新功能。

2.1 基于可用性 SLO 的 Error Budget 计算公式

对于最常见的可用性(Availability)SLO,Error Budget 的定义非常简洁:

Error Budget = 1 − SLO

即:在给定的时间窗口内,系统允许的最大不可用时间比例。

例如:

  • SLO = 99.9% → Error Budget = 0.1% → 每月允许约 43 分 12 秒 的不可用时间。
  • SLO = 99.99% → Error Budget = 0.01% → 每月允许约 4 分 19 秒 的不可用时间。
  • SLO = 99.999% → Error Budget = 0.001% → 每月允许约 26 秒 的不可用时间。
SLO 目标 Error Budget(1 − SLO) 每月允许不可用时间 每周允许不可用时间
99.9% 0.1% 43 分 12 秒 10 分 4 秒
99.95% 0.05% 21 分 36 秒 5 分 2 秒
99.99% 0.01% 4 分 19 秒 1 分 0 秒
99.999% 0.001% 26 秒 6 秒

关键理解:Error Budget 不是“预留的故障额度”,而是可消耗的可靠性资本。只要消耗未超限,团队可以自由决定是用于发布新功能,还是用于提升系统韧性。

2.2 时间窗口的选择:滚动窗口 vs 固定窗口

Error Budget 的计算必须依附于一个时间窗口。窗口的选择直接影响预算的消耗速度、恢复行为以及告警灵敏度。主流方案有两种:滚动窗口(Sliding Window) 和 固定窗口(Fixed Window / Calendar Window)。

2.2.1 滚动窗口(Sliding Window)

窗口持续向前移动,始终包含最近 N 分钟/小时/天的数据。例如一个 30 天滚动窗口,在 1 月 15 日 12:00 时,窗口覆盖 12 月 16 日 12:00 至 1 月 15 日 12:00 的数据。

  • 优点:平滑、无边界突变;故障影响会随着时间自然衰减;适合自动化自愈触发。
  • 缺点:计算成本较高;需要持续维护窗口状态;对历史数据存储有要求。
  • 典型场景:SRE 自愈系统、自动化发布门禁、实时仪表盘。

2.2.2 固定窗口(Fixed Window / Calendar Window)

窗口按日历周期(自然月、自然周)对齐。例如每月 1 日 00:00 重置 Error Budget,到月末最后一天 23:59 截止。

  • 优点:计算简单、易于理解;与财务/业务周期对齐;适合月度复盘和报告。
  • 缺点:窗口边界处存在“预算重置”突变;月初可能大量消耗,月末可能浪费;不适合实时自愈决策。
  • 典型场景:月度 SLA 报告、商业合同对账、非实时告警。
对比维度 滚动窗口 固定窗口
窗口定义 最近 N 时间单位(如 30 天) 自然日历周期(如 1 月 1 日−31 日)
预算重置 无重置,旧数据逐渐移出窗口 窗口结束时预算归零,新窗口重新开始
对故障的响应 故障影响随时间平滑衰减 故障影响持续到窗口结束
计算复杂度 较高(需维护滑动状态) 较低(按周期聚合即可)
适合自愈触发 ✅ 非常适合 ❌ 不适合(边界突变)
适合商业报告 ❌ 不适合(与日历不对齐) ✅ 非常适合

常见误区:不要将固定窗口的 Error Budget 直接用于自动化自愈阈值。固定窗口在月初/周初预算充足时可能掩盖严重故障,而在月末/周末预算紧张时又可能触发不必要的自愈动作。自愈系统应优先采用滚动窗口。

2.3 滚动窗口 Error Budget 消耗示意图

下图展示了一个 30 天滚动窗口下,Error Budget 随时间的消耗与恢复过程。窗口持续向前移动,故障事件(红色区域)进入窗口后开始消耗预算,随着时间推移,旧故障数据逐渐移出窗口,预算自动恢复。

滚动窗口 Error Budget 消耗示意图 滚动窗口 Error Budget 消耗与恢复(30天窗口) Day 0 Day 7 Day 14 Day 21 Day 28 Day 30 当前 30 天滚动窗口 故障 A 故障 B 故障 C 预算恢复 预算恢复 预算充足 预算消耗 预算耗尽 红色区域 = 故障消耗预算 绿色虚线 = 预算充足线

2.4 固定窗口 Error Budget 消耗示意图

下图展示固定窗口(自然月)下的 Error Budget 消耗模式。月初预算重置为 100%,故障消耗后不会自动恢复,直到月末窗口结束才重新计算。

固定窗口 Error Budget 消耗示意图 固定窗口 Error Budget 消耗模式(自然月) 月初 第 1 周 第 2 周 第 3 周 第 4 周 月末 固定窗口(自然月) 故障 1 故障 2 故障 3 故障 4 故障 5 月末重置 → 预算归零 100% 50% 0% 预算只降不升,月末重置 故障影响持续到窗口结束

2.5 选择建议:自愈场景优先滚动窗口

在《Error Budget 消耗模型:指导 SLO 自愈阈值设定》课程中,我们后续章节将重点基于滚动窗口构建自愈触发模型。原因如下:

  • 自愈系统需要连续感知:滚动窗口能反映系统“当前”的真实健康状态,而非受日历边界影响。
  • 预算恢复行为自然:故障影响随时间衰减,符合“过去的问题不应永久惩罚未来”的运维哲学。
  • 避免边界效应:固定窗口在重置时刻可能导致自愈策略的误判(如月末预算耗尽触发自愈,但月初立即恢复)。

核心公式总结:

Error Budget = 1 − SLO

滚动窗口消耗率 = 窗口内总错误时间 / 窗口总时间

自愈触发条件:Error Budget 消耗率 ≥ 自愈阈值(如 70%)