3. 消耗模型核心要素:消耗速率、消耗周期与剩余预算

Error Budget 消耗模型的核心在于将抽象的“错误预算”转化为可量化、可预测的工程指标。要准确设定 SLO 自愈阈值,必须理解并计算以下三个核心要素:消耗速率(Burn Rate)、消耗周期(Consumption Period)和剩余预算(Remaining Budget)。这三者共同构成了自愈系统判断“何时介入”的数学基础。

3.1 消耗速率(Burn Rate)

消耗速率定义了错误预算被消耗的速度。它通常以“每单位时间消耗的预算百分比”或“相对于理想消耗速度的倍数”来表示。当消耗速率超过预设阈值时,即触发自愈动作。

核心公式:
Burn Rate = (实际错误率 - SLO 目标错误率) / SLO 目标错误率
或简化为: Burn Rate = 实际消耗百分比 / 时间窗口

在实际工程中,我们更常用“窗口化消耗速率”来避免瞬时抖动。例如,在 1 小时窗口内,如果错误预算消耗了 5%,而理想情况下只应消耗 0.5%,则消耗速率为 10x。

消耗速率等级 定义(相对于理想速度) 典型触发动作
低速消耗 1x - 2x 记录日志、生成告警
中速消耗 2x - 10x 自动扩容、流量切换
高速消耗 10x - 100x 紧急回滚、降级服务
灾难级消耗 > 100x 全链路熔断、人工介入
实践建议:不要使用单一固定速率阈值。建议设置多级速率窗口(如 1min/5min/30min),结合消耗周期综合判断,避免因突发流量导致误触发。

3.2 消耗周期(Consumption Period)

消耗周期是指错误预算从当前状态消耗至零所需的预估时间。它基于当前消耗速率进行线性外推,是自愈系统判断“剩余时间窗口”的关键指标。

计算公式:
Consumption Period = 剩余预算 / 当前消耗速率
单位: 通常为分钟或小时

例如:剩余预算为 20%,当前消耗速率为 5%/小时,则消耗周期为 4 小时。这意味着如果速率保持不变,4 小时后 SLO 将被违反。

消耗周期与消耗速率的关系如下表所示:

场景 消耗速率 剩余预算 消耗周期 自愈策略
平稳运行 1x 80% 80 小时 观察
轻微异常 5x 60% 12 小时 预扩容
严重故障 20x 30% 1.5 小时 自动回滚
灾难故障 100x 10% 6 分钟 全链路熔断

3.3 剩余预算(Remaining Budget)

剩余预算是在当前 SLO 窗口内,系统尚未消耗的错误预算比例。它是自愈系统判断“还有多少容错空间”的直接依据。

计算公式:
Remaining Budget = SLO 总预算 - 已消耗预算
或: Remaining Budget = 1 - (累计错误数 / 总请求数) / (1 - SLO 目标)

剩余预算通常以百分比表示,并随时间窗口滚动更新。例如,在 30 天滚动窗口中,SLO 为 99.9%,则总错误预算为 0.1%。如果已消耗 0.06%,则剩余预算为 0.04%。

关键陷阱:剩余预算不是线性消耗的。在窗口初期,剩余预算充足,自愈阈值可以设置得较宽松;在窗口末期,剩余预算紧张,自愈阈值必须收紧。忽略这一点的自愈策略会导致 SLO 在窗口末尾被意外违反。

3.4 三要素联动关系

消耗速率、消耗周期和剩余预算并非孤立指标,它们共同构成了一个动态决策三角:

  • 消耗速率 决定 消耗周期:速率越快,周期越短。
  • 剩余预算 调节 自愈阈值:预算越少,阈值越敏感。
  • 消耗周期 决定 响应窗口:周期越短,响应必须越快。
Error Budget 消耗模型三要素联动关系 自愈决策引擎 消耗速率 Burn Rate 消耗周期 Consumption Period 剩余预算 Remaining Budget 输入 输入 输入 调节阈值 影响窗口

3.5 综合计算示例

假设一个微服务系统,SLO 为 99.9%(30 天滚动窗口),当前运行状态如下:

# 当前指标
总请求数(30天累计): 100,000,000
错误请求数(30天累计): 80,000
实际错误率: 0.08%
SLO 目标错误率: 0.1%
已消耗预算: 80,000 / (100,000,000 * 0.001) = 80%
剩余预算: 20%

# 最近 1 小时消耗速率
最近 1 小时错误数: 500
最近 1 小时请求数: 150,000
最近 1 小时错误率: 0.333%
理想小时错误率: 0.1%
小时消耗速率: 0.333% / 0.1% = 3.33x

# 消耗周期计算
消耗周期 = 剩余预算(20%) / 小时消耗速率(3.33x * 0.1% per hour)
         = 20% / (0.333% per hour)
         = 60 小时
结论:当前消耗速率为 3.33x,属于中速消耗;剩余预算为 20%,消耗周期为 60 小时。自愈系统应触发预扩容或流量切换,避免在 60 小时内耗尽预算。
消耗模型计算流程 输入指标 计算消耗速率 计算剩余预算 计算消耗周期 自愈决策 输入数据来源 • 总请求数 • 错误请求数 • SLO 目标值

3.6 关键总结

要素 定义 计算公式 自愈意义
消耗速率 错误预算消耗的速度 实际错误率 / SLO 目标错误率 判断异常严重程度
消耗周期 预算耗尽所需时间 剩余预算 / 当前消耗速率 确定响应时间窗口
剩余预算 尚未消耗的预算比例 SLO 总预算 - 已消耗预算 调节自愈阈值灵敏度
工程红线:当剩余预算低于 10% 时,即使消耗速率只有 2x,也应触发最高优先级的自愈动作。因为此时系统已无容错空间,任何持续异常都将导致 SLO 违反。