3、Error Budget 基础计算:公式与时间窗口
Error Budget(错误预算)是 SRE 实践中的核心量化工具,它将抽象的可靠性目标转化为可度量的“可用容错额度”。理解其基础计算是进行容量规划与故障响应决策的前提。
3.1 核心公式
Error Budget 的计算基于一个简单的乘法关系:
Error Budget = (1 - SLO) × 总时间窗口
其中:
- SLO:服务等级目标,以小数表示(例如 99.9% 对应 0.999)。
- 总时间窗口:评估周期内的总时间单位(通常以秒、分钟或小时计)。
- Error Budget:在时间窗口内,服务允许发生故障或错误的最大时间量。
关键理解: Error Budget 不是“剩余可用时间”,而是“允许犯错的总配额”。一旦消耗殆尽,即使服务仍在运行,也意味着 SLO 已处于违约边缘。
3.2 月度预算计算示例
以最常见的月度评估周期为例,假设一个月为 30 天:
总时间窗口 = 30 天 × 24 小时 × 60 分钟 × 60 秒 = 2,592,000 秒
SLO = 99.9% (0.999)
Error Budget = (1 - 0.999) × 2,592,000 秒
= 0.001 × 2,592,000 秒
= 2,592 秒
= 43.2 分钟
这意味着,在 30 天内,该服务最多只能有 43.2 分钟处于不可用或错误状态。一旦累计故障时间超过此值,SLO 即告违约。
3.3 季度预算计算示例
季度窗口通常按 90 天计算,适用于长期容量规划与稳定性评估:
总时间窗口 = 90 天 × 86,400 秒/天 = 7,776,000 秒
SLO = 99.99% (0.9999)
Error Budget = (1 - 0.9999) × 7,776,000 秒
= 0.0001 × 7,776,000 秒
= 777.6 秒
= 12.96 分钟
实践提示: 季度预算常用于“慢速消耗”场景(如渐进式容量衰减、计划内维护窗口),而月度预算更适合“快速响应”场景(如故障恢复、紧急变更)。
3.4 不同 SLO 与时间窗口的预算对比
下表展示了常见 SLO 在不同时间窗口下的 Error Budget 值,帮助快速建立数量级感知:
| SLO | 月度 (30天) | 季度 (90天) | 年度 (365天) |
|---|---|---|---|
| 99% (2个9) | 7.2 小时 | 21.6 小时 | 87.6 小时 |
| 99.9% (3个9) | 43.2 分钟 | 129.6 分钟 | 8.76 小时 |
| 99.99% (4个9) | 4.32 分钟 | 12.96 分钟 | 52.56 分钟 |
| 99.999% (5个9) | 25.9 秒 | 77.8 秒 | 5.26 分钟 |
常见误区: 不要将 Error Budget 与“正常运行时间”混淆。Error Budget 是允许失败的总量,而非成功运行的时间。例如,99.9% SLO 的月度预算为 43.2 分钟,意味着服务可以“完全不可用”43.2 分钟,而不是“部分可用”43.2 分钟。
3.5 Error Budget 计算流程
下图展示了从 SLO 定义到预算数值生成的标准计算流程:
3.6 计算中的单位统一
在实际工程中,时间窗口的单位必须与 SLO 的测量粒度对齐。以下是常见的单位转换规则:
- 秒级 SLO(如请求延迟):时间窗口统一转换为秒。
- 分钟级 SLO(如可用性):时间窗口转换为分钟。
- 事件级 SLO(如故障次数):Error Budget 以“允许失败次数”表示,而非时间。
// 事件级 Error Budget 示例(非时间单位)
总请求数 = 10,000,000 次
SLO = 99.9% (允许 0.1% 失败)
Error Budget = 0.001 × 10,000,000 = 10,000 次失败
容量规划关联: Error Budget 的数值直接决定了容量冗余策略。例如,月度预算仅 43.2 分钟的服务,其容量规划必须预留足够的弹性以应对突发流量,避免在短时间内耗尽预算。
3.7 多层级 SLO 的预算叠加
在实际系统中,一个服务可能同时定义多个 SLO(如可用性 SLO + 延迟 SLO)。此时,Error Budget 需要分别计算并独立跟踪:
最佳实践: 在容量规划台账中,为每个 SLO 建立独立的 Error Budget 列,并记录当前消耗百分比。这有助于快速识别哪个维度的可靠性正在被侵蚀。