3. Error Budget 计算公式:从 SLO 到预算的推导与实例
Error Budget(错误预算)是 SRE 实践中的核心量化工具,它直接由服务等级目标(SLO)推导而来。理解其计算公式,是后续配置灰度发布准入策略的基础。
3.1 核心公式推导
Error Budget 的定义非常直观:在给定的时间窗口内,服务允许发生故障或性能降级的总“额度”。其计算公式为:
Error Budget = 1 - SLO
其中 SLO 以小数形式表示(例如 99.9% 表示为 0.999)。
推导逻辑:
- SLO 定义了服务必须达到的“成功”或“可用”比例。例如,SLO = 99.9% 意味着在时间窗口内,服务必须保证 99.9% 的请求成功或正常运行。
- 剩余部分(1 - SLO)就是服务可以“失败”或“不可用”的最大容忍比例。这个剩余部分就是 Error Budget。
- 本质: Error Budget 将抽象的可靠性目标,转化为一个可消耗、可追踪的“预算”。团队可以在这个预算范围内进行风险操作(如灰度发布、版本升级),而无需担心立即违反 SLO。
关键理解: Error Budget 不是“坏账”,而是“安全垫”。只要预算未耗尽,团队就可以放心地进行变更;预算耗尽时,则应立即停止高风险操作,优先恢复稳定性。
3.2 月度与季度预算计算实例
实际计算中,需要将 Error Budget 从比例转换为具体的时间或请求数量,以便于监控和决策。下面以最常见的 99.9% 和 99.99% SLO 为例,分别计算月度(30天)和季度(90天)的预算。
3.2.1 基于时间的预算计算(适用于可用性 SLO)
对于“可用性”类 SLO(如服务正常运行时间),Error Budget 通常以“允许的最大不可用时间”表示。
| SLO | Error Budget 比例 | 月度预算(30天) | 季度预算(90天) |
|---|---|---|---|
| 99.9% | 0.1% | 30天 × 24小时 × 60分钟 × 0.1% = 43.2 分钟 | 90天 × 24小时 × 60分钟 × 0.1% = 129.6 分钟 |
| 99.99% | 0.01% | 30天 × 24小时 × 60分钟 × 0.01% = 4.32 分钟 | 90天 × 24小时 × 60分钟 × 0.01% = 12.96 分钟 |
计算示例:
- 对于 SLO = 99.9% 的服务,一个月内最多允许宕机 43.2 分钟。如果本月已发生 30 分钟故障,则剩余预算为 13.2 分钟。
- 对于 SLO = 99.99% 的服务,一个季度内最多允许宕机 约 13 分钟。这意味着任何超过 13 分钟的严重故障,都会导致该季度 SLO 违约。
3.2.2 基于请求量的预算计算(适用于延迟/错误率 SLO)
对于“性能”类 SLO(如 95% 的请求延迟低于 200ms),Error Budget 通常以“允许失败的请求数量”表示。
| SLO | Error Budget 比例 | 月度预算(假设 1 亿请求) | 季度预算(假设 3 亿请求) |
|---|---|---|---|
| 99.9% | 0.1% | 100,000,000 × 0.1% = 100,000 次失败 | 300,000,000 × 0.1% = 300,000 次失败 |
| 99.99% | 0.01% | 100,000,000 × 0.01% = 10,000 次失败 | 300,000,000 × 0.01% = 30,000 次失败 |
计算示例:
- 某 API 服务月度请求量为 1 亿,SLO = 99.9%(延迟达标率)。则月度 Error Budget 为 10 万次慢请求。一旦本月慢请求累计超过 10 万,预算耗尽。
- 在灰度发布期间,如果新版本导致每分钟增加 1000 次慢请求,那么团队可以估算出:在预算耗尽前,最多可以运行 100,000 / 1000 = 100 分钟。这为灰度暂停或回滚提供了明确的时间窗口。
3.3 Error Budget 消耗与灰度发布的关系
下图展示了 Error Budget 在灰度发布流程中的核心作用:它作为“准入阀门”,控制着变更是否可以进行。
实践要点:
- 预算窗口对齐: Error Budget 的计算窗口(月度/季度)必须与 SLO 的考核周期一致。如果 SLO 是按季度考核,那么预算也应按季度计算和重置。
- 消耗速率: 不仅要关注预算的值,更要关注消耗速率。如果预算在月初就快速消耗 50%,即使未耗尽,也应触发预警,降低变更频率。
- 灰度准入阈值: 通常设置一个“预算安全线”(如剩余 20%)。低于此线时,自动阻止新的灰度发布,直到预算通过自然恢复(时间窗口重置)或人工干预后回升。
3.4 总结:公式与决策
Error Budget 的计算公式 Error Budget = 1 - SLO 虽然简单,但其背后是 SRE 从“追求 100% 可用性”到“管理可用性风险”的思维转变。通过将抽象的 SLO 转化为具体的分钟数或请求数,团队可以:
- 量化风险: 明确知道“我们还有多少试错空间”。
- 驱动决策: 在灰度发布、功能开关等场景中,作为自动化的准入/熔断条件。
- 平衡创新与稳定: 预算充足时鼓励快速迭代,预算紧张时强制保守运营。