2. Envoy 基础架构:线程模型、核心概念与动态配置
Envoy 作为高性能边缘与服务代理,其架构设计围绕三个核心维度展开:并发模型(如何高效利用多核)、抽象资源模型(Listener / Cluster / Endpoint)以及动态配置协议(xDS)。理解这三者是掌握 Envoy 流量迁移与集群治理的前提。
2.1 线程模型:主线程 + Worker 线程池
Envoy 采用单进程、多线程架构,避免多进程带来的资源浪费与连接共享难题。其线程模型分为三类角色:
| 线程角色 | 数量 | 核心职责 |
|---|---|---|
| Main 线程 | 1 | 配置加载、xDS 订阅、DNS 解析、证书轮换、统计刷新、Admin 接口 |
| Worker 线程 | N(通常 = CPU 核数) | 监听器 accept、连接读写、L3/L4/L7 过滤链处理、转发决策 |
| 文件刷新线程 | 1 | 异步文件访问(访问日志、统计输出) |
关键设计原则:每个 Worker 线程拥有独立的连接池与事件循环,无锁竞争。连接一旦被 Worker 接受,后续所有处理都在该 Worker 内完成,避免跨线程锁开销。
2.2 核心抽象:Listener / Cluster / Endpoint
Envoy 将流量处理路径抽象为三个层次,形成从入站到出站的完整链路:
| 概念 | 作用域 | 核心属性 | 类比 |
|---|---|---|---|
| Listener | 入站(服务端) | 监听地址端口、TLS 配置、过滤链(Filter Chain) | nginx 的 server block |
| Cluster | 出站(客户端) | 上游端点集合、负载均衡策略、连接池、健康检查 | nginx 的 upstream |
| Endpoint | 上游实例 | IP:Port、元数据、权重、健康状态 | upstream 中的 server |
流量迁移场景映射:在集群升级治理中,Listener 负责接收入站流量并注入迁移过滤器;Cluster 定义新旧版本的服务分组;Endpoint 代表每个节点池中的具体 Pod IP。通过动态调整 Endpoint 权重或 Cluster 路由规则,实现灰度迁移。
2.3 xDS 协议:动态配置的神经中枢
xDS(Discovery Service)是 Envoy 与控制平面(如 Istiod)之间的标准配置协议,基于 gRPC 流式推送或轮询拉取。xDS 家族覆盖了 Envoy 所有核心配置维度:
| 协议 | 全称 | 推送内容 | 在流量迁移中的作用 |
|---|---|---|---|
| LDS | Listener Discovery Service | Listener 配置(端口、过滤链) | 动态注入迁移过滤器、修改监听端口 |
| RDS | Route Discovery Service | 路由规则(域名、路径匹配) | 按 header/权重分流到新旧 Cluster |
| CDS | Cluster Discovery Service | Cluster 配置(端点发现方式、LB 策略) | 动态创建/删除新旧版本 Cluster |
| EDS | Endpoint Discovery Service | Endpoint 列表(IP:Port、权重、健康状态) | 实时调整节点池 Pod 的流量权重 |
| SDS | Secret Discovery Service | TLS 证书、私钥 | 迁移过程中的证书轮换 |
运维注意:在集群升级节点池巡检场景中,EDS 是最高频更新的 xDS 资源。每次节点池扩缩容或 Pod 健康状态变化,控制平面都会推送增量 EDS 更新。Envoy 的 EDS 更新延迟直接影响流量迁移的实时性,建议将 EDS 的
cds_resources_locator 超时配置在 5s 以内。
2.4 动态配置工作流
Envoy 通过 xDS 实现配置热更新,无需重启进程。典型工作流如下:
- 启动阶段:Envoy 启动时通过
--config-path加载静态引导配置,其中包含 xDS 服务端地址(如 Istiod 的 gRPC 端点)。 - 订阅阶段:Envoy 向控制平面发起 LDS 订阅,获取 Listener 配置;Listener 中引用的 RouteConfiguration 触发 RDS 订阅;Cluster 声明触发 CDS 订阅;CDS 中的
type: EDS触发 EDS 订阅。 - 增量推送:当节点池状态变化(如 Pod 就绪/摘除),控制平面推送增量 EDS 更新,Envoy 在 Worker 线程中无锁热切换端点列表。
- 一致性保证:Envoy 使用
version_info和nonce机制确保配置有序生效,避免部分更新导致路由黑洞。
巡检关键指标:在节点池巡检中,应重点监控 Envoy 的
listener_manager.listener_added、cluster_manager.cluster_added、eds.update_success 等计数器,确认动态配置是否按预期生效。若 eds.update_rejected 持续增长,说明控制平面推送的端点数据格式异常或 Envoy 资源耗尽。