2. Envoy 基础架构回顾:线程模型、Listener、Cluster、Endpoint 与 Filter 链

在深入服务网格治理回滚与 SLO 护栏之前,必须重新审视 Envoy 的核心架构。Envoy 并非简单的反向代理,而是一个基于事件驱动、多线程并行的 L3/L4/L7 代理。理解其线程模型与核心抽象(Listener、Cluster、Endpoint、Filter 链)是后续配置面板化与治理策略的基础。

2.1 线程模型:主线程 + Worker 线程池

Envoy 使用 单进程多线程 架构,避免多进程带来的高昂上下文切换。其线程模型分为三类:

线程类型 数量 职责
Main 线程 1 配置加载/热重启、DNS 解析、集群管理、统计刷新、健康检查、全局 xDS 订阅。不处理数据面流量。
Worker 线程 通常 = CPU 核数 处理所有网络 I/O、连接管理、Filter 链执行、TLS 终止。每个 Worker 拥有独立的 Event Loop 和连接池。
文件刷新线程 1(可选) 异步写入访问日志、统计文件,避免阻塞 Worker。
关键设计: Worker 线程之间 无锁。每个 Worker 独立持有自己的连接、定时器、内存池。连接通过 Accept 后绑定(ReusePort 或轮询)分配给固定 Worker,后续该连接的所有事件都在同一 Worker 上处理,彻底避免跨线程竞争。
Envoy 线程模型架构 Envoy 线程模型:主线程 + Worker 线程池 Main 线程 xDS 订阅 / 配置加载 DNS / 健康检查 / 统计 Worker 线程池(通常 = CPU 核数) Worker 1 | Worker 2 | Worker 3 | ... | Worker N 每个 Worker 独立 Event Loop、连接池、Filter 链 配置下发 文件刷新线程 异步写日志/统计 异步写入

2.2 Listener:流量入口

Listener 定义了 Envoy 如何监听入站流量。每个 Listener 绑定一个 IP:Port,并关联一组 Filter 链。关键属性:

  • 地址绑定:支持 TCP、UDP、Unix Domain Socket。
  • SO_REUSEPORT:启用后内核将新连接均匀分发到多个 Worker,提升多核扩展性。
  • Listener Filter:在连接建立初期执行,用于 TLS 嗅探、代理协议解析、原始目标 IP 提取。
  • Filter 链匹配:根据 SNI、源 IP、端口等条件选择不同的 Filter 链。
实践要点: 在服务网格中,每个 Sidecar 通常只暴露一个 Listener(如 15001),通过 iptables 规则将 Pod 内所有入站流量劫持到该 Listener。Listener 的 Filter 链根据目标端口(如 8080、9090)进行分流。

2.3 Cluster 与 Endpoint:上游服务抽象

Cluster 是 Envoy 对上游服务集群的逻辑抽象,定义了如何发现、连接和负载均衡到一组 Endpoint(实际后端实例)。

概念 说明 典型配置
Cluster 服务集群定义,包含发现类型、负载均衡策略、连接池大小、健康检查配置。 type: STRICT_DNS / type: EDS
Endpoint 具体的后端实例,包含 IP:Port、健康状态、权重、元数据。 socket_address: { address: "10.0.1.5", port_value: 8080 }
Locality 区域/可用区标签,用于优先级路由和就近访问。 locality: { region: "us-east-1", zone: "a" }
回滚护栏关联: 在 SLO 错误预算治理中,Cluster 的 异常检测(Outlier Detection) 和 主动健康检查 是自动回滚的底层触发机制。当 Endpoint 连续失败达到阈值,Envoy 会将其弹出负载均衡池,触发面板上的“实例熔断”事件。

2.4 Filter 链:可插拔的请求处理管道

Filter 链是 Envoy 最强大的扩展点。每个 Listener 或 Route 可以串联多个 Filter,形成 L4 → L7 的流水线处理。Filter 分为三类:

  • Listener Filter:连接建立阶段,如 TLS 嗅探、代理协议。
  • Network Filter (L4):原始字节流处理,如 TCP Proxy、MongoDB 嗅探、MySQL 嗅探。
  • HTTP Filter (L7):HTTP 请求/响应处理,如 Router、RBAC、Rate Limit、gRPC-Web、Local Reply。
Envoy Filter 链处理流程 Filter 链:从 Listener 到 Cluster 的请求处理管道 入站连接 Listener Filter TLS 嗅探 / 代理协议 Network Filter TCP Proxy / 协议嗅探 HTTP Filter 链 Router / RBAC / Rate Limit Cluster 负载均衡 Filter 链执行顺序与回滚护栏的关系: 1. Listener Filter 做 TLS 握手和协议识别 → 2. Network Filter 做连接级限流和协议解析 3. HTTP Filter 链执行 RBAC 鉴权、速率限制、Header 修改 → 4. Router Filter 根据路由规则选择 Cluster

2.5 核心抽象关系总结

Envoy 的配置模型可以归纳为以下层级关系,这也是面板化呈现的底层数据模型:

Listener (IP:Port)
  └─ Filter 链 (L4 → L7)
       └─ Route (域名/路径匹配)
            └─ Cluster (服务集群)
                 └─ Endpoint (实例 IP:Port + 健康状态 + 权重)
                      └─ Locality (区域/可用区)
面板化映射: 在后续课程中,我们将把上述每个抽象映射为面板上的可视化节点。例如:
• Listener → 流量入口卡片,显示 QPS、连接数、TLS 版本。
• Cluster → 服务拓扑节点,显示健康实例数、错误率、P99 延迟。
• Endpoint → 实例列表,显示 CPU/内存、活跃请求、熔断状态。
• Filter 链 → 治理策略流水线,显示 RBAC 规则、速率限制阈值、重试配置。