核心要点
Envoy 的设计哲学可以用一句话概括:让网络对应用透明,并在出问题时有能力定位根因。这个目标的实现方式不是给每个应用语言写一个库,而是提供一个独立的、语言无关的、可独立升级的网络代理进程。
进程外架构:为什么不是库
Envoy 选择作为独立进程运行在每个应用服务器旁边,所有 Envoy 共同构成一个透明通信网格:应用只与 localhost 通信,对网络拓扑一无所知。
这个决策的两个关键收益:
- 语言无关:一个 Envoy 部署可以同时桥接 Java、C++、Go、PHP、Python 等服务。在现代多语言、多框架的服务架构中,这是巨大的简化。
- 独立升级:任何维护过大型服务架构的人都知道,库升级的痛苦。Envoy 作为独立进程,可以在整个基础设施上快速、透明地部署和升级,无需协调各应用团队的发布节奏。
这个选择也有代价:进程间通信的额外开销、sidecar 模式带来的资源消耗、运维复杂度的增加。但 Envoy 的赌注是:网络行为的统一治理比节省一点 CPU 更重要。
过滤器架构:L3/L4 与 L7 的分层扩展
Envoy 的核心是一个可插拔过滤器链:
- L3/L4 网络过滤器:支持 TCP/UDP 代理、TLS 客户端证书认证、Redis、MongoDB、Postgres 等协议代理
- HTTP L7 过滤器:在 HTTP 连接管理子系统中插入,支持缓冲、速率限制、路由/转发、DynamoDB 嗅探等
这种分层设计让 Envoy 既能作为通用网络代理,又能针对 HTTP 生态做深度优化。同一套过滤器机制被复用到完全不同的协议层,降低了扩展的心智负担。
协议支持:HTTP/2、gRPC 与 HTTP/3
Envoy 对 HTTP/2 的一流支持是其作为服务网格基础设施的关键:
- 支持 HTTP/1.1 与 HTTP/2 的双向透明桥接
- 服务间通信推荐使用 HTTP/2,建立持久连接池,请求和响应可以多路复用
- gRPC 天然兼容:gRPC 基于 HTTP/2,Envoy 提供所有必要的路由和负载均衡能力
- HTTP/3(基于 QUIC)从 1.19.0 开始支持上游和下游,尚处于 alpha
HTTP/2 多路复用在微服务场景中的价值被低估:它减少了 TCP 连接数,降低了延迟抖动,让负载均衡决策可以在请求级别而非连接级别进行。
服务发现与动态配置
Envoy 支持分层动态配置 API:
- 后端集群内的主机列表
- 后端集群本身
- HTTP 路由规则
- 监听端口
- 加密材料
最简单的部署可以用 DNS 做后端发现(或完全跳过服务发现,使用静态配置),复杂的部署可以用 xDS API(ADS/CDS/EDS/LDS/RDS/SDS)实现完全动态、中心化管理。
Envoy 的推荐做法是把服务发现视为最终一致的过程,结合主动健康检查和异常检测(outlier detection)来确定真正可用的负载均衡目标。
高级负载均衡与弹性
Envoy 在单一位置实现了多种高级负载均衡技术,对所有接入应用透明可用:
- 自动重试:按配置条件自动重试失败请求
- 熔断:当后端错误率或延迟超过阈值时自动停止发送流量
- 全局速率限制:通过外部限速服务(如 RLS)实现跨集群配额
- 请求镜像:复制流量到影子集群做测试
- 异常检测:被动健康检查,自动驱逐异常实例
未来还计划支持 request racing(同时向多个后端发送请求,取最快响应)。
可观测性:Envoy 真正的差异化
Envoy 的所有子系统都暴露统计指标(statsd 兼容),并支持分布式追踪。但它的可观测性设计有一个深层假设:网络问题可能是应用问题,应用问题可能表现为网络症状。通过统一的代理层收集指标和追踪,可以在网络行为和应用行为之间建立关联,这是”让网络透明”目标的最终实现。
实践启示
- Envoy 不是”比 Nginx 更快的反向代理”,它是一个服务到服务通信的基础设施抽象。选择 Envoy 意味着你愿意为统一治理付出 sidecar 的运维成本。
- 如果你已经在用 Kubernetes,Istio/Envoy 的 sidecar 模式是常见组合,但也在向 ambient mesh(无 sidecar)演进。Envoy 本身的定位不限定于任何部署模式。
- Envoy 的 xDS API 是控制面的标准接口,理解 xDS(ADS/CDS/EDS/LDS/RDS/SDS)是操作 Envoy 集群的基础。
来源信息
- 来源:Envoy Proxy 官方文档(v1.39.0-dev-4c4ba5)
- 原文:https://www.envoyproxy.io/docs/envoy/latest/intro/what_is_envoy
- 本地归档:
raw/articles/What is Envoy — envoy 1.39.0-dev-4c4ba5 documentation.md
相关页面
- service-mesh — 服务网格的设计模式与 trade-offs
- load-balancing-strategies — 负载均衡策略的通用选择框架
- choosing-load-balancing-strategy — Traefik 的四种核心策略详解
- advanced-load-balancing-traefik — Traefik Proxy 的高级负载均衡特性