3. Error Budget 基础:计算公式与燃烧速率
Error Budget(错误预算)是 SRE 实践中的核心量化工具,它将抽象的可靠性目标转化为可消耗、可追踪的“预算”。团队通过监控预算的消耗速率,判断当前变更风险是否在可接受范围内,从而决定是否执行变更窗口操作。
3.1 Error Budget 的定义与计算公式
Error Budget 的本质是 服务在 SLO 约束下,允许发生故障或错误的最大时间(或次数)。其计算公式极为简洁:
Error Budget = 1 - SLO
其中 SLO 以小数形式表示(例如 99.9% 对应 0.999)。
该公式的含义是:如果服务承诺在统计周期内达到 99.9% 的可用性,那么剩余的 0.1% 就是允许“犯错”的预算。常见的 SLO 与对应 Error Budget 如下表所示:
| SLO(可用性) | Error Budget(允许故障时间/月) | Error Budget(允许故障时间/周) | 典型适用场景 |
|---|---|---|---|
| 99.9%(三个九) | 约 43.2 分钟 | 约 10.1 分钟 | 内部工具、开发环境 |
| 99.95% | 约 21.6 分钟 | 约 5.0 分钟 | 准核心业务、非实时交易 |
| 99.99%(四个九) | 约 4.32 分钟 | 约 1.01 分钟 | 核心交易、支付链路 |
| 99.999%(五个九) | 约 25.9 秒 | 约 6.0 秒 | 金融核心、电信信令 |
实践要点:Error Budget 的统计周期通常与 SLO 对齐(月度或滚动窗口)。不要将预算视为“可以故意浪费的资源”,而是作为风险容量的量化标尺。
3.2 预算消耗与燃烧速率
仅有 Error Budget 总量还不够,SRE 需要实时跟踪 预算消耗(Budget Consumption) 和 燃烧速率(Burn Rate),才能判断当前可靠性状态是否健康。
3.2.1 预算消耗
预算消耗指在统计周期内,实际发生的不可用时间或错误次数占 Error Budget 的比例。计算公式为:
预算消耗率 = (实际不可用时间 / Error Budget 总量) × 100%
例如:某数据库服务月度 SLO 为 99.9%(Error Budget = 43.2 分钟),本月已发生 10 分钟不可用,则预算消耗率为 10 / 43.2 ≈ 23.1%。
3.2.2 燃烧速率
燃烧速率衡量的是 预算消耗的速度,通常以“倍率”表示。它帮助团队判断当前故障是否正在快速消耗预算,从而触发告警或阻止变更。
| 燃烧速率等级 | 定义 | 典型阈值 | SRE 响应动作 |
|---|---|---|---|
| 正常(Normal) | 预算消耗速度远低于 SLO 允许上限 | 燃烧速率 < 1x | 正常变更窗口,无需干预 |
| 警告(Warning) | 预算消耗速度接近 SLO 上限 | 1x ≤ 燃烧速率 < 2x | 加强监控,评估变更风险 |
| 严重(Critical) | 预算消耗速度超过 SLO 上限 | 2x ≤ 燃烧速率 < 5x | 暂停非紧急变更,启动应急响应 |
| 灾难(Burnout) | 预算即将或已经耗尽 | 燃烧速率 ≥ 5x | 冻结所有变更,全量回滚或降级 |
关键认知:燃烧速率不是固定值,而是随时间窗口动态计算的。例如,若在 1 小时内消耗了 2 小时的预算,则燃烧速率为 2x。SRE 团队应设置多时间窗口(如 1 小时、6 小时、24 小时)的燃烧速率告警,避免单一窗口误判。
3.3 Error Budget 与变更窗口的联动关系
在数据库可靠性设计中,Error Budget 是变更窗口的“红绿灯”:
- 绿灯(预算充足):燃烧速率 < 1x,预算剩余 > 50%,可正常执行变更。
- 黄灯(预算紧张):燃烧速率 1x~2x,预算剩余 20%~50%,需审批后执行变更。
- 红灯(预算告急):燃烧速率 > 2x 或预算剩余 < 20%,禁止执行任何非紧急变更。
下图展示了 Error Budget 消耗、燃烧速率与变更决策之间的逻辑关系:
3.4 燃烧速率计算示例
假设某数据库集群的月度 SLO 为 99.95%(Error Budget = 21.6 分钟)。在某个 6 小时窗口内,发生了 2 次故障,累计不可用时间 3 分钟。计算该窗口的燃烧速率:
窗口内允许的 Error Budget = 21.6 分钟 × (6小时 / 30天 / 24小时) ≈ 0.18 分钟
实际消耗 = 3 分钟
燃烧速率 = 3 / 0.18 ≈ 16.7x
该燃烧速率远超 5x 的灾难阈值,应立即冻结所有变更并启动应急响应。
SRE 最佳实践:建议为数据库服务设置多窗口燃烧速率告警:
- 1 小时窗口:燃烧速率 ≥ 10x 触发 P0 告警
- 6 小时窗口:燃烧速率 ≥ 5x 触发 P1 告警
- 24 小时窗口:燃烧速率 ≥ 2x 触发 P2 告警
这样既能快速发现突发故障,又能避免短时抖动导致误告警。
3.5 Error Budget 消耗的图形化展示
下图展示了一个典型月度 Error Budget 消耗曲线,帮助团队直观理解预算消耗与燃烧速率的关系:
从曲线可以看出:
- 月初预算充足,曲线平缓,燃烧速率低,适合执行大规模变更。
- 月中发生故障事件,曲线斜率增大,燃烧速率上升,进入警戒区。
- 月末预算消耗放缓,但若再次发生故障,可能突破预算耗尽线。
工程建议:将 Error Budget 消耗曲线集成到数据库变更平台的仪表盘中,每次变更前自动检查当前预算状态。若预算消耗率超过 60%,自动触发变更审批流程;超过 80%,直接阻止变更执行。