Bootstrap

Service Mesh框架选型对比分析:Linkerd、Envoy、Istio、Conduit

当前,业界主要有以下主要几种框架,下面进行详细的说明及对比。

1、Linkerd

是Buoyant公司2016年率先开源的高性能网络代理,是业界的第一款框架。其主要用于解决分布式环境中服务之间通信面临的一些问题,如网络不可靠、不安全、延迟丢包等问题。

使用Scala语言编写,运行于,底层基于Twitter的库,并对其做了相应的扩展。最主要的是具有快速、轻量级、高性能等特点,每秒以最小的延迟及负载处理万级请求,易于水平扩展。除此之外,还有以下功能:

  • 支持多平台:可运行于多种平台,比如、、,甚至虚拟机或物理机。

  • 无缝集成多种服务发现工具。

  • 支持多协议,如、、,甚至可通过支持TCP协议。

  • 支持与第三方分布式追踪系统集成。

  • 灵活性、扩展性高,可通过其提供的接口开发自定义插件。

目前,和并行开发,其情况如下:

  • :使用**语言编写**,运行于,底层基于Twitter的库,并对其做了相应的扩展。

  • :使用语言和语言完全重写了,专门用于。

本身是数据平面,负责将数据路由到目标服务,同时保证数据在分布式环境中传输是安全、可靠、快速的。另外,还包括控制平面组件,通过控制平面实现中心化管理和存储路由规则、中心化管理服务发现配置、支持运行时动态路由以及暴露管理接口。

  • 控制平面

是在特定命名空间中运行的一组服务。这些服务可以完成各种事情:聚集遥测数据,提供面向用户的API,向数据平面代理提供控制数据等。

由以下部分组成:

  • :由容器组成,该容器为和提供接口API。

  • :数据平面中的每个代理都使用此组件来查找将请求发送到哪里。还用于获取服务配置信息,如:路由指标,重试和超时等。

  • :该组件提供了证书的颁发,接受来自代理的并返回正确身份签名的证书。这些证书由代理在启动时获取,并且必须在代理准备就绪之前发出。随后,它们可用于代理之间的任何连接以实现。

  • :是一个注入程序,每次创建一个时,它都会接收一个请求。该注入程序检查资源以查找特定于的注释()。当存在该注释时,注入器将更改容器的规范,并添加 包含代理本身的以及附属工具。

  • :用于在保存新服务配置文件之前先对其进行验证。

  • :从和接收请求,以实时监视请求和响应。

  • 数据平面

由轻量级代理组成,这些代理作为容器与服务代码的每个实例一起部署。为了将服务“添加”到服务网格,必须重新部署该服务的,以在每个Pod中包含数据平面代理。

2、Envoy

同一样,也是一款高性能的网络代理,于2016年10月份有Lyft公司开源,为云原生应用而设计,可作为边界入口,处理外部流量,此外,也作为内部服务间通信代理,实现服务间可靠通信。的实现借鉴现有生产级代理及负载均衡器,如、、硬件负载均衡器及云负载均衡器的实践经验,同时基于编写及Lyft公司生产实践证明,性能非常优秀、稳定。

既可用作独立代理层运行,也可作为架构中数据平面层,因此通常跟服务运行在一起,将应用的网络功能抽象化,提供通用网络功能,实现平台及语言无法性。除此之外,还有以下功能:

  • 优先支持和,同时支持和TCP代理。

  • API驱动的配置管理方式,支持动态管理、更新配置以及无连接和请求丢失的热重启功能。

  • 层过滤器形成核心的连接管理功能。

  • 通过与多种指标收集工具及分布式追踪系统集成,实现运行时指标收集、分布式追踪,提供整个系统及服务的运行时可见性。

  • 内存资源使用率低,是最常用的部署模式。

3、Istio

是由、和发起的开源的框架。该项目在2017年推出,并在2018年7月发布了1.0版本。

是目前的实现的典型代表,如果是整个的数据面,那么主要在控制面上做了更多的改进,使用作为,控制面相关全部使用编写,性能上有了很大的提升。

** 首先是一个服务网格,但是又不仅仅是服务网格:在 , 这样的典型服务网格之上,提供了一个完整的解决方案,为整个服务网格提供行为洞察和操作控制,以满足微服务应用程序的多样化需求。**

在服务网络中统一提供了许多关键功能:

  • 流量管理:控制服务之间的流量和API调用的流向,使得调用更可靠,并使网络在恶劣情况下更加健壮。

  • 可观察性:了解服务之间的依赖关系,以及它们之间流量的本质和流向,从而提供快速识别问题的能力。

  • 策略执行:将组织策略应用于服务之间的互动,确保访问策略得以执行,资源在消费者之间良好分配。策略的更改是通过配置网格而不是修改应用程序代码。

  • 服务身份和安全:为网格中的服务提供可验证身份,并提供保护服务流量的能力,使其可以在不同可信度的网络上流转。

  • 除此之外,针对可扩展性进行了设计,以满足不同的部署需要。

  • 平台支持:旨在在各种环境中运行,包括跨云, 预置,,等。最初专注于,但很快将支持其他环境。

  • 集成和定制:策略执行组件可以扩展和定制,以便与现有的,日志,监控,配额,审核等解决方案集成。

这些功能极大的减少了应用程序代码,底层平台和策略之间的耦合,使微服务更容易实现。

架构图中各个子模块功能如下:

  • :负责各个应用服务之间通信。

  • :管理和配置,提供服务发现、负载均衡和智能路由,保证弹性服务(服务超时次数、重试、熔断策略)。

  • :信息监控检查。

  • :提供服务和服务、用户和服务之间的认证服务,实现访问控制,解决是谁访问的是哪个 API 的问题。

其中,图中的通信代理组件为,这是原生引入的,但也能够集成对接。

4、Conduit

于2017年12月发布,作为由Buoyant继后赞助的另外一个开源项目,作为面向的独立版本。旨在彻底简化用户在使用服务网格的复杂度,提高用户体验,而不是像一样针对各种平台进行优化。

的主要目标是轻量级、高性能、安全并且非常容易理解和使用。同和,也包含数据平面和控制平面,其中数据平面由语言开发,使得使用极少的内存资源,而控制平面由语言开发。依然支持要求的功能,而且还包括以下功能:

  • 超级轻量级和极快的性能。

  • 专注于支持平台,提高运行在平台上服务的可靠性、可见性及安全性。

  • 支持、和请求及所有TCP流量。

以极简主义架构,以零配置理念为中心,旨在减少用户与的交互,实现开箱即用。

5、对比总结

下面对上述各种Service Mesh框架进行简单的比较汇总,见下表所示:

综上对比,推荐选择生态比较完善的。