CNCF 是⼀个开源软件基⾦会,致⼒于使云原⽣计算具有普遍性和可持续性。 云原⽣计算使⽤开源软件技术栈将应⽤程序部署为微服务,将每个部分打包到⾃⼰的容器中,并动态编排这些容器以优化资源利⽤率。 云原⽣技术使软件开发⼈员能够更快地构建出⾊的产品。
常⽤的已经毕业的云原⽣项⽬:Kubernetes、Prometheus、Jaeger、Envoy、Containerd
Linkerd是Buoyant公司2016年率先开源的⾼性能⽹络代理程序,是业界的第⼀款Service Mesh产品,甚⾄可以说Linkerd的诞⽣标志着Service Mesh时代的开始,其引领后来Service Mesh的快速发展。
其主要⽤于解决分布式环境中服务之间通信⾯临的⼀些问题,⽐如⽹络不可靠、不安全、延迟丢包等问题。Linkerd使⽤Scala语⾔编写,运⾏于JVM,底层基于Twitter的Finagle库,并对其做相应的扩展。
最主要的是Linkerd具有快速、轻量级、⾼性能等特点,每秒以最⼩的时延及负载处理万级请求,易于⽔平扩展,经过⽣产线测试及验证,可运⾏任何平台的产线级Service Mesh⼯具。
Envoy也是⼀款⾼性能的⽹络代理程序,于2016年10⽉份由Lyft公司开源,为云原⽣应⽤⽽设计可作为边界⼊⼝,处理外部流量,当然,也作为内部服务间通信代理,实现服务间可靠通信。
Envoy的实现借鉴现有产线级代理及负载均衡器,如Nginx、HAProxy、硬件负载均衡器及云负载衡器的实践经验,同时基于C++编写及Lyft公司产线实践证明,Envoy性能⾮常优秀、稳定。
Envoy既可⽤作独⽴代理层运⾏,也可作为Service Mesh架构中数据平⾯层,因此通常Envoy跟服运⾏在⼀起,将应⽤的⽹络功能抽象化,Envoy提供通⽤⽹络功能,实现平台及语⾔⽆关。
2017年5⽉24⽇,Google, IBM 和Lyft 共同发布Istio 的第⼀个公开版本(0.1)。Istio为⼀款开源的微服务提供服务间连接、管理以及安全保障的平台软件,⽀持运⾏在Kubernetes、Mesos等容器管理⼯具,但不限Kubernetes、Mesos,其底层依赖于Envoy。
Istio提供⼀种简单的⽅法实现服务间的负载均衡、服务间认证、监控等功能,⽽且⽆需应⽤层代调整。其控制平⾯由Pilot、Citadel 和Galley组成,数据平⾯由Envoy实现,通常情况下,数据平⾯理Envoy以sidecar模式部署,使得所有服务间的⽹络通信均由Envoy实现,⽽Istio的控制平⾯则负责务间流量管理、安全通信策略等功能。
Conduit于2017年12⽉发布,作为由Buoyant继Linkerd后赞助的另⼀个开源项⽬。Conduit旨在彻底简
化⽤户在Kubernetes使⽤服务⽹格的复杂度,提⾼⽤户体验,⽽不是像Linkerd⼀样针对各种平台进⾏
优化。
国内很多团队也已经在着⼿研究了,这些团队主要分为四类体系:
以蚂蚁⾦服为⾸的开源系:蚂蚁⾦服⾃研的SOFA (Scalable Open Financial Architecture)Mesh 在开始的时候⾛的就是开源路线,他们参考了Istio 及Envoy 的设计思想,重新实现了⾃⼰的Service Mesh 系统,旁路⽹关(Sidecar)基于Go 语⾔,该系统的前身是已经开源的SOFA RPC 框架。蚂蚁⾦服于2018 年7 ⽉正式将其开源,正式的可以⽤于⽣产的框架可能还需要⼀些时间。
以华为为代表的⾃研系:华为可能在Service Mesh 概念出来前就已经有类似的想法了,只是没有抽取出⼀个公共的概念。⽆论是华为早期的HSA 还是之后出现的CSE Mesher,都是对ServiceMesh 的探索。CSE Mesher 的整个架构都是基于华为⾃身微服务架构经验研发的,其Sidecar 也是⽤Go 语⾔编写的。如其官⽅⽂档所述,其资源占⽤⾮常⼩,常规状态下仅为30MB。
以腾讯为代表的拿来主义系:腾讯的Tencent Service Mesh对开源的产品(如Istio)进⾏定制,强化吸收后再加⼊⾃身特殊的业务逻辑。腾讯选择的Sidecar是Envoy,使⽤C++编写,⽐较符合腾讯的技术栈。其公开的技术并不多,仍然以内部⼩范围使⽤为主。