Error Budget 的数学原理:基于时间窗口的预算计算方式

Error Budget(错误预算)的核心思想是将 SLO 的达成情况转化为一个可量化的“预算”概念。当服务在 SLO 窗口内累积的错误超过预算时,即触发风险预警。理解其数学原理,是构建燃烧率分析体系的基础。

2.1 核心定义与 30 天滚动窗口

Error Budget 的计算依赖于一个固定的时间窗口,业界最常用的窗口长度为 30 天。这个窗口是“滚动”的,意味着它始终包含最近的 30 天数据,每天向前滑动一天。

  • SLO 目标:服务在窗口内必须达到的可用性百分比,例如 99.9%(三个9)。
  • 总事件数:窗口内所有有效请求的总数(Total Events)。
  • 错误事件数:窗口内不符合 SLO 定义的请求总数(Bad Events)。
  • 错误预算:窗口内允许发生的最大错误事件数。
关键公式: 错误预算 = 总事件数 × (1 - SLO 目标)

例如,一个 30 天窗口内有 1,000,000 次请求,SLO 为 99.9%,则错误预算为:1,000,000 × (1 - 0.999) = 1,000 次错误。这意味着在任意 30 天滚动窗口内,服务最多只能发生 1,000 次错误。

2.2 预算消耗速率与剩余预算的数学推导

预算消耗速率描述了错误预算被“烧掉”的速度。剩余预算则是当前窗口内尚未被消耗的预算余额。

2.2.1 剩余预算公式

在任意时刻 t,剩余预算的计算方式如下:

剩余预算(t) = 错误预算 - 已消耗预算(t)

其中:

  • 错误预算:窗口开始时的总预算(固定值)。
  • 已消耗预算(t):从窗口开始到时刻 t 累积的错误事件数。

当剩余预算降至 0 时,服务即违反了 SLO。

2.2.2 预算消耗速率公式

预算消耗速率(Burn Rate)定义为:单位时间内消耗的预算占窗口总预算的比例。通常以“每小时”或“每分钟”为单位。

消耗速率 = (单位时间内的错误事件数) / (窗口总预算)

例如,如果窗口总预算为 1,000 次错误,而过去 1 小时内发生了 50 次错误,则消耗速率为:50 / 1000 = 0.05 (5%/小时)。

更通用的推导公式如下:

消耗速率 = (单位时间内的错误事件数) / (总事件数 × (1 - SLO))

2.2.3 消耗速率与剩余预算的关系

消耗速率直接决定了剩余预算的衰减速度。如果消耗速率保持恒定,则剩余预算的衰减是线性的。

剩余预算(t) = 错误预算 - (消耗速率 × 错误预算 × t)

其中 t 是窗口内已经过去的时间比例(0 到 1)。

实践要点: 当消耗速率 > 1.0 时,意味着服务正在以快于“预算补充”的速度消耗预算,如果不干预,将在窗口结束前耗尽预算。例如,一个 30 天窗口的消耗速率为 2.0,则服务将在 15 天内耗尽预算。

2.3 预算消耗速率与 SLO 违反时间预测

通过消耗速率,我们可以预测在 不改变当前错误率 的情况下,服务将在何时违反 SLO。

预计违反时间 = 窗口长度 / 消耗速率

例如,窗口长度为 30 天,消耗速率为 3.0,则预计违反时间为:30 / 3 = 10 天。

消耗速率 含义 预计违反时间(30天窗口) 风险等级
< 1.0 预算消耗速度低于补充速度 超过 30 天(安全) 低
= 1.0 预算消耗速度等于补充速度 正好 30 天(临界) 中
> 1.0 预算消耗速度超过补充速度 少于 30 天 高
> 2.0 预算消耗速度极快 少于 15 天 严重
注意: 消耗速率是一个动态指标。一次短暂的流量高峰可能导致瞬时速率极高,但随后恢复正常。因此,通常使用 多时间窗口(如 1小时、6小时、24小时) 的消耗速率进行综合判断,避免误报。

2.4 多窗口燃烧率预警策略

为了平衡预警的及时性与准确性,业界通常采用多窗口策略。Google SRE 实践推荐使用 两个窗口:一个短窗口用于快速响应,一个长窗口用于确认趋势。

预警触发条件:
  条件 A:短窗口(如 1小时)消耗速率 > 阈值(如 14.4)
  条件 B:长窗口(如 6小时)消耗速率 > 阈值(如 2.4)
  当条件 A 和条件 B 同时满足时,触发预警。

这种策略可以过滤掉瞬时尖峰(仅满足条件 A),只有当错误持续发生时(同时满足条件 B),才认为是一个需要关注的事件。

阈值计算示例:
假设 SLO 为 99.9%,30天窗口总预算为 1,000 次错误。
- 1小时窗口阈值(14.4):意味着如果 1小时内消耗了 14.4% 的预算(约 144 次错误),则速率极高。
- 6小时窗口阈值(2.4):意味着如果 6小时内消耗了 2.4% 的预算(约 24 次错误/小时),则速率较高。
两个条件同时满足,说明错误正在持续发生,需要立即响应。
Error Budget 消耗速率与剩余预算关系图 总错误预算 1,000 次错误 消耗 消耗速率 50 错误/小时 剩余预算 950 次错误 第 0 天 第 15 天 第 30 天 速率=1.0(安全) 速率=2.0(危险) 消耗速率 > 1.0 时,剩余预算将在窗口结束前耗尽,触发 SLO 违反。

2.5 数学公式总结

以下表格汇总了 Error Budget 计算中的核心数学公式:

指标 公式 说明
错误预算 Total × (1 - SLO) 窗口内允许的最大错误数
已消耗预算 ∑(窗口内错误事件) 累积错误数
剩余预算 错误预算 - 已消耗预算 当前可用预算
消耗速率 单位时间错误数 / 错误预算 预算消耗速度(比例)
预计违反时间 窗口长度 / 消耗速率 预测 SLO 违反时间
实践建议: 在实现 Error Budget 监控时,建议将消耗速率作为核心预警指标,并配合多窗口策略。同时,将剩余预算以可视化仪表盘的形式展示给团队,帮助大家直观理解当前服务的健康状态。