1. Envoy 网关概述:架构、核心概念与云原生角色
Envoy 是一个由 Lyft 开源、后捐献给 CNCF 的高性能七层代理,也是目前云原生生态中使用最广泛的 数据面 组件。在延迟诊断场景中,理解 Envoy 的底层架构和核心抽象是定位问题的第一步。
1.1 Envoy 整体架构
Envoy 采用 单进程多线程 模型,主线程负责配置管理与统计刷新,工作线程通过 非阻塞 I/O 处理实际流量。下图展示了 Envoy 的内部线程模型与数据流路径:
延迟诊断提示: Envoy 的 Worker 线程之间不共享连接,每个 Worker 独立维护自己的连接池。如果上游服务实例数少于 Worker 数,可能出现 连接倾斜,导致部分请求排队等待连接建立,增加 P99 延迟。
1.2 三大核心概念
Envoy 的配置模型围绕三个核心抽象构建:Listener、Route、Cluster。理解这三者的关系是进行延迟分析的基础。
| 核心概念 | 作用 | 延迟相关属性 |
|---|---|---|
| Listener | 定义 Envoy 监听的 IP:Port 及传输层协议(TCP / UDP / QUIC) | 监听 backlog、SO_REUSEPORT、TLS 握手超时 |
| Route | 将入站请求按域名、路径、Header 等规则匹配到目标 Cluster | 路由匹配复杂度、重定向/重写开销、超时配置 |
| Cluster | 定义上游服务端点集合及负载均衡、健康检查、连接池策略 | 负载均衡算法、连接池大小、健康检查间隔、熔断阈值 |
1.3 核心概念关系图
下图展示了从客户端请求到上游服务的完整路径,以及每个阶段可能引入延迟的环节:
1.4 Envoy 在云原生中的角色
在 Kubernetes 和 Service Mesh 架构中,Envoy 通常扮演以下关键角色:
- 数据面代理:作为 Sidecar 注入到每个 Pod,拦截所有进出流量,实现流量治理、可观测性与安全策略。
- API 网关:以独立 Deployment 形式部署在集群入口,承担 TLS 终止、路由分发、限流、认证等网关职责。
- Mesh 网关:在多集群或多网络场景下,作为跨集群流量入口/出口网关,处理服务网格间的通信。
- 可观测性数据源:Envoy 原生输出丰富的 统计指标(Stats)、访问日志(Access Logs)、分布式追踪(Tracing),是延迟诊断的核心数据来源。
延迟诊断价值: 在云原生环境中,Envoy 是唯一能同时看到 客户端侧延迟(Listener 入站)和 上游侧延迟(Cluster 出站)的组件。通过对比
upstream_rq_time 和 request_duration 指标,可以快速定位延迟是发生在网络传输、上游处理还是 Envoy 内部。
1.5 核心概念对比表
| 维度 | Listener | Route | Cluster |
|---|---|---|---|
| 配置位置 | 静态监听器 / LDS | 静态路由 / RDS | 静态集群 / CDS |
| 动态更新 | LDS (Listener Discovery Service) | RDS (Route Discovery Service) | CDS (Cluster Discovery Service) |
| 延迟指标 | listener.downstream_cx_duration |
http.router.route_match_duration |
cluster.upstream_rq_time |
| 常见瓶颈 | TLS 握手、连接 backlog | 正则路由、大量虚拟主机 | 连接池耗尽、慢启动、熔断 |
常见误区: 很多运维人员将延迟问题直接归因于上游服务,却忽略了 Envoy 自身的处理耗时。例如,
router_match_duration 在拥有数千条路由规则时可能达到毫秒级,对于延迟敏感的服务(如 < 10ms 的接口)不可忽视。建议在诊断初期先通过 Envoy 的 stats 端点确认延迟是否在代理层产生。