3. Error Budget 计算模型

Error Budget 的量化计算是灰度发布准入控制的核心。不同的业务场景对可用性的定义粒度不同,因此需要选择匹配的计算模型。本章详细阐述三种主流模型:基于时间窗口、基于请求量以及混合模型,并给出选择策略。

3.1 基于时间窗口的预算计算

该模型以不可用时间作为 Error Budget 的计量单位。它假设服务的可用性目标为“四个九”或“五个九”,并将允许的年度/月度停机时间按固定时间窗口(通常为 28 天或 30 天)进行切片。

核心公式

Error Budget (时间窗口) = 窗口总分钟数 × (1 - SLO)
剩余 Budget = Error Budget - 累计不可用分钟数

计算示例(99.9% SLO,28 天窗口)

指标 数值 说明
窗口总分钟数 28 × 24 × 60 = 40,320 4 周滚动窗口
允许不可用分钟数 40,320 × 0.001 = 40.32 分钟 约 40 分钟
已消耗不可用时间 25 分钟 由监控系统累计
剩余 Budget 15.32 分钟 剩余可用额度
适用场景:基础设施层(网络、存储、Kubernetes 集群)、长周期批处理任务、对连续可用性要求极高的核心链路。
实践要点:时间窗口模型直观易懂,但无法区分“1 次 40 分钟故障”与“40 次 1 分钟抖动”。对于高频短时故障,建议配合事件计数或请求量模型使用。

3.2 基于请求量的预算计算

该模型以失败请求数作为计量单位。它将 SLO 转化为“每百万请求允许失败次数”,更适合高并发、短连接、对单次请求成功率敏感的业务。

核心公式

Error Budget (请求量窗口) = 窗口总请求数 × (1 - SLO)
剩余 Budget = Error Budget - 累计失败请求数

计算示例(99.95% SLO,每日 1 亿请求)

指标 数值 说明
每日总请求数 100,000,000 1 亿
允许失败请求数 100,000,000 × 0.0005 = 50,000 5 万次失败
当前累计失败数 32,000 过去 24 小时
剩余 Budget 18,000 次 剩余可用额度
注意:请求量模型对流量毛刺敏感。如果某时段流量突增 10 倍,即使错误率不变,失败请求数也会飙升,导致 Budget 快速耗尽。建议配合滑动窗口(如 5 分钟粒度)进行平滑计算。

3.3 混合模型与选择策略

单一模型在复杂场景下存在盲区。混合模型将时间窗口与请求量结合,通过“双条件触发”或“加权融合”来提升准入判断的鲁棒性。

三种常见混合策略

策略名称 计算方式 优势 劣势
双条件与门 时间 Budget 且 请求量 Budget 均未耗尽 最保守,防止单一维度误判 可能过于严格,降低发布效率
双条件或门 时间 Budget 或 请求量 Budget 任一耗尽即阻断 快速响应异常,覆盖两种故障模式 可能因流量毛刺误阻断
加权融合 Budget = α × 时间剩余率 + β × 请求量剩余率
(α + β = 1)
灵活调节,可适配不同业务敏感度 权重需要持续调优

选择决策矩阵

业务特征 推荐模型 原因
长连接、流媒体、实时通信 时间窗口模型 连续可用时长是核心指标
API 网关、微服务 RPC、电商下单 请求量模型 单次请求成功率直接影响收入
核心交易链路 + 基础设施 混合模型(双条件与门) 双重保障,避免单一维度漏洞
非核心、实验性服务 请求量模型(宽松 SLO) 简化计算,允许一定容错
推荐实践:在灰度发布准入场景中,建议采用加权融合混合模型。初始设置 α = 0.4(时间权重)、β = 0.6(请求量权重),运行 2 个迭代周期后根据实际阻断率与误报率调整。当任一维度剩余 Budget 低于 20% 时,自动切换为双条件与门模式,进入严格保护状态。
Error Budget 计算模型选择流程 业务 SLO 定义 连续可用 是核心指标? 时间窗口模型 请求量模型 需要双重 保障? 混合模型(与门) 混合模型(或门) 灰度准入 Budget 计算 核心链路建议使用混合模型 非核心服务可简化使用请求量模型

3.4 模型对比总结

维度 时间窗口模型 请求量模型 混合模型
计量单位 分钟 / 小时 失败请求数 两者加权或条件组合
对流量毛刺敏感度 低 高 中(可调节)
对长尾故障敏感度 高 低 高
实现复杂度 低 中 高
灰度准入推荐度 ★★★☆☆ ★★★★☆ ★★★★★
实施建议:在灰度发布平台中,建议将 Error Budget 计算模型设计为可配置策略。默认使用加权融合混合模型(α=0.4, β=0.6),并允许 SRE 团队在控制台一键切换为双条件与门模式(应对重大故障恢复期)或请求量模型(应对大促流量高峰)。