SLO 基础回顾:定义、SLI 与错误预算的关系

在深入调优部署频率与变更失败率之前,必须重新锚定 SLO 的核心概念。SLO 不是简单的“可用性百分比”,而是一套由 SLI(服务等级指标)、SLO(目标)和错误预算构成的闭环反馈系统。本节将拆解这三个要素的定义及其数学关系。

1. 核心概念定义

术语 定义 示例(API 服务)
SLI 服务质量的量化指标,直接反映用户体验 请求延迟 ≤ 200ms 的比例
SLO SLI 的目标阈值,是团队承诺的服务水平 99.9% 的请求延迟 ≤ 200ms
错误预算 SLO 允许的最大不可用时间或失败次数 每月最多 43.2 分钟超时
关键区分:SLO 是目标,不是承诺。SLA(服务等级协议)才是对外承诺,通常比 SLO 更宽松。内部 SLO 应比 SLA 严格 10%-20%,为故障预留缓冲。

2. SLI 与错误预算的数学关系

错误预算的计算公式非常简单,但理解其业务含义是 SRE 的核心能力:

错误预算 = 总时间窗口 × (1 - SLO)

示例(30 天窗口,SLO = 99.9%):
总秒数 = 30 × 24 × 3600 = 2,592,000 秒
错误预算 = 2,592,000 × (1 - 0.999) = 2,592 秒 ≈ 43.2 分钟

这意味着:在一个月内,服务最多只能有 43.2 分钟的“坏请求”(延迟 > 200ms 或 5xx 错误)。一旦消耗完毕,所有变更必须冻结,直到下一个窗口重置。

常见误区:错误预算不是“可用时间”,而是“允许失败的时间”。如果服务在月初就耗尽预算,说明 SLI 严重偏离目标,需要立即停止变更并启动复盘,而不是继续发布。

3. SLI 选择原则:用户视角优先

不是所有指标都适合作为 SLI。Google SRE 经典原则是:只测量用户能感知到的行为。以下是 SLI 选择的四个黄金维度:

  • 可用性:请求成功比例(如 HTTP 200/5xx 比率)
  • 延迟:响应时间分布(如 p99 ≤ 500ms)
  • 吞吐量:每秒处理请求数(通常作为容量规划指标,不直接用于 SLO)
  • 正确性:数据一致性或业务逻辑正确率(如支付成功率)

对于部署频率与变更失败率调优,最相关的 SLI 通常是可用性和延迟——变更失败会直接导致这两个指标恶化。

4. 错误预算消耗与变更风险的关系

下图展示了 SLI、SLO 与错误预算在变更周期中的动态关系:

SLI → SLO → 错误预算 动态关系图 SLI 采集 延迟 / 错误率 / 吞吐 SLO 目标 99.9% 延迟 ≤ 200ms 错误预算 剩余 32.5 分钟 对比 计算 变更决策引擎 错误预算消耗率 < 预算阈值 → 允许变更 | 消耗率 > 阈值 → 冻结变更 输入 变更影响 SLI(反馈循环) 💡 核心逻辑: 错误预算消耗速度 = 变更失败率 × 变更频率。调优的目标是:在错误预算不耗尽的前提下,最大化部署频率。

5. 错误预算消耗速率:变更调优的关键指标

仅仅知道剩余错误预算是不够的,SRE 需要关注消耗速率。以下是两种典型场景的对比:

场景 剩余预算 消耗速率 建议操作
月初剩余 90% 充足 缓慢(日均消耗 0.3%) 正常发布,可适当加速
月中剩余 20% 紧张 快速(日均消耗 3%) 立即冻结变更,启动根因分析
月末剩余 5% 濒危 加速(日均消耗 5%) 仅允许紧急热修复,其余冻结
调优切入点:部署频率与变更失败率直接决定错误预算消耗速率。如果每次变更的失败率是 5%,每天部署 10 次,则每天消耗 0.5% 的预算(假设每次失败消耗 0.05%)。通过降低失败率或减少部署次数,可以显著延长预算寿命。

6. 多层级 SLO 架构

在实际服务目录中,不同组件应有不同的 SLO 粒度。下图展示了一个典型的三层 SLO 架构:

服务目录中的多层级 SLO 架构 用户体验 SLO(对外承诺) 99.95% 可用性,p99 延迟 ≤ 500ms 服务级 SLO(内部目标) API 网关 99.99% | 订单服务 99.95% | 支付服务 99.99% 组件级 SLO(变更调优目标) 数据库写入延迟 p99 ≤ 50ms | 缓存命中率 ≥ 98% | 消息队列延迟 p99 ≤ 100ms 🔑 组件级 SLO 是变更调优的直接作用对象:降低变更失败率 → 提升组件可用性 → 支撑服务级 SLO → 保障用户体验

7. 本节要点总结

  • SLI 是测量指标,SLO 是目标阈值,错误预算 是允许的失败空间。
  • 错误预算 = 总时间 × (1 - SLO),消耗速率比剩余量更重要。
  • 变更失败直接消耗错误预算,部署频率决定消耗速度。
  • 多层级 SLO 架构中,组件级 SLO 是变更调优的切入点。
  • 错误预算耗尽时应立即冻结变更,而非继续发布。