4. Error Budget 基础概念:定义、计算公式、消耗与补充机制
Error Budget(错误预算)是 SRE 实践中的核心量化工具,它将系统可靠性从“尽可能高”的模糊目标转化为可度量、可交易、可决策的工程指标。理解 Error Budget 的定义、计算、消耗与补充机制,是实施质量门禁与 SLI 口径治理的前提。
4.1 Error Budget 的定义
Error Budget 是服务所有者在一个时间窗口内(通常为 28 天或 30 天)允许系统发生故障或性能降级的最大累积时间(或事件次数)。它本质上是 100% 与 SLO 目标之间的差值 所对应的“可容忍错误量”。
核心思想: 没有服务能达到 100% 的完美可靠性。Error Budget 将剩余的“不完美空间”显式地分配给开发团队,用于发布新功能、进行基础设施变更,而无需担心触发告警或问责。
| 概念 | 说明 | 示例(99.9% SLO) |
|---|---|---|
| SLO 目标 | 承诺给用户的可靠性下限 | 99.9% 可用 |
| 允许错误率 | 1 - SLO 目标 | 0.1% |
| Error Budget | 时间窗口内允许的最大错误量 | 30 天 × 1440 分钟 × 0.1% = 43.2 分钟 |
4.2 Error Budget 计算公式
Error Budget 的计算基于 SLO 目标与时间窗口。标准公式如下:
Error Budget = 总时间窗口长度 × (1 - SLO 目标)
其中:
- 总时间窗口长度:通常为 28 天(40320 分钟)或 30 天(43200 分钟)
- SLO 目标:以小数表示(如 99.9% = 0.999)
- 结果单位:与时间窗口单位一致(分钟、秒或请求次数)
按请求次数计算的变体:
Error Budget (请求数) = 总请求数 × (1 - SLO 目标)
示例:月总请求 1,000,000 次,SLO 99.9%
Error Budget = 1,000,000 × 0.001 = 1,000 次错误请求
实践建议: 对于延迟类 SLI(如 p99 延迟 ≤ 200ms),Error Budget 通常按“好事件”比例计算,而非时间。例如:窗口内总请求 100 万,好事件 99.8 万,则错误率为 0.2%,消耗的 Error Budget 为 0.2% × 总预算。
4.3 Error Budget 消耗机制
Error Budget 的消耗是持续累积的过程。每当系统发生不符合 SLO 的事件(如请求超时、5xx 错误、响应过慢),就会消耗预算。消耗速率取决于错误发生的频率和持续时间。
消耗规则要点:
- 实时扣减: 每个不符合 SLO 的请求或时间片都会立即扣减预算。
- 累积效应: 消耗量在窗口内持续累加,不因后续好事件而回退。
- 消耗速率: 由错误率决定。错误率越高,预算消耗越快。
- 阈值告警: 通常设置消耗 50%、75%、90% 等告警水位线。
4.4 Error Budget 补充机制
Error Budget 的补充机制与时间窗口的滚动方式密切相关。常见的补充策略有两种:
| 补充策略 | 工作机制 | 适用场景 | 优缺点 |
|---|---|---|---|
| 固定窗口重置 | 每个固定周期(如每月 1 日)预算重置为 100% | 月度 SLA 报告、财务结算周期 | 简单直观;但窗口末期可能过度保守或冒险 |
| 滑动窗口补充 | 预算按时间衰减,旧事件逐渐移出窗口 | 实时监控、持续部署环境 | 更平滑,反映近期状态;计算复杂度较高 |
| 混合模式 | 滑动窗口计算 + 固定周期硬限制 | 需要兼顾实时性与合规性 | 灵活性高;需维护两套计算逻辑 |
常见误区: Error Budget 不是“可消耗的资源池”,而是“允许的错误上限”。消耗完预算并不意味着系统立即崩溃,而是触发质量门禁——停止高风险变更,优先修复可靠性。预算补充不是“恢复已消耗的错误”,而是窗口滚动后重新获得新的容忍额度。
4.5 消耗与补充的协同示例
以下是一个 30 天窗口、SLO 99.9% 的 Error Budget 生命周期示例:
初始预算:30天 × 1440分钟 × 0.1% = 43.2 分钟
第 5 天:发生 5 分钟故障 → 消耗 5 分钟 → 剩余 38.2 分钟(88.4%)
第 12 天:持续 3 分钟延迟超标 → 消耗 3 分钟 → 剩余 35.2 分钟(81.5%)
第 18 天:发布新版本导致 8 分钟 5xx 错误 → 消耗 8 分钟 → 剩余 27.2 分钟(63.0%)
第 25 天:基础设施抖动 2 分钟 → 消耗 2 分钟 → 剩余 25.2 分钟(58.3%)
第 30 天结束:窗口滚动,预算重置为 43.2 分钟(100%)
治理要点: 在 SLI 口径治理中,Error Budget 的消耗计算必须与 SLI 的“好事件”定义严格对齐。如果 SLI 口径变更(如调整超时阈值),Error Budget 的消耗速率会随之变化。每次口径调整后,应重新计算历史消耗数据,确保预算基线的一致性。