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%
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 都适合直接作为发布门禁。选择门禁指标时,应遵循以下原则:
- 用户可感知性: 优先选择直接影响终端用户体验的指标(如首页加载延迟、登录错误率)。
- 可测量性: 指标必须能够被稳定、实时地采集,且数据质量可靠。
- 可区分性: 指标应能区分“新版本引入的退化”与“基础设施或流量波动”。
- 可操作性: 当门禁阻断时,团队应能快速定位根因并采取回滚或修复措施。
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 类型、阈值、达标率、时间窗口和阻断行为。这种配置结构可以直接被发布工程自助门户解析,并在发布流水线中自动执行质量检查。