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 = (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% 作为起点。
1.3 Error Budget 的消耗与重置机制
Error Budget 的消耗与重置遵循 滚动窗口 + 实时累积 模型,而非固定周期重置。这是 SRE 区别于传统“每月重置”运维模式的关键特征。
消耗规则
- SLI 违约事件: 任何导致 SLI 低于 SLO 阈值的请求或时间片均计入消耗。例如:延迟超过 P99 阈值、HTTP 500 错误、超时等。
- 消耗粒度: 通常以秒或请求数为单位。对于高 QPS 服务,单次故障可能瞬间消耗大量 Budget。
- 多维度叠加: 若服务定义了多个 SLI(如可用性 + 延迟 + 吞吐),每个 SLI 独立计算 Budget,取消耗最快者作为全局告警依据。
重置机制
Error Budget 不存在“每月 1 日归零”的硬重置。其重置是 隐式滚动 的:
- 系统维护一个固定长度(如 30 天)的滑动时间窗口。
- 每过去一秒,窗口最旧的一秒数据被移出,最新一秒数据加入。
- 若过去 30 天内的总失效时间重新低于 Error Budget 上限,则 Budget 自动“恢复”。
常见误区: Error Budget 不是“每月充值”的配额。即使月初无故障,Budget 也不会自动增加;只有时间窗口滚动、旧故障数据过期后,可用 Budget 才会回升。因此,一次大规模故障可能导致连续数周处于 Budget 耗尽状态。
1.4 实际应用中的 Budget 管理策略
| Budget 状态 | 剩余比例 | 团队行动 | 变更窗口 |
|---|---|---|---|
| 充足 | > 50% | 正常迭代、灰度发布 | 开放 |
| 警告 | 20% ~ 50% | 限制高风险变更、加强监控 | 受限 |
| 危险 | 5% ~ 20% | 仅允许紧急修复、启动 War Room | 关闭 |
| 耗尽 | < 5% 或为 0 | 冻结所有变更、全量回滚、根因分析 | 关闭 |