2. SLO 与 SLI 基础:服务水平指标(SLI)定义、服务水平目标(SLO)设定原则、常见的 SLI 类型
在构建自愈系统之前,必须建立一套可量化的“健康标尺”。SLI(Service Level Indicator,服务水平指标)是具体的测量值,SLO(Service Level Objective,服务水平目标)是期望的目标区间。两者共同构成 Error Budget 的计算基础。
2.1 服务水平指标(SLI)定义
SLI 是对服务某个特定维度的直接测量,通常表示为一段时间内的比率、分布或计数。一个有效的 SLI 必须满足:
- 可观测:能从监控系统直接采集,无需人工估算。
- 可重复:不同观测者在同一时段应得到一致结果。
- 面向用户:优先测量用户感知到的行为,而非内部组件状态。
定义公式示例:
SLI延迟 = 所有请求中,服务端响应时间 ≤ 200ms 的请求占比
SLI错误率 = 返回 HTTP 5xx 状态码的请求数 ÷ 总请求数
SLI延迟 = 所有请求中,服务端响应时间 ≤ 200ms 的请求占比
SLI错误率 = 返回 HTTP 5xx 状态码的请求数 ÷ 总请求数
2.2 服务水平目标(SLO)设定原则
SLO 是 SLI 的目标阈值或范围,设定时需遵循以下原则:
| 原则 | 说明 | 反例 |
|---|---|---|
| 用户边界对齐 | SLO 应反映用户可容忍的降级程度,而非系统极限 | 内部 P99 延迟 50ms,但用户端因网络抖动实际感知 500ms |
| 可达成性 | 目标不应追求 100%,需预留合理的 Error Budget | 设定 99.999% 可用性,但基础设施仅支持 99.9% |
| 时间窗口明确 | 必须指定评估周期(如 30 天滚动窗口) | “全年可用性 99.9%” 无法用于日常运维决策 |
| 可测量性 | SLI 必须能精确计算,避免模糊描述 | “大部分请求应该很快” |
黄金法则:SLO 越严格,Error Budget 越少,系统变更速度越慢。建议从“比用户期望略好一点”开始,逐步收紧。
2.3 常见的 SLI 类型
生产环境中,以下三类 SLI 覆盖了绝大多数服务健康评估场景:
2.3.1 延迟(Latency)
衡量请求从发出到收到完整响应的时间。通常使用百分位分布而非平均值:
- P50(中位数):反映典型用户体验。
- P95 / P99:反映尾部延迟,直接影响长尾用户流失。
- P999:用于核心交易链路,容忍度极低。
2.3.2 错误率(Error Rate)
衡量请求失败的比例。需区分:
- 显式错误:HTTP 5xx、RPC 超时、业务返回错误码。
- 隐式错误:返回 200 但内容为空、数据不一致、校验失败。
2.3.3 吞吐量(Throughput)
衡量系统在单位时间内处理的请求量。通常与延迟联合观察:
- QPS(Queries Per Second):适用于 API 网关、数据库。
- RPS(Requests Per Second):适用于 Web 服务器。
- TPS(Transactions Per Second):适用于支付、订单等事务型系统。
常见误区:不要将“CPU 使用率”或“内存占用”直接作为 SLI。这些是资源指标,不是用户可感知的服务水平指标。只有当资源耗尽导致延迟或错误率上升时,才通过 SLI 间接反映。
2.4 SLI 与 SLO 关系图
下图展示了从原始监控数据到 Error Budget 的完整链路:
2.5 三类 SLI 的典型 SLO 参考
| SLI 类型 | 典型测量方式 | 宽松 SLO | 严格 SLO | 适用场景 |
|---|---|---|---|---|
| 延迟 | P99 响应时间 | ≤ 1000ms | ≤ 100ms | API 网关、搜索服务 |
| 错误率 | 5xx 占比 | ≤ 1% | ≤ 0.01% | 支付、订单核心链路 |
| 吞吐量 | QPS / RPS | ≥ 峰值 80% | ≥ 峰值 95% | 秒杀、流媒体、消息队列 |
2.6 SLI 聚合与多维度 SLO
实际系统中,一个服务通常同时监控多个 SLI,并设定复合 SLO。下图展示了一个典型微服务的 SLI 仪表盘结构:
实践要点:
• 每个 SLI 必须对应一个明确的 SLO,避免“只测量不设目标”。
• SLO 的评估窗口建议使用 30 天滚动窗口,兼顾稳定性与灵敏度。
• 当多个 SLI 同时逼近 SLO 边界时,优先保障错误率和延迟,吞吐量可适当降级。
• 每个 SLI 必须对应一个明确的 SLO,避免“只测量不设目标”。
• SLO 的评估窗口建议使用 30 天滚动窗口,兼顾稳定性与灵敏度。
• 当多个 SLI 同时逼近 SLO 边界时,优先保障错误率和延迟,吞吐量可适当降级。