Error Budget 的数学原理:基于时间窗口的预算计算方式
Error Budget(错误预算)的核心思想是将 SLO 的达成情况转化为一个可量化的“预算”概念。当服务在 SLO 窗口内累积的错误超过预算时,即触发风险预警。理解其数学原理,是构建燃烧率分析体系的基础。
2.1 核心定义与 30 天滚动窗口
Error Budget 的计算依赖于一个固定的时间窗口,业界最常用的窗口长度为 30 天。这个窗口是“滚动”的,意味着它始终包含最近的 30 天数据,每天向前滑动一天。
- SLO 目标:服务在窗口内必须达到的可用性百分比,例如 99.9%(三个9)。
- 总事件数:窗口内所有有效请求的总数(Total Events)。
- 错误事件数:窗口内不符合 SLO 定义的请求总数(Bad Events)。
- 错误预算:窗口内允许发生的最大错误事件数。
例如,一个 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)。
2.3 预算消耗速率与 SLO 违反时间预测
通过消耗速率,我们可以预测在 不改变当前错误率 的情况下,服务将在何时违反 SLO。
预计违反时间 = 窗口长度 / 消耗速率
例如,窗口长度为 30 天,消耗速率为 3.0,则预计违反时间为:30 / 3 = 10 天。
| 消耗速率 | 含义 | 预计违反时间(30天窗口) | 风险等级 |
|---|---|---|---|
| < 1.0 | 预算消耗速度低于补充速度 | 超过 30 天(安全) | 低 |
| = 1.0 | 预算消耗速度等于补充速度 | 正好 30 天(临界) | 中 |
| > 1.0 | 预算消耗速度超过补充速度 | 少于 30 天 | 高 |
| > 2.0 | 预算消耗速度极快 | 少于 15 天 | 严重 |
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 次错误/小时),则速率较高。
两个条件同时满足,说明错误正在持续发生,需要立即响应。
2.5 数学公式总结
以下表格汇总了 Error Budget 计算中的核心数学公式:
| 指标 | 公式 | 说明 |
|---|---|---|
| 错误预算 | Total × (1 - SLO) |
窗口内允许的最大错误数 |
| 已消耗预算 | ∑(窗口内错误事件) |
累积错误数 |
| 剩余预算 | 错误预算 - 已消耗预算 |
当前可用预算 |
| 消耗速率 | 单位时间错误数 / 错误预算 |
预算消耗速度(比例) |
| 预计违反时间 | 窗口长度 / 消耗速率 |
预测 SLO 违反时间 |