Envoy:云原生高性能边缘/中间件/服务代理
什么是 Envoy
Envoy 是一款专为大型现代面向服务架构(SOA)设计的 L7(应用层)代理 和通信总线。该项目源于以下核心理念:
网络对于应用程序应该是透明的。当网络或应用程序出现问题时,应该易于确定问题的根源。
要实现这一目标非常具有挑战性。Envoy 通过提供以下高级特性来努力达成这一目标:
进程外架构(Out of process architecture)
Envoy 是一个独立的进程,设计为与每个应用服务器并行运行(Sidecar 模式)。所有 Envoy 实例共同构成一个透明的通信网格。在这个网格中,每个应用程序只需与本地主机(localhost)进行消息收发,而无需了解底层网络拓扑。
相比传统的通过客户端库实现服务间通信的方式,进程外架构有两大显著优势:
- 语言无关:单个 Envoy 部署即可在 Java、C++、Go、PHP、Python 等多种语言之间构建通信网格,轻松弥合多语言/多框架环境中的差异。
- 升级友好:库升级在大型 SOA 中往往非常痛苦,而 Envoy 可在整个基础设施中快速、透明地统一部署和升级。
L3/L4 过滤器架构
Envoy 的核心是一个 L3/L4 网络代理。它采用可插拔的过滤器链机制,允许开发者编写自定义过滤器来执行各种 TCP/UDP 代理任务,并插入到主服务器中。
已实现的支持包括:
- 原始 TCP 代理
- UDP 代理
- HTTP 代理
- TLS 客户端证书认证
- Redis 协议代理
- MongoDB 协议代理
- Postgres 协议代理
- ……(更多协议支持可扩展)
HTTP L7 过滤器架构
HTTP 是现代应用架构中最关键的协议之一。Envoy 在 HTTP 连接管理子系统中额外提供了 L7 过滤器层,可插入执行以下任务:
- 请求/响应缓冲
- 速率限制
- 路由与转发
- 嗅探 Amazon DynamoDB 等协议
- 其他自定义 L7 处理逻辑
一流的多协议 HTTP 支持
- HTTP/1.1 与 HTTP/2:Envoy 原生支持双向透明代理,可桥接任意组合的 HTTP/1.1、HTTP/2 客户端与服务端。
推荐的服务间通信方式是在所有 Envoy 间使用 HTTP/2,形成持久化、多路复用的连接网格。
- HTTP/3:目前已成熟支持(不再是 Alpha 阶段),Envoy 可在 HTTP/1.1、HTTP/2、HTTP/3 之间进行任意双向转换。
HTTP L7 路由
Envoy 内置强大的路由子系统,支持根据以下条件对请求进行路由、重定向、重写等操作:
- 路径(path)
- 域名/权限(authority)
- 内容类型
- 运行时参数(runtime values)
- 请求头、查询参数等
此功能在边缘代理(前端网关)和服务间网格中都非常实用。
gRPC 支持
gRPC 使用 HTTP/2(或更高版本)作为底层传输协议。Envoy 原生支持 gRPC 所需的所有 HTTP/2 特性,可作为 gRPC 请求的路由、负载均衡、观测基础,与 gRPC 框架相辅相成。
服务发现与动态配置
Envoy 支持分层的动态配置 API(xDS 协议),实现集中式管理,包括:
- 后端集群主机列表
- 集群定义
- HTTP 路由规则
- 监听器配置
- 证书与加密材料
对于简单场景,也支持通过 DNS 解析实现服务发现,或完全使用静态配置。
健康检查与异常检测
Envoy 将服务发现视为最终一致性过程。它内置:
- 主动健康检查:定期探测上游服务健康状态
- 被动健康检查(异常检测 / Outlier Detection):根据实际请求表现剔除异常节点
两者结合决定真正健康的负载均衡目标。
高级负载均衡能力
Envoy 支持丰富的流量控制与韧性特性,包括:
- 自动重试(含可配置的重试预算)
- 断路器(Circuit Breaking)
- 全局速率限制(通过外部服务实现)
- 请求镜像/影子流量(Shadowing)
- 异常检测与逐出
- (未来计划支持请求竞争 / Request Racing 等)
边缘/前端代理支持
使用同一套软件栈做边缘代理与服务网格代理有很多好处(一致的可观测性、管理方式、算法等)。Envoy 提供:
- TLS 终止
- HTTP/1.1、HTTP/2、HTTP/3 支持
- 强大的 L7 路由能力
非常适合现代 Web 应用的边缘代理场景。
一流的可观测性
Envoy 的核心目标之一就是让网络透明。它为几乎所有子系统提供详细的统计指标:
- 支持 statsd(及兼容后端)
- 可通过管理接口(Admin API)实时查看
- 支持分布式追踪(OpenTelemetry、Zipkin、Jaeger 等第三方集成)
- 对 MongoDB、Redis、DynamoDB 等协议提供协议级观测
https://github.com/envoyproxy/envoy
https://www.envoyproxy.io/