文章目录
- Envoy:28k Star 的云原生网络代理
Envoy:28k Star 的云原生网络代理
Envoy 是由 Lyft 开源的一款高性能网络代理,目前在 GitHub 上获得了 28,435 个 Star,是 CNCF 毕业项目之一。
很多大型互联网公司在生产环境中都在使用 Envoy,包括 Airbnb、Pinterest、Square、腾讯、字节跳动等。它通常被用作边缘代理、内部服务代理,或者作为服务网格中的 Sidecar 代理。
Envoy 用 C++ 编写,核心设计目标是提供高吞吐量和低延迟的网络处理能力。它支持多种协议,包括 HTTP/1.1、HTTP/2、gRPC、TCP 和 UDP。在流量管理方面,Envoy 提供了丰富的功能:负载均衡支持轮询、加权、最少连接等多种算法;熔断机制可以在下游服务出现问题时快速失败,避免雪崩;限流功能可以保护服务不被过多请求压垮;重试机制支持可配置的重试策略,提高请求成功率。
与传统代理工具不同,Envoy 的配置不依赖静态文件,而是通过 xDS API 进行动态管理。xDS 包括 LDS(监听器发现服务)、CDS(集群发现服务)、RDS(路由发现服务)、EDS(端点发现服务)等一系列 API,可以实现配置的动态下发和热更新,不需要重启代理就能生效。这种设计让 Envoy 能够适应大规模、动态变化的微服务环境。
可观测性是 Envoy 的另一个强项。它内置了详细的统计信息,支持 Prometheus 格式的指标暴露,同时兼容 Jaeger、Zipkin 等分布式追踪系统,也支持将访问日志输出到多种后端。这些能力让运维人员能够清晰地看到服务之间的调用关系和性能状况。
在服务网格架构中,Envoy 是最常用的数据平面组件。Istio 就选择 Envoy 作为其默认的 Sidecar 代理,所有服务间的网络流量都经过 Envoy 处理。通过这种方式,服务本身不需要关心网络通信的细节,流量管理、安全策略、可观测性等功能都由 Envoy 在透明层完成。
Envoy 的扩展性也很强。它采用过滤器链架构,开发者可以通过编写自定义过滤器来扩展功能。过滤器分为网络层过滤器和 HTTP 层过滤器,分别在网络连接和 HTTP 请求级别进行处理。官方提供了多种内置过滤器,社区也有丰富的第三方过滤器可供使用。
从部署方式上看,Envoy 可以运行在裸金属服务器、虚拟机、Docker 容器和 Kubernetes Pod 中。它对资源的占用相对合理,在生产环境中经过了大规模验证。
Envoy 目前由一个活跃的社区维护,核心团队来自多家公司。项目有完善的安全审计机制,2018 年由 Cure53 进行过安全审计,2021 年由 Ada Logics 对模糊测试基础设施进行了审计。社区每个月有两次公开会议,讨论路线图和设计决策。
区每个月有两次公开会议,讨论路线图和设计决策。