Envoy 核心信息总结
本文围绕 Envoy 展开介绍,明确其定位、设计理念,并详细阐述核心功能,以展现其在现代服务架构中的价值。
一、Envoy 定位与核心设计理念
1. 定位
Envoy 是一款为大型现代面向服务架构(SOA)设计的 L7 代理与通信总线,旨在解决服务间通信的复杂性问题。
2. 核心设计理念
- 核心目标:让网络对应用程序“透明”,即应用无需关注网络拓扑;同时,当网络或应用出现问题时,能快速定位问题根源。
- 实现难点:在实际场景中,上述目标难度极高,Envoy 通过一系列高级别特性逐步趋近该目标。
二、Envoy 核心特性
1. 进程外架构(Out of process architecture)
- 部署方式:Envoy 是独立进程,与每个应用服务器并行运行,所有 Envoy 构成透明通信网格??,应用仅与本地主机(localhost)收发消息,无需感知网络拓扑。
- 两大优势:
- 跨语言兼容:打破应用语言限制,可在 Java、C++、Go、PHP、Python 等多语言服务间构建通信网格,适配多框架、多语言的服务架构。
- 升级便捷:避免传统库依赖升级的痛点,能在整个基础设施中快速、透明地部署和升级。
2. 网络层过滤架构
- L3/L4 过滤架构:Envoy 核心是 L3/L4 网络代理,通过可插拔过滤链机制,支持插入自定义过滤器完成各类 TCP/UDP 代理任务,已实现的过滤器覆盖 raw TCP 代理、UDP 代理、HTTP 代理、TLS 客户端证书认证,以及 Redis、MongoDB、Postgres 等数据库的代理。
- HTTP L7 过滤架构:因 HTTP 是现代应用架构的关键组件,Envoy 额外提供 HTTP L7 过滤层,过滤器可接入 HTTP 连接管理子系统,实现缓冲、限流、路由/转发、Amazon DynamoDB 嗅探等功能。
3. HTTP 相关支持
- 多版本兼容:HTTP 模式下支持 HTTP/1.1 和 HTTP/2,可双向透明代理(如 HTTP/1.1 与 HTTP/2 客户端、服务器间的桥接);推荐服务间通信使用 HTTP/2 构建持久连接网格,实现请求/响应多路复用。
- HTTP/3 支持:1.19.0 版本起,支持 HTTP/3 上游与下游通信,可双向转换 HTTP/1.1、HTTP/2、HTTP/3 的任意组合(目前处于 alpha 阶段)。
- L7 路由:HTTP 模式下的路由子系统,可基于路径、权限、内容类型、运行时值等实现请求路由与重定向,适用于前端/边缘代理,也可用于服务间网格构建。
4. 特定协议与框架支持
- gRPC 支持:gRPC 是 Google 推出的 RPC 框架,以 HTTP/2 及以上作为底层多路传输协议;Envoy 支持 gRPC 所需的全部 HTTP/2 特性,可作为 gRPC 请求/响应的路由与负载均衡基础,二者互补性强。
5. 配置与服务发现
- 动态配置与服务发现:可选接入分层动态配置 API 实现集中管理,动态获取后端集群主机、集群本身、HTTP 路由、监听套接字、加密材料等信息;简化部署场景下,可通过 DNS 解析实现后端主机发现,或用静态配置文件替代多层动态配置。
6. 健康检查
- 设计逻辑:将服务发现视为“最终一致性”过程,内置健康检查子系统。
- 检查方式:支持主动健康检查(对上游服务集群执行),结合服务发现与健康检查结果确定健康的负载均衡目标;同时支持通过异常检测子系统实现被动健康检查。
7. 高级负载均衡
- 核心优势:作为独立代理而非库,可在单一位置实现高级负载均衡技术,供所有应用使用。
- 现有功能:支持自动重试、熔断、通过外部限流服务实现全局限流、请求影子(Request Shadowing)、异常检测;未来计划支持请求竞速(Request Racing)。
8. 前端/边缘代理支持
- 价值:边缘层使用 Envoy 可获得可观测性、统一管理、一致的服务发现与负载均衡算法等优势。
- 适配能力:具备 TLS 终止、HTTP/1.1/HTTP/2/HTTP/3 支持、HTTP L7 路由等特性,适配多数现代 Web 应用的边缘代理需求。
9. 可观测性
- 统计功能:所有子系统均支持完善的统计,默认支持 statsd(及兼容提供商)作为统计数据接收器,也可自定义接收器;统计数据可通过管理端口查看。
- 分布式追踪:支持通过第三方提供商实现分布式追踪,助力定位网络与应用层面的问题。