InfoQ Gateway,云原生时代的流量入口:Envoy

流量入口代理作为互联网系统的门户组件 , 具备众多选型:从老牌代理HAProxy、Nginx , 到微服务API网关Kong、Zuul , 再到容器化Ingress规范与实现 , 不同选型间功能、性能、可扩展性、适用场景参差不齐 。 当云原生时代大浪袭来 , Envoy这一CNCF毕业数据面组件为更多人所知 。 那么 , 优秀“毕业生”Envoy能否成为云原生时代下流量入口标准组件?
1背景:流量入口的众多选型与场景在互联网体系下 , 凡是需要对外暴露的系统几乎都需要网络代理:较早出现的HAProxy、Nginx至今仍在流行;进入微服务时代后 , 功能更丰富、管控能力更强的API网关又成为流量入口必备组件;在进入容器时代后 , KubernetesIngress作为容器集群的入口 , 是容器时代微服务的流量入口代理标准 。 关于这三类典型的七层代理 , 核心能力对比如下:
【InfoQ Gateway,云原生时代的流量入口:Envoy】
InfoQ Gateway,云原生时代的流量入口:Envoy
文章图片
从上述核心能力对比来看:
HAProxy&Nginx在具备基础路由功能基础上 , 性能、稳定性经历多年考验 。 Nginx的下游社区OpenResty提供了完善的Lua扩展能力 , 使得Nginx可以更广泛的应用与扩展 , 如API网关Kong即是基于Nginx+OpenResty实现 。
API网关作为微服务对外API流量暴露的基础组件 , 提供比较丰富的功能和动态管控能力 。
Ingress作为Kubernetes入口流量的标准规范 , 具体能力视实现方式而定 。 如基于Nginx的Ingress实现能力更接近于Nginx , IstioIngressGateway基于Envoy+Istio控制面实现 , 功能上更加丰富(本质上IstioIngressGateway能力上强于通常的Ingress实现 , 但未按照Ingress规范实现) 。
那么问题来了:同样是流量入口 , 在云原生技术趋势下 , 能否找到一个能力全面的技术方案 , 让流量入口标准化?
2Envoy核心能力介绍Envoy是一个为云原生应用设计的开源边缘与服务代理(ENVOYISANOPENSOURCEEDGEANDSERVICEPROXY,DESIGNEDFORCLOUD-NATIVEAPPLICATIONS , @envoyproxy.io) , 是云原生计算基金会(CNCF)第三个毕业的项目 , GitHub目前有13k+Star 。
Envoy有以下主要特性:
基于现代C++开发的L4/L7高性能代理 。
透明代理 。
流量管理 。 支持路由、流量复制、分流等功能 。
治理特性 。 支持健康检查、熔断、限流、超时、重试、故障注入 。
多协议支持 。 支持HTTP/1.1 , HTTP/2 , GRPC , WebSocket等协议代理与治理 。
负载均衡 。 加权轮询、加权最少请求、Ringhash、Maglev、随机等算法支持 。 支持区域感知路由、故障转移等特性 。
动态配置API 。 提供健壮的管控代理行为的接口 , 实现Envoy动态配置热更新 。
可观察性设计 。 提供七层流量高可观察性 , 原生支持分布式追踪 。
支持热重启 。 可实现Envoy的无缝升级 。
自定义插件
能力 。 Lua与多语言扩展沙箱WebAssembly 。
总体来说 , Envoy是一个功能与性能都非常优秀的“双优生” 。 在实际业务流量入口代理场景下 , Envoy具备先天优势 , 可以作为云原生技术趋势流量入口的标准技术方案:
1.较HAProxy、Nginx更丰富的功能相较于HAProxy、Nginx提供流量代理所需的基本功能(更多高级功能通常需要通过扩展插件方式实现) , Envoy本身基于C++已经实现了相当多代理所需高级功能 , 如高级负载均衡、熔断、限流、故障注入、流量复制、可观测性等 。 更为丰富的功能不仅让Envoy天生就可以用于多种场景 , 原生C++的实现相较经过扩展的实现方式性能优势更为明显 。
2.与Nginx相当 , 远高于传统API网关的性能在性能方面 , Envoy与Nginx在常用协议代理(如HTTP)上性能相当 。 与传统API网关相比 , 性能优势明显 。 如下为Envoy与几种业务常用的API网关选型在8核物理机容器运行环境下 , 简单路由代理性能对比数据:(网易内部环境实测数据 , 仅供参考)