3. Error Budget 计算原理

Error Budget(错误预算)是 SRE 实践中的核心量化工具,它将抽象的可靠性目标转化为可消耗的“预算”,为变更决策提供客观依据。本章将深入解析 Error Budget 的三大计算要素:预算总量、消耗速率与剩余时间窗口。

3.1 预算总量:Error Budget = 1 - SLO

Error Budget 的初始总量由服务等级目标(SLO)直接决定。其公式极为简洁:

Error Budget = 1 - SLO

其中 SLO 以小数形式表示(例如 99.9% 对应 0.999)。

这意味着,如果服务承诺的 SLO 越高,允许的不可用时间(即 Error Budget)就越少。下表展示了常见 SLO 对应的年度/月度/周度 Error Budget:

SLO 年度 Error Budget 月度 Error Budget 周度 Error Budget
99.9%(三个9) 8.76 小时 43.8 分钟 10.1 分钟
99.95%(三个半9) 4.38 小时 21.9 分钟 5.0 分钟
99.99%(四个9) 52.6 分钟 4.38 分钟 1.01 分钟
99.999%(五个9) 5.26 分钟 26.3 秒 6.05 秒

关键理解:Error Budget 不是“可浪费的额度”,而是服务在 SLO 窗口内允许发生的最大故障时间。它代表用户可接受的可靠性下限。

3.2 预算消耗速率

预算消耗速率衡量的是实际故障时间(或错误事件)消耗 Error Budget 的速度。它通常以每分钟/每小时消耗的预算百分比或时间来度量。

计算消耗速率需要两个输入:

  1. 当前窗口内的累计故障时间(例如过去 30 天内的总宕机分钟数)
  2. 窗口总时长(例如 30 天 = 43200 分钟)

消耗速率公式:

消耗速率(%) = (累计故障时间 / 窗口总时长) × 100%
剩余预算(%) = (Error Budget 总量 - 累计故障时间) / 窗口总时长 × 100%

实际工程中,消耗速率并非恒定值。一次大规模故障可能在几分钟内耗尽数周的预算。因此,SRE 团队通常关注瞬时消耗速率(最近 1 小时)和平均消耗速率(整个窗口)两个指标。

3.3 预算剩余时间窗口计算

预算剩余时间窗口回答了关键问题:“以当前的消耗速率,剩余的 Error Budget 还能支撑多久?”

计算公式如下:

剩余时间窗口 = 剩余 Error Budget(秒) / 当前消耗速率(秒/秒)

其中:
- 剩余 Error Budget = Error Budget 总量 - 已消耗预算
- 当前消耗速率 = 最近 N 分钟内的平均故障时间 / N 分钟

重要假设:该计算假设未来消耗速率与近期平均速率一致。实际中,消耗速率可能因变更、流量高峰或故障而剧烈波动,因此剩余时间窗口应视为动态预警指标,而非精确预测。

下表展示了不同消耗速率下的剩余时间窗口示例(假设 SLO = 99.9%,月度窗口,初始预算 = 43.8 分钟):

已消耗预算 剩余预算 当前消耗速率 剩余时间窗口 风险等级
10 分钟 33.8 分钟 0.5 分钟/天 67.6 天 低
20 分钟 23.8 分钟 1.0 分钟/天 23.8 天 中
35 分钟 8.8 分钟 2.0 分钟/天 4.4 天 高
40 分钟 3.8 分钟 3.0 分钟/天 1.27 天 严重

3.4 计算流程总览

下图展示了 Error Budget 从定义到消耗监控的完整计算链路:

Error Budget 计算流程 1. 定义 SLO 2. 预算总量 = 1 - SLO 3. 采集实际故障时间 4. 计算消耗速率 5. 剩余时间窗口 6. 变更决策 说明:剩余时间窗口 = 剩余预算 / 当前消耗速率,是变更是否安全的直接判据

3.5 工程实践要点

  • 窗口对齐:Error Budget 的计算窗口必须与 SLO 评估窗口一致(通常为 30 天滚动窗口)。
  • 消耗速率平滑:使用指数加权移动平均(EWMA)对消耗速率进行平滑,避免单次抖动导致误判。
  • 多维度预算:对于多服务架构,每个服务应有独立的 Error Budget,避免“预算挪用”。
  • 预算耗尽阈值:当剩余时间窗口小于预定阈值(例如 7 天)时,自动冻结高风险变更。

核心公式总结:

Error Budget 总量 = (1 - SLO) × 窗口总时长
已消耗预算 = 窗口内累计故障时间
剩余预算 = Error Budget 总量 - 已消耗预算
消耗速率 = 已消耗预算 / 已过去时间
剩余时间窗口 = 剩余预算 / 当前消耗速率