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 消耗、燃烧速率与变更决策之间的逻辑关系:

Error Budget 消耗与变更决策流程 Error Budget 消耗与变更决策流程 SLO 定义(如 99.9%) Error Budget = 1 - SLO 实时监控预算消耗与燃烧速率 燃烧速率? 绿灯:正常变更 黄灯:审批后变更 红灯:禁止变更 说明:燃烧速率 < 1x 为绿灯;1x~2x 为黄灯;≥ 2x 为红灯,禁止变更

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 消耗曲线示例 月度 Error Budget 消耗曲线示例(SLO = 99.9%) 0% 50% 100% 第1天 第8天 第15天 第22天 第30天 故障事件(消耗加速) 预算剩余 25%(黄灯区) 月末剩余约 40% 预算 安全区(预算充足,可正常变更) 警戒区(预算紧张,需审批变更) 预算耗尽线

从曲线可以看出:

  • 月初预算充足,曲线平缓,燃烧速率低,适合执行大规模变更。
  • 月中发生故障事件,曲线斜率增大,燃烧速率上升,进入警戒区。
  • 月末预算消耗放缓,但若再次发生故障,可能突破预算耗尽线。

工程建议:将 Error Budget 消耗曲线集成到数据库变更平台的仪表盘中,每次变更前自动检查当前预算状态。若预算消耗率超过 60%,自动触发变更审批流程;超过 80%,直接阻止变更执行。