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 的事件都会消耗预算。消耗速率直接反映服务的健康状态。
消耗速率的关键影响因素:
- 故障持续时间:每次中断持续的时间越长,消耗的预算越多。
- 故障影响范围:影响所有用户的故障比影响部分用户的故障消耗更快。
- 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% | 冻结所有变更,仅允许故障修复 | 立即启动应急响应,排查根因 |
3.7 预算复核中的常见误区
- 误区一:认为预算耗尽等于服务宕机。 事实:预算耗尽意味着 SLO 违约风险极高,但服务可能仍在运行;此时应暂停变更,而非直接关停服务。
- 误区二:忽略窗口滚动效应。 事实:滚动窗口下,预算补充是连续的;固定窗口下,预算可能在月初突增,导致月初大量发布而月中无预算可用。
- 误区三:只关注剩余预算值。 事实:消耗速率和燃烧率比值更能反映趋势;剩余 10 分钟但窗口还剩 1 天,与剩余 10 分钟但窗口还剩 20 天,风险完全不同。
- 误区四:错误预算与 SLI 脱节。 事实:错误预算的计算必须基于准确的 SLI 数据;如果 SLI 采集有偏差,错误预算将失去参考价值。
实战建议:在 SLO Operator 中配置错误预算告警时,建议设置三个级别的告警阈值:
1. 燃烧率 > 2 持续 1 小时 → Warning
2. 燃烧率 > 4 持续 30 分钟 → Critical
3. 剩余预算 < 10% → Page 值班人员
这些阈值应在预算复核流程中定期验证和调整。
1. 燃烧率 > 2 持续 1 小时 → Warning
2. 燃烧率 > 4 持续 30 分钟 → Critical
3. 剩余预算 < 10% → Page 值班人员
这些阈值应在预算复核流程中定期验证和调整。