3. 预算(Budget)概念:错误预算的定义、计算方式、消耗与补充机制

错误预算是 SLO 体系中最具操作性的量化工具。它将抽象的可用性目标转化为可消耗、可补充的“预算额度”,让运维团队能够像管理财务预算一样管理服务的可靠性风险。理解错误预算的定义、计算、消耗与补充机制,是执行预算复核的前提。

3.1 错误预算的定义

错误预算(Error Budget)是指在 SLO 时间窗口内,服务允许发生故障或性能降级的总时间(或总事件数)。其核心思想是:100% 可用性不是目标,而是约束。错误预算为服务提供了“犯错”的空间,使得发布新功能、进行基础设施变更等风险操作成为可能。

概念 定义 示例(99.9% SLO,30天窗口)
SLO 目标 服务承诺的可用性百分比 99.9%
不可用性预算 100% - SLO 目标 0.1%
错误预算 时间窗口总时长 × 不可用性预算 30天 × 24小时 × 60分钟 × 0.1% = 43.2 分钟
关键认知:错误预算不是“允许失败的额度”,而是“风险操作的燃料”。当预算充足时,团队可以加速发布;当预算耗尽时,必须暂停变更,优先恢复可靠性。

3.2 错误预算的计算方式

错误预算的计算基于两个核心参数:SLO 目标和合规时间窗口。计算公式如下:

错误预算 = 时间窗口总时长 × (1 - SLO 目标)

其中:
- 时间窗口总时长:通常为 7天(滚动)、30天(滚动)或 28天(日历月)
- SLO 目标:以小数表示,例如 99.9% 对应 0.999
- 结果单位:与时间窗口单位一致(秒、分钟、小时)

实际计算示例(30天窗口,99.95% SLO):

总秒数 = 30 × 24 × 3600 = 2,592,000 秒
不可用性预算 = 1 - 0.9995 = 0.0005
错误预算 = 2,592,000 × 0.0005 = 1,296 秒 = 21.6 分钟

对于基于请求计数的 SLO(如 99.9% 请求成功),错误预算以事件数表示:

错误预算(事件数)= 总请求数 × (1 - SLO 目标)

示例:窗口内总请求 10,000,000,SLO 99.9%
错误预算 = 10,000,000 × 0.001 = 10,000 个错误请求

3.3 错误预算的消耗机制

错误预算的消耗是持续且累积的。每一次不符合 SLO 的事件都会消耗预算。消耗速率直接反映服务的健康状态。

错误预算消耗与补充机制 初始错误预算 43.2 分钟 (30天窗口,99.9% SLO) 消耗 故障/延迟 5xx错误、超时 性能降级 高延迟、慢响应 剩余 剩余预算 动态变化 可消耗额度 补充机制:时间窗口滚动重置 每经过一个完整窗口周期,错误预算自动恢复至初始值 窗口滚动 → 预算重置

消耗速率的关键影响因素:

  • 故障持续时间:每次中断持续的时间越长,消耗的预算越多。
  • 故障影响范围:影响所有用户的故障比影响部分用户的故障消耗更快。
  • SLO 严格程度:99.99% 的 SLO 比 99.9% 的预算更少,消耗速率更敏感。
  • 窗口剩余时间:窗口初期消耗预算对后续操作空间影响更大。

3.4 错误预算的补充机制

错误预算的补充是时间驱动的自动重置,而非手动操作。其核心规则如下:

窗口类型 补充方式 特点
滚动窗口(Sliding Window) 每过去一秒,窗口向前滑动一秒,最旧的一秒数据被丢弃,最新的一秒数据加入计算 预算平滑补充,无“月初/月末”效应;推荐用于生产环境
固定窗口(Calendar Window) 在每个固定周期(如每月1日)结束时,预算重置为初始值 预算在周期末可能突增;适合与业务周期对齐的场景
滚动窗口补充示例:假设 7 天滚动窗口,当前时间 T。错误预算 = 过去 7 天内允许的故障时间 - 过去 7 天内实际发生的故障时间。当时间推进到 T+1 秒时,窗口丢弃 T-7 天的那一秒数据,纳入 T+1 秒的新数据。如果新数据无故障,预算自动增加(补充);如果有故障,预算继续消耗。

3.5 消耗速率与预算耗尽预警

监控错误预算的消耗速率比监控值更重要。通过消耗速率可以预测预算何时耗尽,从而提前干预。

消耗速率 = 已消耗预算 / 窗口已过时间

预算耗尽时间预测 = 剩余预算 / 当前消耗速率

示例:
- 窗口总预算:43.2 分钟
- 窗口已过:10 天(240小时)
- 已消耗:20 分钟
- 消耗速率:20分钟 / 240小时 = 0.083 分钟/小时
- 剩余预算:23.2 分钟
- 预测耗尽时间:23.2 / 0.083 ≈ 279 小时 ≈ 11.6 天
- 窗口剩余时间:20 天
- 结论:按当前速率,预算将在窗口结束前耗尽,需要立即干预
预算复核关键指标:在预算复核流程中,不仅要检查当前剩余预算,更要计算预算燃烧率(Burn Rate)。燃烧率 = 实际消耗速率 / 理想消耗速率。当燃烧率 > 1 时,表示预算消耗过快,服务面临 SLO 违约风险。

3.6 错误预算状态与决策矩阵

根据剩余预算比例和消耗趋势,可以将错误预算状态分为三个区域,每个区域对应不同的运维策略:

状态区域 剩余预算比例 允许的操作 建议措施
绿色(健康) > 50% 正常发布、变更、实验 常规监控,无需特殊干预
黄色(警戒) 20% - 50% 仅允许低风险变更 审查消耗趋势,准备回滚方案
红色(危险) < 20% 冻结所有变更,仅允许故障修复 立即启动应急响应,排查根因
错误预算状态决策流程 当前剩余预算 剩余比例判断 绿色 > 50% 正常发布 黄色 20%-50% 低风险变更 红色 < 20% 冻结变更 预算复核触发条件:进入黄色或红色区域时,必须执行预算复核流程

3.7 预算复核中的常见误区

  • 误区一:认为预算耗尽等于服务宕机。 事实:预算耗尽意味着 SLO 违约风险极高,但服务可能仍在运行;此时应暂停变更,而非直接关停服务。
  • 误区二:忽略窗口滚动效应。 事实:滚动窗口下,预算补充是连续的;固定窗口下,预算可能在月初突增,导致月初大量发布而月中无预算可用。
  • 误区三:只关注剩余预算值。 事实:消耗速率和燃烧率比值更能反映趋势;剩余 10 分钟但窗口还剩 1 天,与剩余 10 分钟但窗口还剩 20 天,风险完全不同。
  • 误区四:错误预算与 SLI 脱节。 事实:错误预算的计算必须基于准确的 SLI 数据;如果 SLI 采集有偏差,错误预算将失去参考价值。
实战建议:在 SLO Operator 中配置错误预算告警时,建议设置三个级别的告警阈值:
1. 燃烧率 > 2 持续 1 小时 → Warning
2. 燃烧率 > 4 持续 30 分钟 → Critical
3. 剩余预算 < 10% → Page 值班人员
这些阈值应在预算复核流程中定期验证和调整。