3. 延迟基础概念:网络延迟、处理延迟、排队延迟的定义与测量单位(ms/μs)

在诊断 Ingress 控制器性能瓶颈时,延迟是衡量用户体验与系统健康度的核心指标。延迟并非单一数值,而是由多个独立阶段叠加而成。理解每种延迟的物理含义、产生位置及测量单位,是后续进行性能调优与 OPA 策略集成的数学基础。

3.1 延迟的三大核心分类

从数据包进入 Ingress 控制器到返回响应,延迟可分解为三个基本组成部分:网络延迟、处理延迟和排队延迟。三者之和即为端到端总延迟。

延迟类型 定义 典型测量单位 主要影响因素
网络延迟 数据包在物理链路与网络设备之间传输所花费的时间,包括传播、传输与处理时延。 ms(毫秒) 物理距离、带宽、链路质量、中间跳数
处理延迟 Ingress 控制器(如 Nginx、Envoy)从接收数据包到完成请求解析、路由匹配、TLS 终止、转发决策等内部计算所消耗的时间。 μs(微秒)~ ms CPU 性能、规则数量、TLS 握手、Lua/WasM 插件
排队延迟 请求在缓冲区或队列中等待被处理的时间,通常由瞬时流量超过处理能力引起。 μs(微秒)~ ms 并发连接数、队列深度、调度算法、背压机制
工程经验:在云原生环境中,网络延迟通常占端到端延迟的 30%~50%,而排队延迟是性能劣化时最容易被忽略的“隐形杀手”。当 Ingress 控制器 CPU 使用率低于 70% 但延迟飙升时,应优先排查排队延迟。

3.2 网络延迟详解

网络延迟是数据包从客户端到 Ingress 控制器物理接口所消耗的时间。它由四个子成分构成:

  • 传播延迟:信号在介质中传播的时间,由物理距离决定(光速约 2×10⁸ m/s)。例如,跨洲链路传播延迟通常在 50~150 ms。
  • 传输延迟:将数据包全部比特推送到链路所需的时间,由数据包大小与链路带宽决定。例如,1500 字节包在 1 Gbps 链路上的传输延迟约为 12 μs。
  • 处理延迟:路由器/交换机检查包头、查路由表、转发决策的时间,通常为几微秒到几十微秒。
  • 排队延迟:数据包在路由器输出队列中等待的时间,受网络拥塞影响。

在 Ingress 控制器场景中,网络延迟主要关注客户端到 Ingress Service 的 RTT(往返时间),通常使用 ping 或 tcpping 测量,单位是 ms。

# 测量客户端到 Ingress 控制器的网络延迟(RTT)
ping -c 10 ingress-controller.example.com
# 输出示例:
# rtt min/avg/max/mdev = 2.345/2.678/3.012/0.234 ms

3.3 处理延迟详解

处理延迟是 Ingress 控制器软件层面消耗的时间。以 Nginx Ingress Controller 为例,处理延迟包括:

  1. 连接建立:TCP 三次握手(约 0.5~2 RTT)。
  2. TLS 终止:证书验证、密钥交换、会话复用(约 1~10 ms,取决于密码套件)。
  3. 请求解析:HTTP 头部解析、URI 规范化。
  4. 路由匹配:遍历 Ingress 规则,匹配 Host 与 Path(复杂度 O(n),n 为规则数)。
  5. 负载均衡:选择上游后端(轮询/最少连接/一致性哈希)。
  6. 上游转发:建立到后端 Pod 的连接并发送请求。

处理延迟的测量单位通常为 μs(微秒),但在高规则数或复杂 TLS 场景下可能达到 ms 级别。使用 request_duration_seconds 指标中的 le 分桶可以观察处理延迟分布。

关键指标:处理延迟的 P99 值不应超过 50 ms。若超过,应检查 Ingress 规则数量(建议 < 500 条)、TLS 会话复用率(目标 > 90%)、以及 Lua 插件执行时间。

3.4 排队延迟详解

排队延迟发生在请求进入 Ingress 控制器的工作队列或连接池时。当并发请求数超过 worker 进程的处理能力,请求会在队列中等待。排队延迟是延迟抖动的最大来源。

排队延迟的数学模型基于 Little 定律:

L = λ × W
其中:
L = 队列中的平均请求数
λ = 平均到达率(请求/秒)
W = 平均排队延迟(秒)

