1. Error Budget 概念

Error Budget(错误预算)是 SRE 实践中的核心量化管理工具,它将系统可靠性从“尽可能高”的模糊目标转化为可度量、可消耗、可告警的工程指标。理解 Error Budget 的前提是掌握 SLO(Service Level Objective,服务等级目标)与 SLI(Service Level Indicator,服务等级指标)的关系。

1.1 什么是 Error Budget

Error Budget 定义为 1 − SLO 所对应的可容忍失效时间或失效次数。例如,若某服务的 SLO 为 99.9%(三个九),则 Error Budget 为 0.1% 的时间窗口。在一个 30 天的滚动窗口内,该服务最多允许约 43.2 分钟的不可用或错误响应。

核心公式:
Error Budget = (1 − SLO) × 时间窗口
示例:SLO = 99.9%,30 天窗口 → Error Budget = 0.001 × 30 × 24 × 60 = 43.2 分钟

Error Budget 的本质是 风险配额。它承认系统不可能 100% 可靠,并为计划内变更、发布、维护等操作预留了可消耗的“失效额度”。团队可以在 Budget 未耗尽时大胆部署新功能,一旦 Budget 接近耗尽则必须暂停变更、优先恢复稳定性。

1.2 SLO 与 Error Budget 的关系

SLO 是 Error Budget 的基准线,Error Budget 是 SLO 的逆向映射。两者构成闭环管理模型:

维度 SLO(服务等级目标) Error Budget(错误预算)
定义 承诺的可靠性目标(如 99.9%) 允许的失效配额(如 43.2 分钟/月)
方向 正向指标,越高越好 逆向指标,消耗越少越好
用途 对外 SLA 承诺、产品定位 对内变更决策、故障响应优先级
触发动作 未达标 → 升级告警、复盘 耗尽 → 冻结变更、启动应急
时间窗口 通常为滚动 30 天或 28 天 与 SLO 窗口一致
实践要点: SLO 不应设置过高(如 99.999%),否则 Error Budget 过小(每月仅 26 秒),团队将因频繁触发变更冻结而丧失迭代速度。建议根据业务容忍度选择 99.9% ~ 99.99% 作为起点。
SLO 与 Error Budget 关系图 SLO 与 Error Budget 关系 滚动时间窗口(30 天) 总时间 = 100% Error Budget = 1 − SLO(例如 0.1%) 已消耗 Budget 剩余 Budget 关键理解: • SLO 越高,Error Budget 越小,变更风险窗口越窄。 • Error Budget 未耗尽时,变更速度优先;接近耗尽时,稳定性优先。

1.3 Error Budget 的消耗与重置机制

Error Budget 的消耗与重置遵循 滚动窗口 + 实时累积 模型,而非固定周期重置。这是 SRE 区别于传统“每月重置”运维模式的关键特征。

消耗规则

  • SLI 违约事件: 任何导致 SLI 低于 SLO 阈值的请求或时间片均计入消耗。例如:延迟超过 P99 阈值、HTTP 500 错误、超时等。
  • 消耗粒度: 通常以秒或请求数为单位。对于高 QPS 服务,单次故障可能瞬间消耗大量 Budget。
  • 多维度叠加: 若服务定义了多个 SLI(如可用性 + 延迟 + 吞吐),每个 SLI 独立计算 Budget,取消耗最快者作为全局告警依据。

重置机制

Error Budget 不存在“每月 1 日归零”的硬重置。其重置是 隐式滚动 的:

  1. 系统维护一个固定长度(如 30 天)的滑动时间窗口。
  2. 每过去一秒,窗口最旧的一秒数据被移出,最新一秒数据加入。
  3. 若过去 30 天内的总失效时间重新低于 Error Budget 上限,则 Budget 自动“恢复”。
常见误区: Error Budget 不是“每月充值”的配额。即使月初无故障,Budget 也不会自动增加;只有时间窗口滚动、旧故障数据过期后,可用 Budget 才会回升。因此,一次大规模故障可能导致连续数周处于 Budget 耗尽状态。
Error Budget 消耗与滚动重置流程 Error Budget 消耗与滚动重置流程 滚动时间轴(30 天窗口) 正常运营 故障事件 Budget 消耗 Budget 耗尽 窗口滚动 → 旧故障过期 Budget 自动恢复 滚动重置要点: • 无固定重置日期,依赖滑动窗口自动过期。 • 故障发生后,需等待完整窗口期(如 30 天)才能完全恢复 Budget。 • 多故障叠加时,Budget 恢复速度取决于最早故障的过期时间。

1.4 实际应用中的 Budget 管理策略

Budget 状态 剩余比例 团队行动 变更窗口
充足 > 50% 正常迭代、灰度发布 开放
警告 20% ~ 50% 限制高风险变更、加强监控 受限
危险 5% ~ 20% 仅允许紧急修复、启动 War Room 关闭
耗尽 < 5% 或为 0 冻结所有变更、全量回滚、根因分析 关闭