2. SLO 基础:服务等级目标定义、SLI 与 SLO 的关系、常见指标类型

在发布工程中,服务等级目标(SLO)是衡量服务是否“健康”的核心标尺。它不是一个抽象承诺,而是一个可量化、可验证的阈值,直接决定发布门禁是否放行。理解 SLO 的前提是掌握其底层数据来源——服务等级指标(SLI),以及两者之间的映射关系。

2.1 服务等级指标(SLI)与服务等级目标(SLO)

SLI 是对服务某个维度(如延迟、错误率)的原始测量值,通常是一个时间序列数据。例如:“过去 5 分钟 P99 延迟为 120ms”。SLO 则是基于 SLI 设定的目标阈值,表示服务在特定时间窗口内必须达到的可靠性水平。例如:“在 30 天滚动窗口内,P99 延迟 ≤ 200ms 的比例 ≥ 99.9%”。

两者的核心关系可以概括为:SLO = SLI + 目标阈值 + 时间窗口。没有 SLI,SLO 就是空谈;没有 SLO,SLI 就缺乏行动指引。

关键公式: SLO 达标率 = (符合目标阈值的 SLI 数据点总数 / 时间窗口内 SLI 数据点总数) × 100%
SLI 与 SLO 关系映射图 SLI(服务等级指标) 原始测量值 时间序列数据 例如:P99 延迟 例如:错误率 例如:吞吐量 “是什么” + 阈值 + 时间窗口 SLO(服务等级目标) 可量化的目标 可验证的阈值 例如:P99 ≤ 200ms 达标率 ≥ 99.9% 30 天滚动窗口 “要做到什么程度” 发布门禁判断依据 当前 SLI 是否满足 SLO? 满足 → 放行 不满足 → 阻断

2.2 常见的 SLO 指标类型

在发布质量门禁中,最常用的 SLO 指标类型集中在以下三类。它们覆盖了用户可感知的服务质量核心维度:

指标类型 典型 SLI 定义 常见 SLO 示例 发布门禁关注点
延迟 请求响应时间(P50 / P95 / P99) P99 延迟 ≤ 500ms,达标率 ≥ 99.5% 新版本是否引入慢查询或锁竞争
错误率 HTTP 5xx / 4xx 占比、业务错误码占比 错误率 ≤ 0.1%,达标率 ≥ 99.9% 新版本是否引入异常或逻辑缺陷
吞吐量 每秒请求数(RPS / QPS) 吞吐量 ≥ 基线值的 95%,达标率 ≥ 99% 新版本是否导致性能退化或资源瓶颈
实践建议: 在发布门禁中,建议优先选择 错误率 和 延迟 作为“硬门禁”指标,因为它们直接反映用户端体验。吞吐量更适合作为“软门禁”或告警指标,因为吞吐量波动有时与流量模式相关,不一定代表版本缺陷。

2.3 指标选择与发布门禁的映射

并非所有 SLI 都适合直接作为发布门禁。选择门禁指标时,应遵循以下原则:

  1. 用户可感知性: 优先选择直接影响终端用户体验的指标(如首页加载延迟、登录错误率)。
  2. 可测量性: 指标必须能够被稳定、实时地采集,且数据质量可靠。
  3. 可区分性: 指标应能区分“新版本引入的退化”与“基础设施或流量波动”。
  4. 可操作性: 当门禁阻断时,团队应能快速定位根因并采取回滚或修复措施。
指标类型与发布门禁映射关系图 延迟 P50 / P95 / P99 错误率 5xx / 4xx / 业务错误 吞吐量 RPS / QPS 硬门禁 硬门禁 软门禁 / 告警 硬门禁:阻断发布 | 软门禁:触发告警,人工判断

2.4 定义 SLO 的常见陷阱

避坑指南: 以下错误在 SLO 定义中非常普遍,会导致发布门禁失效或误报。
  • 指标粒度不匹配: 使用全局平均延迟作为 SLI,掩盖了部分慢请求对用户体验的影响。应优先使用百分位指标(P95 / P99)。
  • 时间窗口过短: 仅使用 5 分钟窗口的 SLO 容易因瞬时抖动而误阻断发布。建议使用 30 天或 7 天滚动窗口。
  • 阈值设置过于严格: 将 SLO 设为 99.999% 可能导致频繁误阻断,且运维成本极高。建议从 99.9% 开始,逐步收紧。
  • 忽略业务维度: 所有接口使用同一个 SLO,导致关键支付接口与次要查询接口“同等待遇”。建议按业务重要性分级定义 SLO。

2.5 发布门禁中的 SLO 配置示例

以下是一个典型的发布质量门禁 SLO 配置片段,展示了如何在配置文件中定义门禁规则:

# 发布质量门禁 SLO 配置示例 (YAML)
release_gate:
  - name: "核心API延迟门禁"
    sli_type: "latency_p99"
    threshold_ms: 500
    compliance_target: 99.5          # 达标率 ≥ 99.5%
    window: "30d"                    # 30天滚动窗口
    action: "block"                  # 阻断发布

  - name: "错误率门禁"
    sli_type: "error_rate_5xx"
    threshold_percent: 0.1
    compliance_target: 99.9
    window: "7d"
    action: "block"

  - name: "吞吐量退化告警"
    sli_type: "throughput_rps"
    threshold_percent_of_baseline: 95  # 不低于基线95%
    compliance_target: 99.0
    window: "1h"
    action: "warn"                   # 仅告警,不阻断
关键点: 每个门禁规则都明确指定了 SLI 类型、阈值、达标率、时间窗口和阻断行为。这种配置结构可以直接被发布工程自助门户解析,并在发布流水线中自动执行质量检查。