1. SLO 与 Error Budget 基础概念

在云原生运维与站点可靠性工程(SRE)体系中,SLO(Service Level Objective)、SLI(Service Level Indicator) 和 Error Budget(错误预算) 是三个环环相扣的核心概念。它们共同构成了服务可靠性量化管理的基石,也是后续实现基于 Error Budget 的自动扩缩容配置的理论前提。

1.1 核心定义与关系

概念 英文全称 定义 类比
SLI Service Level Indicator 服务等级指标,是衡量服务质量某一维度的原始测量值。例如:请求延迟 P99、错误率、吞吐量。 汽车仪表盘上的“时速”读数
SLO Service Level Objective 服务等级目标,是对 SLI 设定的目标阈值或范围。例如:99.9% 的请求延迟 ≤ 200ms。 限速牌上的“最高时速 120 km/h”
Error Budget Error Budget 错误预算,是 SLO 允许的最大不可用时间或错误次数。计算公式:1 − SLO。 油箱中剩余的“容错油量”
核心关系公式:
Error Budget = 1 − SLO(以百分比表示)
例如:SLO = 99.9% → Error Budget = 0.1%(即每 30 天允许约 43.2 分钟的不可用时间)

1.2 三者的层级与流转关系

下图展示了从原始指标到决策驱动的完整链路:

SLI → SLO → Error Budget 核心关系图 SLI 服务等级指标 (延迟/错误率/吞吐量) 设定阈值 SLO 服务等级目标 (99.9% 请求 ≤ 200ms) 计算得出 Error Budget 错误预算 (1 − SLO = 0.1%) 决策驱动:自动扩缩容 / 发布节奏 / 运维优先级 Error Budget 剩余量 → 触发扩缩容策略 关键理解 SLI 是原始数据,SLO 是目标承诺,Error Budget 是可用容错空间。 当 Error Budget 充足时,团队可以更激进地发布新版本;当 Budget 耗尽时,应优先保障稳定性。

1.3 典型 SLI 指标维度

在实际生产环境中,常见的 SLI 指标包括但不限于以下维度:

  • 可用性(Availability):服务成功响应的请求占比,通常以 5xx 错误率为衡量标准。
  • 延迟(Latency):请求从发出到收到完整响应的时间,常用 P50、P95、P99 分位值。
  • 吞吐量(Throughput):单位时间内成功处理的请求数(RPS/QPS)。
  • 错误率(Error Rate):返回 HTTP 5xx 或业务错误码的请求比例。
  • 饱和度(Saturation):资源使用程度,如 CPU 使用率、内存占用、连接池占用率。
实践建议: 选择 SLI 时遵循“用户可见”原则——只衡量用户能直接感知到的服务质量维度。例如,对于 API 网关服务,延迟和错误率是核心 SLI;对于数据库服务,查询延迟和连接成功率更为关键。

1.4 SLO 与 Error Budget 的典型数值对照

SLO 目标 Error Budget(百分比) 30 天允许不可用时间 365 天允许不可用时间
99.9%(三个九) 0.1% ≈ 43.2 分钟 ≈ 8.76 小时
99.95% 0.05% ≈ 21.6 分钟 ≈ 4.38 小时
99.99%(四个九) 0.01% ≈ 4.32 分钟 ≈ 52.56 分钟
99.999%(五个九) 0.001% ≈ 25.9 秒 ≈ 5.26 分钟
注意: 并非 SLO 越高越好。过高的 SLO(如 99.999%)会大幅压缩 Error Budget,导致运维团队几乎没有容错空间,频繁触发告警和扩缩容,反而增加系统复杂度和成本。建议根据业务重要性和成本预算合理选择 SLO 目标。

1.5 Error Budget 的消耗与重置机制

Error Budget 的消耗是一个滑动窗口累积过程,通常以 30 天为周期滚动计算:

  1. 消耗来源:任何违反 SLO 的事件(如延迟超标、错误率上升)都会消耗 Error Budget。
  2. 重置机制:Error Budget 不是“月初清零”,而是基于滑动窗口持续滚动——每天最旧的数据点被丢弃,最新数据点加入计算。
  3. 消耗速率:当服务持续处于健康状态时,Error Budget 会逐渐恢复;当故障发生时,Budget 快速消耗。
Error Budget 滑动窗口消耗与恢复示意 Day 1 Day 15 Day 30 Error Budget 总量 = 100% 健康 故障 恢复中 健康 故障 健康恢复 滑动窗口机制:每天移除最旧一天的消耗数据,加入最新一天的数据,实现 Budget 动态滚动

1.6 与自动扩缩容的关联

在本课程中,Error Budget 将作为触发自动扩缩容的核心信号:

  • Budget 充足(> 50%):服务健康,保持当前副本数或适当缩容以节省成本。
  • Budget 中等(20% ~ 50%):进入预警状态,适当扩容以增加冗余。
  • Budget 紧张(< 20%):立即触发快速扩容,全力保障 SLO 不被突破。
  • Budget 耗尽(0%):触发最高优先级响应,强制扩容并暂停非关键发布。