Envoy VS Treafik

23donge · · 569 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

云原生场景,产生了很多的Edge Router,Load balance,API Gate Way,Proxy等组件。

最近研究了一下,分享几个喜欢的项目,它们大致分为两类:

Gateway为主:Kong,Krakend

Proxy为主:Envoy,Traefik

但两类没有实际功能的边界,Proxy为主,一般要支持在L4,Gateway为主,支持在L7即可。

Proxy主要位置是中间,可以做sidecar,Gateway在服务endpoint前面。

再比如传统的HAProxy就是Proxy,Nginx就偏Gateway。

这个概念和数据通信网络的Core Router和Edge/Service Router是差不多的,Edge Router是感知服务的,理论上功能更多,Data Plane基本一样,Control Plane功能更丰富而已。

所以Gateway一般是一个Control Plane + Data Plane,比如Kong的Data Plane就是OpenResty。

使用Envoy作为Data Plane的Control Plane有Solo.io(Istio族下)。

从需求角度,我有几个偏好:

高性能:C++,Rust,Golang还可以,其他语言就别Data Plane了

高扩展:必须支持插件,动态(如LuaJIT)或者静态(链接库)。

独立:Serverless,无依赖,无状态,单daemon,最好自带UI。

小而美:其实和上面几个也是一个意思,最好带简单Control Plane,但要节制。

Envoy:C++原生性能没得说,线程模型比Nginx还先进,水平扩展,所有配置均支持动态接口。最吸引我的是WASM的插件机制,逻辑上WASM可以编译到原生水平,还有很好的容器属性。只要push/pull就能增加插件进行使用。功能性能上,需要看场景。我关注在差异上,也就是高扩展与独立。

Envoy:C++原生性能没得说,线程模型比Nginx还先进,水平扩展,所有配置均支持动态接口。最吸引我的是WASM的插件机制,逻辑上WASM可以编译到原生水平,还有很好的容器属性。只要push/pull就能增加插件进行使用。

Traefik在今年上半年选型时,我很看好,独立,2.0开始支持L4,与Swarm,K8S结合都很好,性能也与Nginx不相上下,但配置动态还自带UI,可惜当时不支持插件,惜败。没想到从2.3开始支持golang的动态链接库和golang代码解析执行两种(Dev Mode),实验阶段。

Kong/OpenResty:Nginx性能没的说,Lua动态没得说,Kong增加了控制平面的动态能力,差就差在Kong是几个东西组合的,大而全,但不小也不美,配置部署都麻烦。

Krakend:这个是个欧洲公司,小众,golang,插件支持Lua与Golang,性能说是比Kong高,有很技术后发优势,小而美,自带UI。但生态上还是和几个大哥差太多了,怕半路夭折了,长期观望。

Envoy VS Traefik

C++ VS Golang

WASM插件 VS Golang插件

小而聚(无控制) VS 小而全(自带UI)

Envoy WASM插件:

https://github.com/envoyproxy/envoy/tree/master/examples/wasm-cc

BodyRewrite的流程,弄了一遍,总体不算太痛苦,哭在写C++上比较烦,当前还支持Rust,所以不算缺点。

本身插件是WASM文件,如果支持容器,还需要一些繁琐的步骤。据说性能目前还不行。可以先用Lua。

这里是Hub的生态,还比较冷清

https://docs.solo.io/web-assembly-hub/latest

Traefik插件:

https://github.com/traefik/plugindemo

Golang的开发成本更低,写起来比较快,动态性上差点。

Plugins的生态更冷清。

https://pilot.traefik.io/plugins

虽然在插件概念上,大家都各用奇招。但插件需求还是比较高级的开发者需求,普通用户不一定用到。

其他功能

gRPC:都支持。

状态:虽说Proxy无状态的,但状态是我的特殊需求,比如RateLimit如何实现,分布式下如何存储状态,效率如何。两者实现默认都是无状态的,不能集群全局RateLimit。Envoy给了一种gRPC实现有状态的实现的例子。

数据收集:Traefik比较弱,主要是文本输出Access,Envoy更加灵活可以将日志通过gPRC protobuf输出。

总结

Envoy的门槛更高,定位更有想象力,聚焦Data Plane,CloudNative的网红。

Traefik自带Control,上手快速,功能不花哨,就和它的Sologan一样 “Just Works“。

各有优劣,不相上下,持续关注吧。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:23donge

查看原文:Envoy VS Treafik

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

569 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传