云原生场景,产生了很多的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,无依赖,无状态