3. Error Budget 原理:SLO 与 SLI 的定义、Error Budget 的计算公式、Error Budget 的消耗与重置机制
Error Budget(错误预算)是连接服务可靠性目标与日常运维决策的核心量化工具。它通过将抽象的“高可用”诉求转化为具体的、可消耗的“预算额度”,使得 SRE 团队能够在稳定性与迭代速度之间做出数据驱动的权衡。理解 Error Budget 的前提是掌握 SLI 与 SLO 的定义,并熟悉其计算、消耗与重置机制。
3.1 SLI 与 SLO 的定义
SLI(Service Level Indicator,服务等级指标)是服务性能的直接量化度量。它回答的是“我们测量什么”的问题。常见的 SLI 包括请求延迟(如 P99 延迟 < 200ms)、错误率(如 HTTP 500 比例 < 1%)、吞吐量(如 QPS)和可用性(如成功请求占比)。
SLO(Service Level Objective,服务等级目标)是 SLI 的目标阈值。它回答的是“我们希望服务达到什么水平”的问题。SLO 通常以一段时间窗口内的百分比形式定义,例如“过去 30 天内,99.9% 的请求延迟低于 200ms”。
| 概念 | 定义 | 示例 | 关键属性 |
|---|---|---|---|
| SLI | 服务性能的原始测量指标 | 请求延迟、错误率、吞吐量 | 可观测、可采集、可聚合 |
| SLO | SLI 的目标阈值(含时间窗口) | 30 天内 99.9% 请求延迟 < 200ms | 可量化、可达成、可审计 |
| Error Budget | SLO 允许的失败额度 | 100% - 99.9% = 0.1% 的失败空间 | 可消耗、可重置、可告警 |
3.2 Error Budget 的计算公式
Error Budget 的本质是在 SLO 时间窗口内,服务允许发生的最大失败量。其核心计算公式如下:
Error Budget = 总请求量 × (100% - SLO 目标百分比)
其中:
- 总请求量:在 SLO 时间窗口内的所有有效请求数。
- SLO 目标百分比:以小数形式表示(如 99.9% = 0.999)。
实例计算:
假设某服务的 SLO 为“30 天内可用性 ≥ 99.9%”,且该 30 天窗口内的总请求量为 10,000,000 次。
Error Budget = 10,000,000 × (1 - 0.999)
= 10,000,000 × 0.001
= 10,000 次失败请求
这意味着,在 30 天内,该服务最多允许 10,000 次请求失败。一旦超过这个数字,SLO 即被违反。
3.3 Error Budget 的消耗与重置机制
Error Budget 的消耗是实时累积的。每一次不符合 SLO 的请求(如超时、错误码、慢响应)都会消耗预算。其消耗速率直接反映了服务的当前健康状态。
消耗规则:
- 按事件消耗:每个违反 SLI 阈值的请求消耗 1 单位预算。
- 按比例消耗:部分场景下,预算按失败请求占总请求的比例消耗(适用于滑动窗口模型)。
- 不可逆消耗:已消耗的预算在窗口期内不可恢复,直到窗口重置。
重置机制:
Error Budget 的重置依赖于 SLO 的时间窗口。常见的窗口类型包括:
| 窗口类型 | 重置行为 | 适用场景 | 优缺点 |
|---|---|---|---|
| 固定日历窗口 | 每月/每季度初重置为满额 | 业务月度结算、财务对齐 | 简单直观;但窗口末期预算紧张时可能影响发布节奏 |
| 滑动时间窗口 | 持续滚动,预算随旧数据过期而释放 | 实时监控、持续交付 | 更平滑,避免月末“突击”;但计算复杂度高 |
| 事件驱动窗口 | 重大发布或故障后手动重置 | 大版本上线、架构迁移 | 灵活;但需要人工介入,易引入主观判断 |
3.4 Error Budget 消耗速率的量化意义
Error Budget 的消耗速率比剩余值更能反映服务风险趋势。SRE 团队应建立基于消耗速率的告警体系:
- 正常消耗区:消耗速率低于预算生成速率的 50%,服务健康,可正常发布。
- 警告消耗区:消耗速率达到预算生成速率的 50%-80%,需关注根因,限制高风险变更。
- 危险消耗区:消耗速率超过预算生成速率的 80%,应立即冻结发布,启动应急响应。
3.5 多层级 Error Budget 设计
在微服务架构中,单一全局 Error Budget 往往不够精细。建议按服务画像设计多层级预算:
| 层级 | 范围 | SLO 示例 | Error Budget 用途 |
|---|---|---|---|
| 用户感知层 | 端到端用户体验 | 99.95% 首页加载 < 2s | 衡量整体服务质量,驱动业务决策 |
| 服务层 | 核心业务服务 | 99.9% 订单服务可用性 | 指导服务级发布与容量调整 |
| 基础设施层 | 数据库、缓存、网络 | 99.99% 数据库连接成功率 | 基础设施容量规划与故障隔离 |