基本定位

Envoy 是一个开源的 L7 代理和通信总线,面向大型现代面向服务的架构。它由 Lyft 创建,现在是 CNCF 毕业项目,被 Istio、AWS App Mesh、Consul Connect 等服务网格方案采用为数据面。

核心设计

进程外架构

Envoy 作为独立进程运行在每个应用服务器旁边,所有进出流量经过它。所有 Envoy 共同构成一个透明通信网格:应用只与 localhost 通信,对网络拓扑一无所知。

这个设计的关键收益是语言无关独立升级:一个 Envoy 部署可以同时桥接 Java、Go、Python 等服务,通信策略的更新不需要协调各服务的发布节奏。

过滤器架构

Envoy 的核心是可插拔过滤器链:

  • L3/L4 网络过滤器:TCP/UDP 代理、TLS 认证、Redis/MongoDB/Postgres 协议代理
  • HTTP L7 过滤器:缓冲、速率限制、路由、DynamoDB 嗅探等

同一套过滤器机制被复用到完全不同的协议层,降低了扩展的心智负担。

协议支持

  • HTTP/2 一流支持:双向透明桥接 HTTP/1.1 与 HTTP/2,服务间通信推荐 HTTP/2 以利用多路复用
  • gRPC 原生兼容:基于 HTTP/2,Envoy 提供完整的路由和负载均衡能力
  • HTTP/3(alpha):从 1.19.0 开始支持上游和下游 QUIC

关键能力

动态配置(xDS)

Envoy 通过分层 xDS API 实现完全动态管理:

  • CDS(Cluster Discovery Service):后端集群定义
  • EDS(Endpoint Discovery Service):集群内实例列表
  • RDS(Route Discovery Service):HTTP 路由规则
  • LDS(Listener Discovery Service):监听端口配置
  • SDS(Secret Discovery Service):TLS 证书
  • ADS(Aggregated Discovery Service):聚合所有配置的单一端点

高级负载均衡与弹性

  • 自动重试、熔断、全局速率限制
  • 请求镜像(shadow traffic)
  • 异常检测(outlier detection,被动健康检查)
  • 主动健康检查 + 最终一致的服务发现

可观测性

Envoy 的设计假设是:网络问题可能是应用问题,应用问题可能表现为网络症状。所有子系统暴露统计指标(statsd 兼容),支持分布式追踪,并通过 admin 端口提供运行时诊断。

适用场景

  • 服务网格数据面:Istio、Consul Connect 等控制面的默认代理
  • 边缘代理:TLS 终止、L7 路由、限流
  • 多语言微服务桥接:统一不同语言服务的通信策略

与 Traefik 的对比

维度EnvoyTraefik
部署模式Sidecar / 独立代理Ingress / 边缘代理
配置方式xDS API / 静态文件声明式(CRD / labels / 文件)
服务网格原生设计非核心场景
协议扩展过滤器链中间件链
可观测性深度集成(stats、tracing)基础指标 + 商业版增强
学习曲线陡峭(xDS、过滤器概念)平缓(云原生原生设计)

演进方向

Envoy 社区正在配合 Istio 推进 ambient mesh(无 sidecar)模式,把 L4 功能下沉到节点级 ztunnel,L7 功能按需部署为 waypoint proxy。这反映了社区对 sidecar 资源成本的反思,但 Envoy 作为数据面的核心地位没有变化。


相关页面:service-mesh · load-balancing-strategies · what-is-envoy