3、SLI分类体系:可用性SLI、延迟SLI、吞吐量SLI、饱和度SLI、错误率SLI,五大类指标口径解析
在可靠性工程实践中,SLI(Service Level Indicator)是衡量服务行为质量的核心量化手段。根据测量维度与业务语义的不同,SLI 可归纳为五大经典分类:可用性、延迟、吞吐量、饱和度与错误率。每一类指标的口径定义、采集方式与阈值敏感度均存在显著差异,错误的口径选择将直接导致可靠性评审结论失真。
核心原则:SLI 口径必须与用户感知强对齐。例如,服务端返回 200 但页面白屏,可用性 SLI 应计为“不可用”。口径定义需同时覆盖“成功条件”与“失败排除规则”。
3.1 可用性 SLI:服务可达与功能正确的二元判定
可用性 SLI 衡量服务在给定时间窗口内是否能够正常响应用户请求。其通用计算公式为:
Availability = (成功请求数 / 总请求数) × 100%
但在工程落地中,“成功请求”的口径需要细化:
- HTTP 层面:仅统计 2xx/3xx 响应码,排除 4xx/5xx。
- 业务层面:即使返回 200,若响应体包含业务错误码(如“库存不足”),应计入失败。
- 探测层面:合成监控(Synthetic Monitoring)与真实用户监控(RUM)的口径需独立定义。
| 口径类型 | 成功判定条件 | 常见排除规则 |
|---|---|---|
| HTTP 可用性 | 状态码 2xx/3xx | 健康检查路径、预检请求 |
| 业务可用性 | 业务码为 success | 爬虫流量、内部重试 |
| 端到端可用性 | 用户操作流程完成 | 网络层丢包、CDN 回源超时 |
避坑提示:不要将“服务进程存活”等同于“可用性”。进程存活仅代表端口可达,无法反映请求能否被正确路由并返回有效数据。可用性 SLI 必须基于请求级别的成功/失败计数。
3.2 延迟 SLI:响应时间的分布与分位选择
延迟 SLI 衡量请求从发出到收到完整响应所消耗的时间。单一的平均延迟(Average Latency)极易被长尾请求掩盖,工程实践中通常采用分位延迟(Percentile Latency)作为口径。
- p50(中位数):反映大多数用户的典型体验。
- p95 / p99:反映长尾延迟,直接影响 SLO 达标判定。
- p999:用于超敏感场景(如实时交易、视频通话)。
口径案例:某 API 网关定义延迟 SLI 为“p99 延迟 ≤ 500ms”,采集窗口为 1 分钟滑动窗口。若某分钟 p99 延迟达到 520ms,则该分钟记为“SLO 违规”。注意:p99 延迟的统计必须排除健康检查与预连接请求。
| 分位 | 含义 | 典型阈值(Web 服务) |
|---|---|---|
| p50 | 50% 的请求快于该值 | ≤ 200ms |
| p95 | 95% 的请求快于该值 | ≤ 800ms |
| p99 | 99% 的请求快于该值 | ≤ 1500ms |
3.3 吞吐量 SLI:系统承载能力的量化口径
吞吐量 SLI 衡量系统在单位时间内成功处理的请求量或数据量。常见口径包括:
- RPS(Requests Per Second):每秒请求数,适用于 API 网关、Web 服务。
- QPS(Queries Per Second):每秒查询数,适用于数据库、缓存。
- TPS(Transactions Per Second):每秒事务数,适用于交易系统、支付链路。
- 吞吐量(Bytes/s):每秒传输字节数,适用于文件存储、流媒体。
吞吐量 SLI 的口径定义需明确“计数窗口”与“成功条件”:
吞吐量 = 成功请求数 / 时间窗口(秒)
时间窗口通常取 1 分钟或 5 分钟,避免瞬时毛刺导致误判
避坑提示:吞吐量 SLI 不应与“并发连接数”混淆。并发连接数反映的是系统同时维持的连接数量,而吞吐量反映的是实际处理速率。高并发低吞吐通常意味着请求被排队或阻塞。
3.4 饱和度 SLI:资源耗尽前的预警指标
饱和度 SLI 衡量系统资源被利用的程度,用于预测容量瓶颈。与可用性/延迟不同,饱和度是连续型指标,通常以百分比或值表示。
| 资源类型 | 典型饱和度口径 | 预警阈值 |
|---|---|---|
| CPU | CPU 使用率(%)、CPU 负载(Load Average) | ≥ 80% |
| 内存 | 内存使用率(%)、可用内存(MB) | ≥ 85% |
| 磁盘 I/O | 磁盘队列深度、IOPS 使用率 | 队列深度 ≥ 2×磁盘数 |
| 网络 | 带宽使用率(%)、连接池占用率 | ≥ 70% |
| 连接池 | 活跃连接数 / 最大连接数 | ≥ 80% |
工程实践:饱和度 SLI 通常与“限流阈值”联动。当饱和度超过 90% 时,系统应触发自动弹性伸缩或降级策略,而非等待可用性 SLI 恶化后再响应。
3.5 错误率 SLI:异常行为的量化与分类
错误率 SLI 衡量请求中失败或异常的比例。与可用性 SLI 的二元判定不同,错误率 SLI 允许更细粒度的分类:
- HTTP 错误率:4xx(客户端错误)与 5xx(服务端错误)需分开统计。
- 业务错误率:业务逻辑返回的错误码,如“余额不足”“权限不足”。
- 超时错误率:请求因超时而未完成,通常计入服务端错误。
- 熔断错误率:因熔断器打开而被拒绝的请求。
错误率 = (错误请求数 / 总请求数) × 100%
错误请求数 = HTTP 5xx + 业务错误码 + 超时 + 熔断拒绝
3.6 五大类 SLI 口径对比总表
| SLI 类别 | 核心度量 | 典型口径 | 采集粒度 | SLO 常见目标 |
|---|---|---|---|---|
| 可用性 | 成功/失败二元判定 | 成功率(%) | 每分钟 | ≥ 99.9% |
| 延迟 | 响应时间分布 | p99 延迟(ms) | 每分钟 | ≤ 500ms |
| 吞吐量 | 单位时间处理量 | RPS / QPS / TPS | 每分钟 | ≥ 1000 RPS |
| 饱和度 | 资源利用程度 | CPU 使用率(%) | 每 10 秒 | ≤ 80% |
| 错误率 | 异常请求占比 | 错误率(%) | 每分钟 | ≤ 0.1% |
评审要点:在可靠性评审报告中,每个 SLI 必须附带“口径定义说明”,包括:采集来源(如 Prometheus / 日志)、计算窗口(如 1 分钟滑动窗口)、排除规则(如忽略健康检查)、聚合方式(如取 p99 而非平均值)。缺少口径说明的 SLI 数据不具备可审计性。