2. Error Budget 的数学原理:基于可用性百分比的 Error Budget 计算公式,以及消耗速率模型
Error Budget 的核心思想是将服务可靠性量化为一个可消耗的“预算”。这个预算的数学基础建立在可用性百分比之上,通过简单的减法即可得出,而其消耗速率则决定了 SRE 团队何时需要介入干预。
2.1 可用性百分比与 Error Budget 计算公式
在 SRE 实践中,服务的可靠性通常用服务等级目标(SLO)来衡量,SLO 以可用性百分比表示,例如 99.9%(三个九)、99.99%(四个九)。Error Budget 的计算公式极其简洁:
Error Budget = 100% − SLO
或者更精确地,在时间窗口 T 内:
Error Budget = 总时间窗口 T × (1 − SLO)
这个公式的含义是:在给定的时间窗口(通常为 28 天或 30 天滚动窗口)内,服务允许的最大不可用时间或错误率。例如:
| SLO(可用性百分比) | Error Budget(30 天窗口) | 含义 |
|---|---|---|
| 99.9%(三个九) | 43.2 分钟 | 每月最多允许 43.2 分钟不可用 |
| 99.99%(四个九) | 4.32 分钟 | 每月最多允许 4.32 分钟不可用 |
| 99.999%(五个九) | 25.9 秒 | 每月最多允许 25.9 秒不可用 |
这个预算不是“一次性”的,而是在整个时间窗口内持续消耗和重置的。理解这一点是掌握消耗速率模型的关键。
2.2 消耗速率模型:预算如何被“烧掉”
Error Budget 的消耗速率模型描述了错误事件如何随时间累积消耗预算。它不是一个静态的阈值,而是一个动态的、基于时间序列的消耗过程。
消耗速率的基本公式为:
消耗速率 = 错误事件持续时间 × 错误事件影响权重 / 时间窗口
在实际系统中,消耗速率通常通过以下两种方式建模:
- 基于时间的消耗模型:适用于可用性 SLO(如 uptime)。每次服务不可用事件发生时,其持续时间直接消耗预算。
- 基于请求的消耗模型:适用于延迟或错误率 SLO。每次请求失败或超时,按比例消耗预算。
关键洞察:消耗速率不是均匀的。一次大规模故障可能在几分钟内烧掉整个月的预算,而日常的零星错误则缓慢消耗。SRE 团队关注的是消耗速率是否超过“燃烧率”阈值。
2.3 燃烧率(Burn Rate)与预警阈值
燃烧率是消耗速率模型的核心指标,定义为:
燃烧率 = 实际消耗速率 / 理想消耗速率
其中,理想消耗速率 = Error Budget / 时间窗口
当燃烧率 > 1 时,意味着预算消耗速度超过了“匀速消耗”的理想线,服务正在加速消耗其可靠性预算。SRE 实践中通常定义多个燃烧率阈值来触发不同级别的告警:
| 燃烧率阈值 | 含义 | 典型告警级别 | 响应时间要求 |
|---|---|---|---|
| 1x | 匀速消耗,刚好用完预算 | 信息(Info) | 无需立即响应 |
| 2x | 预算消耗速度翻倍 | 警告(Warning) | 24 小时内评估 |
| 5x | 预算将在 1/5 时间内耗尽 | 严重(Critical) | 1 小时内响应 |
| 10x | 预算将在数小时内耗尽 | 紧急(Pager) | 立即响应 |
下图展示了 Error Budget 的消耗速率模型与燃烧率的关系:
2.4 多窗口消耗策略:快速检测与慢速恢复
为了平衡检测灵敏度和误报率,SRE 实践中通常使用多时间窗口的消耗速率模型。Google 的 SRE 团队推荐使用“多窗口燃烧率告警”策略:
- 短窗口(如 1 小时):高燃烧率阈值(如 10x),用于快速检测严重故障。
- 长窗口(如 6 小时):中等燃烧率阈值(如 5x),用于检测持续性问题。
- 超长窗口(如 24 小时):低燃烧率阈值(如 2x),用于检测慢性退化。
常见误区:不要只依赖单一窗口的消耗速率。短窗口可能因瞬时抖动而误报,长窗口可能延迟故障发现。多窗口组合使用才能既快速又准确。
2.5 消耗速率模型在自动扩缩容中的应用
理解消耗速率模型后,我们可以将其与自动扩缩容策略结合:
| 燃烧率状态 | Error Budget 剩余 | 扩缩容动作 | 说明 |
|---|---|---|---|
| 燃烧率 < 1x | 充足(> 50%) | 正常缩容或保持 | 服务健康,可进行常规运维 |
| 1x ≤ 燃烧率 < 2x | 中等(20% - 50%) | 谨慎缩容 | 需要关注,但暂不干预 |
| 2x ≤ 燃烧率 < 5x | 较低(5% - 20%) | 停止缩容,准备扩容 | 触发预警,评估是否需要扩容 |
| 燃烧率 ≥ 5x | 危急(< 5%) | 立即扩容 | 自动触发扩容,不惜代价保护 SLO |
下图展示了基于 Error Budget 消耗速率的自动扩缩容决策流程: