4. 容量规划核心指标:QPS、连接数(并发连接)、内存占用、CPU使用率、延迟P99、错误率

在 Service Mesh 数据面升级过程中,容量规划的核心在于建立一组可量化、可观测、可回溯的指标体系。Envoy 作为数据面代理,其资源消耗与流量特征高度相关。以下六个指标构成了容量规划的基准坐标系,任何偏离基线的变化都应触发回滚或限流策略。

4.1 指标全景与优先级

不同指标在升级场景中的敏感度不同。下表按“升级风险关联度”从高到低排序,帮助 SRE 在监控大盘中确定关注优先级。

优先级 指标 升级风险关联 典型阈值(参考)
P0 错误率 直接反映代理转发异常、配置失效 > 0.1% 触发告警
P0 延迟 P99 升级导致线程模型或连接池变化 基线 + 50ms
P1 内存占用 内存泄漏或配置膨胀的直接表现 基线 + 20%
P1 CPU 使用率 影响 Pod 密度和调度稳定性 基线 + 30%
P2 QPS 容量水位标尺,用于归一化其他指标 不低于目标水位
P2 并发连接数 决定文件描述符与线程池压力 不超过上限 80%
实践建议: 在灰度升级的第一个批次中,优先观察 P0 指标。如果 P99 延迟和错误率在 5 分钟内保持稳定,再逐步放大批次规模。

4.2 指标详解与计算模型

4.2.1 QPS(每秒查询数)

QPS 是容量规划的“标尺”。Envoy 的 worker 线程模型决定了单核 QPS 上限。升级后应对比同等工作负载下的 QPS 吞吐,确保新版本代理没有引入额外的编解码开销。

  • 观测方式: Envoy 的 cluster.upstream_rq_total 指标按时间窗口计算。
  • 归一化公式: 单核 QPS = 总 QPS / 已分配 CPU 核数。
  • 升级关注点: 如果单核 QPS 下降超过 15%,说明新版本存在性能退化。

4.2.2 并发连接数

并发连接数直接影响 Envoy 的连接池大小和文件描述符消耗。升级过程中,连接数突增通常意味着客户端重连风暴或 keepalive 配置不兼容。

  • 观测方式: listener.downstream_cx_total 与 cluster.upstream_cx_active。
  • 关键阈值: 每个 worker 线程建议不超过 5000 个活跃连接。
  • 升级关注点: 对比升级前后同一时刻的连接数曲线,偏差超过 30% 需排查。

4.2.3 内存占用

Envoy 的内存占用主要由连接数、请求头大小、TLS 会话缓存和配置规模决定。升级后内存泄漏是最高频的故障模式之一。

  • 观测方式: 容器级 container_memory_working_set_bytes 或 Envoy 的 server.memory_allocated。
  • 基线建立: 在低负载时段记录稳定运行 30 分钟后的内存值。
  • 升级关注点: 如果内存持续增长且不回落,立即回滚。

4.2.4 CPU 使用率

CPU 使用率决定了 Pod 的调度密度和成本。Envoy 的 CPU 消耗与 QPS 和 TLS 握手频率强相关。

  • 观测方式: process.cpu_percent 或 cgroup 级别指标。
  • 升级关注点: 在相同 QPS 下,CPU 使用率上升超过 30% 说明新版本存在计算瓶颈。

4.2.5 延迟 P99

P99 延迟是用户体验的黄金指标。升级过程中,Envoy 的线程模型、连接池策略或路由算法变化都可能引入尾部延迟抖动。

  • 观测方式: Envoy 的 cluster.upstream_rq_time 直方图。
  • 基线对比: 取升级前 24 小时的 P99 作为基准线。
  • 升级关注点: P99 超过基线 50ms 或相对基线增长 20% 时,暂停批次。

4.2.6 错误率

错误率是升级健康度的“一票否决”指标。包括 5xx 响应、连接超时、重置和 Envoy 内部错误。

  • 观测方式: cluster.upstream_rq_5xx 与 cluster.upstream_cx_destroy_local。
  • 升级关注点: 任何非零的错误率上升都应视为严重事件,立即停止升级并回滚。
关键警告: 不要单独看某个指标。例如,QPS 下降可能被误认为“负载降低”,但实际原因是连接池耗尽导致请求被拒绝。必须将 QPS、连接数和错误率联合分析。

4.3 指标联动分析模型

下图展示了六个核心指标在升级过程中的联动关系。SRE 可以通过该模型快速定位故障根因。

升级容量指标联动分析模型 数据面升级 QPS 吞吐变化 并发连接数波动 错误率上升 CPU 使用率变化 内存占用变化 延迟 P99 抖动 联合判定:继续 / 暂停 / 回滚 说明:箭头方向表示指标传导关系。错误率和延迟 P99 为 P0 指标,直接决定升级是否继续。

4.4 指标采集与基线建立

在升级开始前,必须完成至少 7 天的基线数据采集。以下是推荐的采集配置示例:

# Prometheus 采集 Envoy 指标的关键配置
scrape_configs:
  - job_name: 'envoy-stats'
    metrics_path: /stats/prometheus
    static_configs:
      - targets: ['envoy-admin:9901']
    # 升级前基线窗口:7 天
    scrape_interval: 15s
    # 记录以下核心指标
    metric_relabel_configs:
      - source_labels: [__name__]
        regex: '(envoy_cluster_upstream_rq_total|envoy_listener_downstream_cx_total|envoy_server_memory_allocated|envoy_cluster_upstream_rq_time_bucket|envoy_cluster_upstream_rq_5xx|envoy_cluster_upstream_cx_active)'
        action: keep
基线计算规则:
  • QPS 基线: 取过去 7 天同一时间窗口的 P50 值。
  • 延迟 P99 基线: 取过去 7 天同一时间窗口的 P99 值。
  • 内存/CPU 基线: 取过去 7 天同一时间窗口的 P90 值(避免毛刺干扰)。
  • 错误率基线: 取过去 7 天的最大值(通常为 0)。

4.5 升级过程中的指标判读规则

以下判读规则适用于每个升级批次(通常为 1-5 个 Pod):

指标 绿灯(继续) 黄灯(观察) 红灯(回滚)
错误率 ≤ 基线值 基线 + 0.05% > 基线 + 0.1%
延迟 P99 ≤ 基线 + 20ms 基线 + 20~50ms > 基线 + 50ms
内存占用 ≤ 基线 + 10% 基线 + 10%~20% > 基线 + 20%
CPU 使用率 ≤ 基线 + 15% 基线 + 15%~30% > 基线 + 30%
QPS ≥ 基线 90% 基线 80%~90% < 基线 80%
并发连接数 ≤ 基线 + 10% 基线 + 10%~20% > 基线 + 20%
自动化建议: 将上述判读规则编码为升级流水线的 preStop hook。当任意指标进入红灯区间时,自动执行 kubectl rollout undo 并发送告警到 PagerDuty。

4.6 常见误判场景与规避

  • 场景一:QPS 下降但错误率未上升。 可能原因是客户端退避策略生效,导致请求自然减少。此时应检查连接数是否同步下降,如果连接数未降,说明存在连接泄漏。
  • 场景二:内存缓慢增长但未超阈值。 升级后 30 分钟内内存持续上升,即使未超 20% 阈值,也应延长观察窗口至 2 小时,排除内存泄漏。
  • 场景三:P99 抖动但 P50 正常。 说明存在少量长尾请求,可能由 TLS 握手或路由表重载引起。需要进一步分析 Envoy 的 worker 线程调度延迟。
核心原则: 容量规划不是静态的资源估算,而是动态的指标对比。升级过程中,任何指标偏离基线都意味着新版本引入了不可预期的行为变化。宁可回滚重试,不可带病上线。