1. 服务网格与 Envoy 概述
1.1 服务网格架构演进
服务网格(Service Mesh)是云原生时代处理服务间通信的基础设施层。其架构演进经历了三个阶段:
| 阶段 | 架构特征 | 代表技术 | 核心痛点 |
|---|---|---|---|
| 第一阶段 | 通信逻辑内嵌于应用代码(熔断、重试、超时) | Spring Cloud、Netflix OSS | 语言绑定、升级困难、重复造轮子 |
| 第二阶段 | 独立代理库(Sidecar 雏形) | SmartStack、Finagle | 运维复杂、代理性能瓶颈 |
| 第三阶段 | Sidecar 代理 + 集中控制面 | Istio + Envoy、Linkerd | 数据面性能调优、控制面规模扩展 |
当前主流架构以 Sidecar 代理模式为核心:每个服务实例旁挂一个轻量级代理,所有进出流量均经过该代理,由代理执行路由、负载均衡、熔断、观测等逻辑。应用代码只需关注业务逻辑,彻底与网络通信解耦。
关键演进驱动力:微服务规模从数十增长到数千,传统 SDK 模式无法满足多语言、多版本、动态路由和细粒度可观测性的需求。服务网格将通信能力下沉为平台层,实现了基础设施与业务逻辑的完全分离。
1.2 Envoy 在 Istio 中的角色
Envoy 是 Istio 的 默认数据平面代理,承担了所有服务间流量的拦截、转发和治理职责。在 Istio 架构中,Envoy 扮演以下核心角色:
- 流量拦截器:通过 iptables 规则透明拦截 Pod 内所有入站和出站流量,无需修改应用代码。
- 协议处理器:原生支持 HTTP/1.1、HTTP/2、gRPC、TCP、WebSocket 等多种协议,并提供协议转换能力。
- 负载均衡器:内置加权轮询、最少请求、一致性哈希、磁悬浮等负载均衡算法,支持主动/被动健康检查。
- 熔断与重试引擎:基于集群级别的熔断阈值(连接数、请求数、异常比例)和精细化的重试策略。
- 可观测性采集器:自动生成全量访问日志、分布式追踪 Span 和 Prometheus 指标,无需额外埋点。
- 安全执行点:实现 mTLS 加密、RBAC 鉴权、JWT 验证等安全策略,所有策略在代理层强制生效。
Envoy 与 Istio 的分工:Envoy 负责执行(数据面),Istiod 负责决策(控制面)。Envoy 通过 xDS 协议(LDS、RDS、CDS、EDS、SDS)从 Istiod 动态获取配置,实现零停机配置更新。
1.3 Envoy 数据平面与控制平面分离原理
Envoy 架构的核心设计哲学是 数据平面与控制平面严格分离。这种分离带来了极高的性能和灵活性。
数据平面:由 Envoy 代理进程组成,直接处理用户流量。每个 Envoy 实例包含以下关键组件:
- Listener(监听器):绑定端口,接收入站连接。
- Filter Chain(过滤器链):按顺序执行协议解析、路由匹配、流量镜像、RBAC 等操作。
- Cluster(集群):定义上游服务端点集合及负载均衡策略。
- Endpoint(端点):具体的后端实例 IP:Port。
控制平面:负责生成和下发配置,不参与数据路径。在 Istio 中,控制平面由 Istiod 组件实现,它聚合服务注册信息、用户策略和网格配置,通过 xDS 协议将配置推送给所有 Envoy 实例。
Envoy 通过 xDS 协议族实现与控制平面的动态配置同步。每个 xDS 对应一种资源类型:
| xDS 类型 | 全称 | 下发内容 | 更新频率 |
|---|---|---|---|
| LDS | Listener Discovery Service | 监听器配置(端口、协议、过滤器链) | 低(服务暴露变更时) |
| RDS | Route Discovery Service | 路由规则(域名、路径匹配、流量拆分) | 中(路由策略变更时) |
| CDS | Cluster Discovery Service | 集群配置(负载均衡算法、熔断阈值) | 中(集群定义变更时) |
| EDS | Endpoint Discovery Service | 端点列表(IP:Port、健康状态、权重) | 高(Pod 扩缩容时) |
| SDS | Secret Discovery Service | TLS 证书、私钥 | 低(证书轮换时) |
性能关键点:在大型网格中(数千 Sidecar),EDS 的更新频率最高。Envoy 的集群管理与负载均衡优化,核心就在于如何高效处理 EDS 推送的端点变更,避免因端点列表抖动导致负载均衡失效或连接池震荡。这也是本课程后续章节重点诊断和优化的方向。
1.4 分离架构的延迟优势
数据平面与控制平面分离的设计,直接影响了 API 延迟的稳定性:
- 控制面故障隔离:即使 Istiod 短暂不可用,Envoy 仍能基于本地缓存的最新配置继续转发流量,数据面零中断。
- 配置热更新:Envoy 支持 xDS 配置的增量推送和原地热加载,无需重启进程,避免连接断开导致的延迟毛刺。
- 无锁数据路径:Envoy 的工作线程(Worker)各自持有独立的连接池和负载均衡状态,线程间无锁竞争,最大化 CPU 利用率。
- 按需加载:Envoy 只加载与自身相关的 Listener 和 Cluster 配置,避免全量配置带来的内存和 CPU 开销。