当 λ 接近系统最大吞吐量时,排队延迟会呈指数级增长。测量排队延迟的常用方法:

  • 通过 nginx_ingress_controller_requests_current 与 nginx_ingress_controller_nginx_process_requests_total 计算队列深度。
  • 使用 histogram_quantile 分析 request_duration_seconds 的高分位值,高 P99 通常暗示排队延迟严重。
  • 直接观察 wait_time 指标(Envoy 提供)。
常见误区:不要将 CPU 使用率作为判断排队延迟的唯一依据。当 Ingress 控制器使用异步 I/O 模型(如 Nginx 的 epoll)时,CPU 可能空闲但请求仍在排队,原因是 worker 连接数耗尽或上游连接池满。

3.5 三种延迟的叠加关系与测量单位对比

端到端总延迟 = 网络延迟 + 处理延迟 + 排队延迟。三种延迟的测量单位与典型量级如下:

延迟类型 典型量级 测量单位 测量工具/指标
网络延迟 0.1 ms(同机房)~ 200 ms(跨洲) ms ping, tcpping, mtr
处理延迟 50 μs(简单路由)~ 20 ms(复杂 TLS+规则) μs / ms request_duration_seconds, span duration
排队延迟 0 μs(空闲)~ 500 ms(过载) μs / ms queue_depth, wait_time, histogram P99

在性能调优中,应优先定位量级最大的延迟成分。例如,若网络延迟已占 150 ms,优化处理延迟 5 ms 对总延迟改善有限;反之,若网络延迟仅 2 ms,而排队延迟达 200 ms,则应优先扩容或优化调度。

端到端延迟分解:三种延迟的叠加关系 客户端 网络延迟 (ms) Ingress 控制器 处理延迟 (μs~ms) 排队延迟 (μs~ms) 网络延迟 (ms) 后端 Pod 总延迟 = 网络延迟(入) + 处理延迟 + 排队延迟 + 网络延迟(出) 测量单位:网络延迟以 ms 为主,处理延迟与排队延迟以 μs~ms 为主

3.6 延迟测量单位的选择原则

在 Ingress 控制器性能监控中,正确选择测量单位直接影响诊断精度:

  • ms(毫秒,10⁻³ 秒):适用于网络延迟、端到端总延迟、TLS 握手时间。这些延迟通常在 1~200 ms 范围内,使用 ms 可避免数值过大或过小。
  • μs(微秒,10⁻⁶ 秒):适用于处理延迟中的路由匹配、头部解析、负载均衡计算。这些操作通常在 10~500 μs 范围内,使用 μs 能更精细地观察性能波动。
  • ns(纳秒,10⁻⁹ 秒):在 Ingress 控制器场景中极少使用,仅适用于 CPU 指令级优化或 eBPF 探针的精确测量。
工程建议:在 Prometheus 指标中,统一使用 秒(s) 作为存储单位(如 request_duration_seconds),但在告警规则和仪表盘展示时,根据延迟量级转换为 ms 或 μs。例如:
avg(rate(request_duration_seconds_sum[5m])) * 1000 → 显示为 ms
avg(rate(request_duration_seconds_sum[5m])) * 1e6 → 显示为 μs
延迟测量单位选择决策流程 测量延迟值 延迟 > 1 ms? 单位:ms 网络延迟/总延迟 单位:μs 处理延迟/排队延迟 提示:Prometheus 存储统一用秒(s),展示时按场景转换为 ms 或 μs

3.7 延迟测量在 Ingress 控制器中的实践要点

  • 使用 Histogram 指标:Prometheus 的 request_duration_seconds Histogram 是分析延迟分布的标准工具。配置合理的 bucket 边界(如 0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1.0 秒)以覆盖 ms 和 μs 范围。
  • 区分客户端与服务器端延迟:客户端测量的延迟包含网络延迟,服务器端测量的延迟仅为处理延迟+排队延迟。两者对比可估算网络延迟。
  • 关注 P99 而非平均值:平均值会掩盖长尾延迟。P99(99% 请求的延迟上限)更能反映排队延迟的影响。
  • 引入分布式追踪:使用 Jaeger 或 Zipkin 对 Ingress 请求进行追踪,可以精确分解每个阶段的延迟(网络、TLS、路由、上游)。
注意:在 OPA 策略集成场景中,处理延迟会因策略评估而增加。每个 OPA 策略评估通常增加 50~500 μs 的处理延迟。若策略数量超过 20 条或策略中包含复杂循环,处理延迟可能突破 10 ms,此时必须将 OPA 策略评估延迟单独监控并纳入排队延迟分析。