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 随时间的消耗与恢复过程。窗口持续向前移动,故障事件(红色区域)进入窗口后开始消耗预算,随着时间推移,旧故障数据逐渐移出窗口,预算自动恢复。
2.4 固定窗口 Error Budget 消耗示意图
下图展示固定窗口(自然月)下的 Error Budget 消耗模式。月初预算重置为 100%,故障消耗后不会自动恢复,直到月末窗口结束才重新计算。
2.5 选择建议:自愈场景优先滚动窗口
在《Error Budget 消耗模型:指导 SLO 自愈阈值设定》课程中,我们后续章节将重点基于滚动窗口构建自愈触发模型。原因如下:
- 自愈系统需要连续感知:滚动窗口能反映系统“当前”的真实健康状态,而非受日历边界影响。
- 预算恢复行为自然:故障影响随时间衰减,符合“过去的问题不应永久惩罚未来”的运维哲学。
- 避免边界效应:固定窗口在重置时刻可能导致自愈策略的误判(如月末预算耗尽触发自愈,但月初立即恢复)。
核心公式总结:
Error Budget = 1 − SLO
滚动窗口消耗率 = 窗口内总错误时间 / 窗口总时间
自愈触发条件:Error Budget 消耗率 ≥ 自愈阈值(如 70%)