2. API延迟基础:延迟的定义、度量单位与用户体验影响

2.1 延迟的定义

在API网关与微服务架构中,延迟(Latency)指从客户端发出请求到收到完整响应所经过的总时间。它衡量的是“等待时间”,而非“处理能力”。延迟是Envoy网关可观测性中最核心的指标之一,直接反映服务链路的响应速度。

关键概念区分:延迟 ≠ 响应时间。响应时间包含网络传输、排队、处理、序列化/反序列化等全部环节;延迟通常特指端到端的单向或往返耗时。在Envoy中,延迟通常以请求-响应往返时间(RTT)为基准。

2.2 延迟的度量单位

Envoy网关及分布式追踪系统通常使用以下时间单位度量延迟:

单位 符号 换算关系 典型场景
毫秒 ms 1 ms = 1,000 μs API请求总耗时、上游服务响应时间、Envoy过滤器处理时间
微秒 μs 1 μs = 1,000 ns Envoy内部连接池获取、TLS握手、HTTP头部解析、内核上下文切换
纳秒 ns 1 ns = 0.001 μs CPU指令级耗时、内存访问延迟(通常不在API层面直接度量)
实践建议:在Envoy的访问日志(access log)和指标(metrics)中,延迟默认以毫秒(ms)为单位输出。当诊断微服务内部瓶颈时,建议将微秒(μs)作为辅助单位,用于分析Envoy自身的处理开销。

2.3 延迟对用户体验的影响

延迟对用户体验的影响遵循“响应时间阈值法则”,业界公认的参考标准如下:

  • 0–100 ms:用户感知为“即时”,操作流畅无等待感。
  • 100–300 ms:用户能感知轻微延迟,但通常不影响操作连续性。
  • 300–1000 ms:用户明显感到“卡顿”,注意力开始分散。
  • 1–3 s:用户可能中断操作,跳出率显著上升。
  • > 3 s:大部分用户放弃请求,造成业务损失。
注意:在微服务网关场景中,单个API请求可能经过3–10个上游服务。每个服务增加10 ms延迟,端到端就可能增加30–100 ms,直接跨越用户体验的“可接受”阈值。Envoy网关的延迟诊断必须从全链路视角出发。

2.4 延迟在Envoy网关中的分解

Envoy网关将一次API请求的端到端延迟分解为以下阶段:

  1. 网络传输延迟:客户端到Envoy、Envoy到上游服务的网络往返时间。
  2. Envoy内部处理延迟:包括TLS握手、HTTP/2帧解析、路由匹配、过滤器链执行、连接池获取。
  3. 上游服务处理延迟:上游业务逻辑执行时间。
  4. 响应传输延迟:响应数据从上游服务返回客户端的时间。
API请求延迟分解与用户体验阈值 网络传输 Envoy内部处理 上游服务处理 响应传输 即时体验 (0–100 ms) 可感知延迟 (100–300 ms) 明显卡顿 (300–1000 ms) 说明: • 每个阶段延迟都会累加到端到端总延迟中。 • Envoy内部处理延迟通常在 50 μs – 5 ms 之间,但在高并发或复杂过滤器链下可能膨胀。 • 当总延迟超过 300 ms 时,用户体验开始显著下降,需要立即诊断瓶颈阶段。 • 延迟诊断应优先关注“上游服务处理”和“网络传输”两个最大贡献者。

2.5 延迟与吞吐量的关系

延迟与吞吐量(Throughput)之间存在相互制约的关系。Envoy网关在高并发场景下,延迟会随吞吐量增加而非线性上升:

  • 低负载区:延迟稳定,吞吐量线性增长。
  • 拐点区:资源(CPU、连接池、线程)接近饱和,延迟开始加速上升。
  • 饱和区:延迟急剧恶化,吞吐量不再增长甚至下降。
Envoy诊断要点:当观察到延迟P99(第99百分位)与P50(中位数)差距超过5倍时,通常意味着存在长尾延迟问题,可能由连接池耗尽、上游服务慢实例或GC暂停引起。

2.6 延迟度量在Envoy中的实践

Envoy通过以下机制暴露延迟数据:

数据源 指标/字段 单位 说明
集群指标 envoy_cluster_upstream_rq_time ms 上游请求平均延迟,按统计分桶输出
访问日志 %DURATION% ms 请求总耗时(从接收首字节到发送末字节)
访问日志 %RESPONSE_DURATION% ms 上游服务响应时间(排除Envoy内部排队)
追踪 Span duration μs/ms 分布式追踪中各Span的耗时,支持微秒级精度
# Envoy访问日志格式示例(延迟相关字段)
log_format:
  "%START_TIME% %REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL% 
   %RESPONSE_CODE% %DURATION% %RESPONSE_DURATION% %UPSTREAM_HOST%"

# 输出示例
2025-03-15T10:30:45.123Z GET /api/orders HTTP/1.1 200 245 198 10.0.1.5:8080
# 说明:总延迟245ms,上游服务处理198ms,Envoy内部+网络=47ms
诊断切入点:当 %DURATION% 远大于 %RESPONSE_DURATION% 时,说明瓶颈在Envoy内部或网络传输;反之,瓶颈在上游服务。这是Envoy延迟诊断的第一原则。