3. 延迟的度量与指标:延迟的四个黄金信号、P50/P95/P99 延迟、SLI/SLO/SLA 定义
在 API 网关的性能诊断中,度量(Metrics)是定位延迟问题的基石。没有精确的度量,任何调优都是盲目的。本章将深入剖析延迟诊断的四个黄金信号、百分位延迟的计算逻辑,以及 SLI/SLO/SLA 在网关场景下的定义与落地方式。
3.1 延迟的四个黄金信号
Google SRE 经典著作中提出的“四个黄金信号”——延迟(Latency)、流量(Traffic)、错误(Errors)、饱和度(Saturation),是 API 网关健康度评估的核心框架。这四个信号相互关联,共同构成延迟根因分析的起点。
| 黄金信号 | 网关场景定义 | 典型指标 | 延迟关联性 |
|---|---|---|---|
| 延迟 | 请求从进入网关到返回响应的总耗时 | P50/P95/P99 延迟、平均延迟 | 核心度量,直接反映用户体验 |
| 流量 | 网关处理的请求速率与并发数 | RPS(每秒请求数)、活跃连接数 | 流量突增可能导致延迟飙升 |
| 错误 | 网关返回的 HTTP 错误或超时比例 | 5xx 率、4xx 率、超时率 | 高错误率常伴随高延迟(如重试风暴) |
| 饱和度 | 网关资源(CPU、内存、连接池)的使用程度 | CPU 使用率、连接池占用率、队列深度 | 饱和度接近 100% 时延迟急剧恶化 |
实践要点: 在网关监控面板中,建议将四个黄金信号放在同一时间轴视图。当 P99 延迟出现异常时,优先检查饱和度(CPU/连接池)和错误率,排除资源瓶颈或上游故障,再分析流量模式变化。
3.2 P50 / P95 / P99 延迟:百分位度量的价值
平均延迟(Average Latency)容易被极端值掩盖。例如,99% 的请求在 10ms 内完成,但 1% 的请求耗时 5s,平均延迟仍可能显示为 60ms,完全掩盖了长尾问题。因此,网关延迟诊断必须使用百分位延迟。
- P50(中位数延迟):50% 的请求在此值以下完成。反映大多数用户的典型体验。
- P95(第 95 百分位延迟):95% 的请求在此值以下完成。代表常见的最差体验,是 SLA 的常用基准。
- P99(第 99 百分位延迟):99% 的请求在此值以下完成。代表长尾延迟,通常由 GC 暂停、连接池争用、慢查询等偶发因素导致。
调优优先级: 优先优化 P99 延迟,因为长尾请求往往是系统瓶颈的早期信号。P99 从 200ms 降到 50ms,对用户体验的提升远大于 P50 从 10ms 降到 5ms。
3.3 SLI / SLO / SLA:从指标到契约
延迟度量最终需要转化为可管理的服务等级目标。SLI、SLO、SLA 是三个不同层次的概念,在网关性能管理中必须清晰区分。
| 术语 | 全称 | 网关场景示例 | 核心作用 |
|---|---|---|---|
| SLI | Service Level Indicator (服务等级指标) |
网关 P99 延迟、错误率、吞吐量 | 可量化的原始度量数据 |
| SLO | Service Level Objective (服务等级目标) |
P99 延迟 ≤ 200ms,每月 99.9% 的时间达标 | 内部承诺的目标阈值 |
| SLA | Service Level Agreement (服务等级协议) |
P99 延迟 ≤ 500ms,每月 99.5% 达标,否则赔偿 | 对外契约,通常比 SLO 宽松 |
常见误区: 不要将 SLA 直接用作内部调优目标。SLA 是商业底线,SLO 才是工程红线。建议将网关 SLO 设置为 SLA 的 1.5~2 倍严格度(例如 SLA 要求 500ms,SLO 设为 200ms),为故障留出缓冲空间。
3.4 网关延迟 SLI 的采集与计算
在 API 网关中,延迟 SLI 通常通过以下方式采集:
- 请求入站时间戳:网关 Worker 接收请求的瞬间(T1)。
- 请求出站时间戳:网关将请求转发给上游服务的时间(T2)。
- 响应入站时间戳:网关收到上游响应的瞬间(T3)。
- 响应出站时间戳:网关将响应返回客户端的瞬间(T4)。
由此可分解出三个关键延迟子项:
- 网关处理延迟 = (T2 - T1) + (T4 - T3) —— 网关自身路由、认证、限流等逻辑耗时。
- 上游服务延迟 = T3 - T2 —— 上游业务处理耗时。
- 总延迟 = T4 - T1 —— 端到端用户体验延迟。
// 伪代码:网关延迟 SLI 采集示例
long t1 = System.nanoTime(); // 请求入站
// ... 路由、认证、限流逻辑 ...
long t2 = System.nanoTime(); // 转发上游
// 上游处理 ...
long t3 = System.nanoTime(); // 收到上游响应
// ... 响应处理、日志记录 ...
long t4 = System.nanoTime(); // 响应出站
long totalLatencyNs = t4 - t1;
long upstreamLatencyNs = t3 - t2;
long gatewayLatencyNs = totalLatencyNs - upstreamLatencyNs;
// 上报到 Prometheus Histogram
latencyHistogram.observe(totalLatencyNs / 1_000_000.0); // 转为 ms
3.5 延迟黄金信号联动分析
四个黄金信号并非孤立存在。下图展示了在网关延迟异常时,如何通过信号联动定位根因:
诊断口诀: 延迟高,先看饱和度;饱和度正常,再看错误率;错误率正常,最后分析流量特征。按此顺序可快速排除 80% 的常见延迟根因。
3.6 本章小结
- 四个黄金信号(延迟、流量、错误、饱和度)是网关延迟诊断的四大支柱,缺一不可。
- P50/P95/P99 百分位延迟比平均值更能反映真实用户体验,P99 是长尾问题的核心指标。
- SLI/SLO/SLA 构成从度量到契约的完整链路:SLI 是原始数据,SLO 是内部目标,SLA 是外部承诺。
- 延迟 SLI 应分解为网关处理延迟和上游服务延迟,便于精准定位瓶颈。