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


EnvoyGateway:
InfoQ Gateway,云原生时代的流量入口:Envoy
文章图片
基于Java的异步化API网关:
InfoQ Gateway,云原生时代的流量入口:Envoy
文章图片
Kong:
InfoQ Gateway,云原生时代的流量入口:Envoy
文章图片
APISIX:
InfoQ Gateway,云原生时代的流量入口:Envoy
文章图片
从以上性能数据可以看出 , 相同条件下:
Envoy的TPS可以达到12W左右;
基于Java的异步化API网关最高可到2.8W左右;
基于Nginx的Kong , TPS可以到5W左右;
基于Nginx并相较Kong有一定优化的APISIX可以到9W左右 。
可以看出:
简单路由代理场景下 , Envoy性能优势已经比较明显;
复杂路由与治理功能场景下 , Envoy原生C++实现功能的性能较通过JavaFilter、OpenResty等扩展相比 , 优势会更加明显 。
3.动态管控能力强 , 具备数据面标准xDS协议Envoy具备静态配置与动态API两种配置模式 。 动态API方式灵活性更强 , 作为Envoy推荐的配置方式 。 Envoy以xDS(xDiscoveryService)作为动态API的标准协议 , 其中包括了多种维度资源的发现协议:
LDS(ListenerDiscoveryService)
RDS(RouteDiscoveryService)
CDS(ClusterDiscoveryService)
EDS(EndpointDiscoveryService)
ADS(AggregatedDiscoveryService)
xDS的多种协议覆盖了包括监听器(Listener)、路由(Route)、后端集群(Cluster)、后端实例(Endpoint) , 可以通过协议对代理所需所有配置进行动态管控 。 其中ADS不是一个实际意义上的xDS , 它提供了一个汇聚的功能 , 以实现需要多个同步xDS访问的时候可以在一个stream中完成的作用 。
由于Envoy已经以CNCF毕业项目的姿态成为了云原生数据面的事实标准组件 , xDS也相应成为云原生数据面事实动态API标准 。 这里不对xDS协议进行深入的介绍 , 感兴趣的同学可以通过社区与博客深入了解 。
4.天然亲和容器环境Envoy作为云原生社区的数据面标准组件 , 其本身并没有直接与Kubernetes或容器耦合 。 通过xDS协议的对接 , IstioPilot等容器亲和的控制面组件可以将服务、实例、路由等配置信息推送至Envoy 。 即使是在容器环境 , Envoy也很快能实现服务发现 , 即实现容器环境服务的代理和治理 。 所以 , Envoy天然亲和容器环境 , 可以作为容器环境API网关和Ingress的数据面选型 。
5.多语言扩展沙箱——WASMWASM , 即WebAssembly , 是由主流浏览器厂商组成的W3C社区团体制定的一个新的规范 , 首先看下来自Mozilla的官方定义:WebAssembly是一种新的编码方式 , 可以在现代的网络浏览器中运行
它是一种低级的类汇编语言 , 具有紧凑的二进制格式 , 可以接近原生的性能运行 , 并为诸如C/C++等语言提供一个编译目标 , 以便它们可以在Web上运行 。 它也被设计为可以与JavaScript共存 , 允许两者一起工作 。
使用WebAssembly扩展Envoy的好处是:
避免修改Envoy;
避免网络远程调用(check&report);
通过动态装载(重载)来避免重启Envoy;
隔离性;
实时A/B测试;
WASM为Envoy带来了使用多语言扩展数据面的能力 , 即可以不局限地通过C++、Java、Lua、JS等语言进行数据面扩展 , 这对于流量代理数据面将是一个巨大的彩蛋 。 该特性已在2020年正式发布落地 。 相信在不远的未来 , 开发者使用自己最为擅长的语言进行流量入口能力扩展不再是梦想!
3EnvoyGateway设计解析基于云原生时代的技术趋势以及Envoy的功能、性能的“双优”特性 , 网易轻舟云原生团队提出基于Envoy实现标准的流量入口设计 , 并基于此进行了大规模业务生产落地 。


推荐阅读