Envoy 让服务间通信变得可观、可控、可扩展,是现代云原生架构的“网络底座”。
随着 IT 行业向微服务架构和云原生解决方案的转型,企业面临着管理数百个微服务的挑战。这些使用不同技术栈开发的服务带来了系统复杂性和调试难题。
作为应用开发者,你专注于业务逻辑——如处理订单或生成报表。然而,任何业务操作都涉及多个服务间的调用,每个服务都有自己的超时机制、重试逻辑和网络相关代码。
当请求失败时,很难跨多个服务追踪问题根源。是网络不稳定?需要调整重试策略?还是业务逻辑错误?服务间不一致的日志和跟踪机制进一步增加了调试复杂性。
Envoy 的解决方案是将网络问题从应用程序中抽离,由专门的组件处理网络通信,使调试变得更加简单。
Envoy 通常以两种模式部署:
在 Sidecar 模式下,Envoy 与应用程序形成原子实体但保持独立进程。应用程序专注业务逻辑,Envoy 处理网络通信。这种关注点分离使故障排查更容易,能快速确定问题来源于应用还是网络。
Envoy 是独立进程,设计为与每个应用程序并行运行。多个 Envoy 实例通过集中配置形成透明的服务网格。
应用程序向虚拟地址(localhost)而非真实地址发送请求,无需了解网络拓扑。路由责任完全委托给 Envoy,使网络配置与应用程序解耦。
这种架构的优势:
Envoy 是 L3/L4 网络代理,基于 IP 地址和 TCP/UDP 端口做路由决策。它采用可插拔的过滤器链架构,类似于 Linux shell 的管道机制:
ls -l | grep "*.go" | wc -l
通过堆叠过滤器构建处理逻辑,支持:
在 HTTP 连接管理子系统中,Envoy 支持 HTTP L7 过滤器层,可执行:
Envoy 原生支持 HTTP/1.1、HTTP/2 和 HTTP/3,可作为透明的协议转换代理。即使遗留应用仍使用 HTTP/1.1,通过 Envoy 部署后也能自动获得 HTTP/2 的性能优势。
推荐在服务网格中全面使用 HTTP/2,创建持久连接网格以提高性能。
在 HTTP 模式下,Envoy 支持强大的路由功能:
这些功能在构建 API 网关和服务网格时都非常有用。
Envoy 完全支持 gRPC 所需的 HTTP/2 功能,包括:
除了静态配置文件,Envoy 支持通过 xDS(发现服务)API 进行动态配置:
这使得 Envoy 能够适应动态的云原生环境。
Envoy 提供主动和被动健康检查:
只有健康的服务实例才会接收流量。
支持多种负载均衡算法和高级功能:
Envoy 提供全面的可观测性支持:
Envoy 适用于多种场景:
Envoy 已成为现代微服务架构中不可或缺的基础设施组件,为构建可靠、可扩展的分布式系统提供了强大支撑。