1. Error Budget 基础概念
1.1 什么是 Error Budget
Error Budget(错误预算)是 SRE 实践中用于平衡系统可靠性与功能迭代速度的核心量化工具。它定义了一个服务在给定 SLO(Service Level Objective)下允许发生故障或性能降级的时间总量。只要实际不可用时间未超出 Error Budget,团队就可以正常发布新功能;一旦预算耗尽,则必须暂停变更,优先投入稳定性修复。
核心思想: 将可靠性从“目标”转化为“可消耗的预算”,让业务创新与稳定性之间形成可度量的权衡机制。
1.2 SLO 与 SLI 的关系
理解 Error Budget 必须先理清 SLI 和 SLO 的定义与关系:
| 术语 | 全称 | 定义 | 示例 |
|---|---|---|---|
| SLI | Service Level Indicator | 服务质量的直接可测量指标 | 请求延迟 P99 ≤ 200ms、可用率 ≥ 99.9% |
| SLO | Service Level Objective | SLI 的目标阈值,是团队承诺的可靠性边界 | 月度可用率 ≥ 99.95% |
| SLA | Service Level Agreement | 对客户或业务方的正式承诺,通常附带惩罚条款 | 可用率 ≥ 99.9%,否则赔付 10% 月费 |
三者关系可概括为:SLI 是原始数据 → SLO 是目标阈值 → SLA 是商业承诺。Error Budget 正是基于 SLO 与 SLI 之间的差值计算得出。
1.3 Error Budget 的计算公式
Error Budget 的计算基于 SLO 与 SLI 的差值,核心公式如下:
Error Budget = (1 - SLO) × 总时间窗口 - 实际不可用时间
其中:
- SLO:服务等级目标(如 99.9%)
- 总时间窗口:评估周期总时长(如 30 天 = 43200 分钟)
- 实际不可用时间:SLI 未达标的总时长
计算示例: 假设某服务月度 SLO 为 99.95%,总时间窗口为 30 天(43200 分钟)。
• 允许最大不可用时间 = (1 - 0.9995) × 43200 = 21.6 分钟
• 若本月已发生 15 分钟故障,则剩余 Error Budget = 21.6 - 15 = 6.6 分钟
• 允许最大不可用时间 = (1 - 0.9995) × 43200 = 21.6 分钟
• 若本月已发生 15 分钟故障,则剩余 Error Budget = 21.6 - 15 = 6.6 分钟
1.4 常见 SLO 对应的 Error Budget 速查表
| SLO | 月度允许不可用时间 | 季度允许不可用时间 | 年度允许不可用时间 |
|---|---|---|---|
| 99.9%(三个九) | 43.2 分钟 | 2.16 小时 | 8.76 小时 |
| 99.95%(三个半九) | 21.6 分钟 | 1.08 小时 | 4.38 小时 |
| 99.99%(四个九) | 4.32 分钟 | 12.96 分钟 | 52.56 分钟 |
| 99.999%(五个九) | 25.9 秒 | 1.3 分钟 | 5.26 分钟 |
1.5 Error Budget 的消耗与恢复机制
Error Budget 并非静态值,而是随时间动态变化的“预算池”:
- 消耗: 每次 SLI 未达标事件(如延迟超阈值、错误率升高、服务不可用)都会消耗 Error Budget。
- 恢复: 当服务恢复正常运行且 SLI 持续达标时,Error Budget 会随着时间窗口滚动而逐步恢复(基于滑动窗口计算)。
- 耗尽后果: 一旦 Error Budget 归零,应触发“冻结变更”机制,停止所有非关键发布,直至预算恢复到安全水位。
常见误区: Error Budget 不是“故障配额”,而是“风险预算”。即使预算充足,也不应故意消耗;预算耗尽时,必须严格执行变更冻结,否则将直接违反 SLO 并可能触发 SLA 惩罚。
1.6 多维度 Error Budget 示例
实际生产环境中,一个服务可能同时维护多个 SLI/SLO 维度,每个维度独立计算 Error Budget:
| SLI 维度 | SLO 目标 | 月度预算 | 当前消耗 | 剩余预算 |
|---|---|---|---|---|
| 可用性(Availability) | 99.95% | 21.6 分钟 | 8 分钟 | 13.6 分钟 ✅ |
| 延迟 P99(Latency) | ≤ 200ms | 21.6 分钟 | 18 分钟 | 3.6 分钟 ⚠️ |
| 错误率(Error Rate) | ≤ 0.1% | 21.6 分钟 | 22 分钟 | -0.4 分钟 ❌ |
上例中,错误率维度已耗尽预算,应优先修复错误率问题,暂停该维度的变更发布。
1.7 本章小结
- Error Budget 是 SLO 与实际 SLI 之间的差值,代表服务可承受的故障时间。
- SLI → SLO → Error Budget 构成可靠性量化管理的基础链路。
- 计算公式:
Error Budget = (1 - SLO) × 总时间窗口 - 实际不可用时间。 - 不同 SLO 等级对应不同的预算窗口,团队应根据业务重要性合理设定。
- Error Budget 耗尽时应触发变更冻结,这是 SRE 实践中最重要的纪律之一。