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 的速度。它通常以每分钟/每小时消耗的预算百分比或时间来度量。
计算消耗速率需要两个输入:
- 当前窗口内的累计故障时间(例如过去 30 天内的总宕机分钟数)
- 窗口总时长(例如 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 从定义到消耗监控的完整计算链路:
3.5 工程实践要点
- 窗口对齐:Error Budget 的计算窗口必须与 SLO 评估窗口一致(通常为 30 天滚动窗口)。
- 消耗速率平滑:使用指数加权移动平均(EWMA)对消耗速率进行平滑,避免单次抖动导致误判。
- 多维度预算:对于多服务架构,每个服务应有独立的 Error Budget,避免“预算挪用”。
- 预算耗尽阈值:当剩余时间窗口小于预定阈值(例如 7 天)时,自动冻结高风险变更。
核心公式总结:
Error Budget 总量 = (1 - SLO) × 窗口总时长
已消耗预算 = 窗口内累计故障时间
剩余预算 = Error Budget 总量 - 已消耗预算
消耗速率 = 已消耗预算 / 已过去时间
剩余时间窗口 = 剩余预算 / 当前消耗速率