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 定义到预算数值生成的标准计算流程:

Error Budget 计算流程 SLO 定义 例: 99.9% 时间窗口 例: 30天 Error Budget (1 - SLO) × 时间窗口 预算数值 例: 43.2 分钟 输入参数 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 预算示例 可用性 SLO 99.9% 预算: 43.2 分钟/月 延迟 SLO P99 < 200ms 预算: 0.1% 请求 错误率 SLO < 0.5% 预算: 5,000 次/百万 独立跟踪,不可互相借用 每个 SLO 的 Error Budget 单独计算与消耗
最佳实践: 在容量规划台账中,为每个 SLO 建立独立的 Error Budget 列,并记录当前消耗百分比。这有助于快速识别哪个维度的可靠性正在被侵蚀。