4. 容量规划核心指标:CPU、内存、连接数、请求吞吐量、延迟百分位

Envoy Sidecar 升级过程中,容量规划的核心目标是确保新版本代理在承载生产流量时,资源消耗与服务质量均不劣化。本节定义五个必须监控与校准的核心指标,并给出每个指标的基线校准方法。

4.1 指标全景与优先级

五个指标构成容量规划的“五维模型”,缺一不可。下表列出各指标在升级场景中的关注点与优先级:

指标 升级关注点 优先级 典型异常信号
CPU 线程模型变化、TLS 握手开销、Lua/Wasm 过滤 P0 用户态 CPU 飙升,worker 线程饥饿
内存 连接池膨胀、缓存命中率、堆外内存泄漏 P0 RSS 持续增长,OOMKilled 重启
连接数 FD 耗尽、upstream 连接池上限、空闲连接回收 P1 文件描述符耗尽,upstream_rq_pending_failure
请求吞吐量 QPS/RPS 拐点、请求合并效率、限流触发频率 P1 吞吐量下降超过 5%,p99 延迟同步上升
延迟百分位 p50/p99/p999 尾部延迟、请求排队时间 P0 p99 延迟翻倍,p999 出现毛刺
基线校准原则:升级前至少采集 7 天生产基线数据,覆盖业务高峰与低谷。升级后以“同流量场景下,五项指标均不劣于基线 5%”为通过标准。

4.2 CPU 指标与校准方法

Envoy 是事件驱动模型,CPU 消耗主要来自 worker 线程处理 I/O 事件、TLS 加解密、HTTP 头部解析和过滤器链执行。升级后 CPU 基线校准需关注三个维度:

  • 用户态 CPU 使用率:通过 process_cpu_seconds_total 或容器 cgroup 的 cpuacct.usage 采集,对比升级前后相同 QPS 下的 CPU 时间。
  • worker 线程饱和度:Envoy 的 server.worker_threads 指标显示每个 worker 的事件循环延迟。若升级后 worker 循环延迟增加超过 10%,说明 CPU 成为瓶颈。
  • TLS 握手开销:升级 TLS 库或密码套件后,需对比 ssl.handshake 耗时。建议使用 envoy_ssl_handshake_time 直方图。
# 典型 CPU 基线采集命令(PromQL)
# 升级前基线
avg by (pod) (rate(process_cpu_seconds_total{job="envoy-sidecar"}[5m]))

# 升级后对比
avg by (pod) (rate(process_cpu_seconds_total{job="envoy-sidecar-new"}[5m]))

4.3 内存指标与校准方法

Envoy 内存消耗分为堆内存(heap)和堆外内存(off-heap)。升级后内存基线校准重点关注:

  • RSS(驻留内存):容器级别 container_memory_rss 或 Envoy 的 envoy_server_memory_allocated。升级后 RSS 不应超过基线的 110%。
  • 连接池内存:每个 upstream 连接池会占用固定大小的缓冲区。升级后若连接池数量或大小发生变化,需对比 envoy_cluster_membership_healthy 与内存增长曲线。
  • 缓存与过滤器内存:如使用 Redis 缓存过滤器或 Wasm 扩展,需单独监控 envoy_wasm_memory 或自定义缓存指标。
常见陷阱:Envoy 1.24+ 引入了新的内存分配器(tcmalloc 优化),升级后 RSS 可能暂时下降,但若业务流量模式变化,内存可能反弹。建议升级后持续观察 48 小时,确认无内存泄漏。

4.4 连接数指标与校准方法

连接数直接影响文件描述符(FD)消耗和 upstream 连接池健康度。升级后需校准以下连接指标:

指标名称 Envoy 统计项 基线校准方法
活跃下游连接 listener.downstream_cx_active 对比升级前后相同并发下的活跃连接数,偏差应 < 5%
活跃上游连接 cluster.upstream_cx_active 检查连接池复用率,升级后不应出现连接数暴增
连接建立速率 cluster.upstream_cx_total 速率突增可能表示连接池配置失效或健康检查异常
空闲连接数 cluster.upstream_cx_idle 空闲连接过多会浪费 FD,需对比基线中的空闲比例

4.5 请求吞吐量与延迟百分位

吞吐量与延迟是容量规划的“结果指标”,直接反映用户体验。升级后必须同时校准这两个指标,避免“吞吐量达标但延迟劣化”的陷阱。

4.5.1 请求吞吐量(QPS/RPS)

Envoy 的 cluster.upstream_rq_total 和 listener.downstream_cx_destroy 可用于计算吞吐量。校准步骤:

  1. 在升级前记录生产流量的峰值 QPS(取 99 百分位)。
  2. 升级后,在灰度环境中逐步增加流量至基线峰值 QPS 的 80%、100%、120%。
  3. 观察 envoy_cluster_upstream_rq_completed 速率是否线性增长。若在 100% 流量时出现拐点,说明新版本吞吐量上限下降。

4.5.2 延迟百分位(p50/p99/p999)

Envoy 内置直方图统计 envoy_cluster_upstream_rq_time,可直接输出 p50、p99、p999 延迟。升级后延迟基线校准需注意:

  • p50 延迟:反映正常流量下的处理效率,升级后不应增加超过 2ms。
  • p99 延迟:反映尾部延迟,升级后不应增加超过 10ms 或基线的 20%。
  • p999 延迟:反映极端毛刺,升级后若出现超过 500ms 的毛刺,需立即回滚。
延迟-吞吐量联合分析:绘制“吞吐量 vs p99 延迟”散点图。若升级后曲线左移(相同吞吐量下延迟更高)或上移(延迟随吞吐量增长更快),说明容量规划基线已偏移,需调整资源分配或回滚版本。
Envoy Sidecar 容量规划五维指标关系图 Envoy Sidecar CPU 使用率 内存 RSS 连接数 请求吞吐量 延迟百分位 校准方法:升级前后在相同流量场景下采集五维数据,任一指标劣化超过 5% 即触发回滚或资源调整。

4.6 基线校准流程总结

将五个指标整合为一个可执行的校准流程,确保升级过程可量化、可回滚:

  1. 采集基线:升级前 7 天,每 1 分钟采集一次五维指标,计算 p50/p95/p99 作为基线。
  2. 灰度验证:在 1% 流量下运行新版本 30 分钟,对比五维指标是否在基线 ±5% 内。
  3. 逐步放量:依次提升至 10%、50%、100% 流量,每阶段观察 15 分钟,记录指标变化。
  4. 异常判定:若任一指标超出基线阈值(CPU > 10%,内存 > 10%,连接数 > 5%,吞吐量下降 > 5%,p99 延迟增加 > 20%),立即回滚。
  5. 持续监控:全量升级后继续监控 48 小时,确认无延迟毛刺或内存泄漏。
自动化建议:将五维指标写入 Prometheus 告警规则,升级期间自动触发“容量基线偏离”告警,避免人工漏判。