Service Mesh框架选型对比分析:Linkerd、Envoy、Istio、Conduit
当前,业界主要有以下主要几种Service Mesh
框架,下面进行详细的说明及对比。
1、Linkerd
Linkerd
是Buoyant公司2016年率先开源的高性能网络代理,是业界的第一款Service Mesh
框架。其主要用于解决分布式环境中服务之间通信面临的一些问题,如网络不可靠、不安全、延迟丢包等问题。
Linkerd
使用Scala语言编写,运行于JVM
,底层基于Twitter的Finagle
库,并对其做了相应的扩展。最主要的是Linkerd
具有快速、轻量级、高性能等特点,每秒以最小的延迟及负载处理万级请求,易于水平扩展。除此之外,还有以下功能:
- 支持多平台:可运行于多种平台,比如
Kubernetes
、DC/OS
、Docker
,甚至虚拟机或物理机。 - 无缝集成多种服务发现工具。
- 支持多协议,如
gRPC
、HTTP/1.x
、HTTP/2
,甚至可通过linkerd-tcp
支持TCP协议。 - 支持与第三方分布式追踪系统
Zipkin
集成。 - 灵活性、扩展性高,可通过其提供的接口开发自定义插件。
目前,Linkerd
和Linkerd2
并行开发,其情况如下:
Linkerd
:Linkerd
使用**Scala
语言编写**,运行于JVM
,底层基于Twitter的Finagle
库,并对其做了相应的扩展。Linkerd2
:使用Go
语言和Rust
语言完全重写了Linkerd
,专门用于Kubernetes
。
Linkerd
本身是数据平面,负责将数据路由到目标服务,同时保证数据在分布式环境中传输是安全、可靠、快速的。另外,Linkerd
还包括控制平面组件Namerd
,通过控制平面Namerd
实现中心化管理和存储路由规则、中心化管理服务发现配置、支持运行时动态路由以及暴露Namerd API
管理接口。
控制平面
是在
Kubernetes
特定命名空间中运行的一组服务。这些服务可以完成各种事情:聚集遥测数据,提供面向用户的API,向数据平面代理提供控制数据等。由以下部分组成:
Controller
:由public-api
容器组成,该容器为CLI
和dashboard
提供接口API。Destination
:数据平面中的每个代理都使用此组件来查找将请求发送到哪里。还用于获取服务配置信息,如:路由指标,重试和超时等。Identity
:该组件提供了证书的颁发,接受来自代理的CSRs并返回正确身份签名的证书。这些证书由代理在启动时获取,并且必须在代理准备就绪之前发出。随后,它们可用于Linkerd
代理之间的任何连接以实现mTLS
。Proxy Injector
:是一个注入程序,每次创建一个pod
时,它都会接收一个webhook
请求。该注入程序检查资源以查找特定于Linkerd
的注释(linkerd.io/inject: enabled
)。当存在该注释时,注入器将更改容器的规范,并添加initContainer
包含代理本身的以及附属工具。Service Profile Validator
:用于在保存新服务配置文件之前先对其进行验证。Tap
:从CLI
和dashboard
接收请求,以实时监视请求和响应。
数据平面
由轻量级代理组成,这些代理作为
sidecar
容器与服务代码的每个实例一起部署。为了将服务“添加”到Linkerd
服务网格,必须重新部署该服务的Pod
,以在每个Pod中包含数据平面代理。
2、Envoy
同Linkerd
一样,Envoy
也是一款高性能的网络代理,于2016年10月份有Lyft公司开源,为云原生应用而设计,可作为边界入口,处理外部流量,此外,也作为内部服务间通信代理,实现服务间可靠通信。Envoy
的实现借鉴现有生产级代理及负载均衡器,如Nginx
、HAProxy
、硬件负载均衡器及云负载均衡器的实践经验,同时基于C++
编写及Lyft公司生产实践证明,Envoy
性能非常优秀、稳定。
Envoy
既可用作独立代理层运行,也可作为Service Mesh
架构中数据平面层,因此通常Envoy
跟服务运行在一起,将应用的网络功能抽象化,Envoy
提供通用网络功能,实现平台及语言无法性。除此之外,还有以下功能:
- 优先支持
HTTP/2
和gRPC
,同时支持Websocket
和TCP代理。 - API驱动的配置管理方式,支持动态管理、更新配置以及无连接和请求丢失的热重启功能。
L3/L4
层过滤器形成Envoy
核心的连接管理功能。- 通过与多种指标收集工具及分布式追踪系统集成,实现运行时指标收集、分布式追踪,提供整个系统及服务的运行时可见性。
- 内存资源使用率低,
sidecar
是Envoy
最常用的部署模式。
3、Istio
Istio
是由Google
、IBM
和Lyft
发起的开源的Service Mesh
框架。该项目在2017年推出,并在2018年7月发布了1.0版本。
Istio
是Service Mesh
目前的实现的典型代表,如果Sidecar
是整个Service Mesh
的数据面,那么Istio
主要在控制面上做了更多的改进,Istio
使用Envoy
作为Sidecar
,控制面相关全部使用Golang
编写,性能上有了很大的提升。
Istio
首先是一个服务网格,但是Istio
又不仅仅是服务网格:在 Linkerd
,Envoy
这样的典型服务网格之上,Istio
提供了一个完整的解决方案,为整个服务网格提供行为洞察和操作控制,以满足微服务应用程序的多样化需求。
Istio
在服务网络中统一提供了许多关键功能:
流量管理:控制服务之间的流量和API调用的流向,使得调用更可靠,并使网络在恶劣情况下更加健壮。
可观察性:了解服务之间的依赖关系,以及它们之间流量的本质和流向,从而提供快速识别问题的能力。
策略执行:将组织策略应用于服务之间的互动,确保访问策略得以执行,资源在消费者之间良好分配。策略的更改是通过配置网格而不是修改应用程序代码。
服务身份和安全:为网格中的服务提供可验证身份,并提供保护服务流量的能力,使其可以在不同可信度的网络上流转。
除此之外,
Istio
针对可扩展性进行了设计,以满足不同的部署需要。平台支持:
Istio
旨在在各种环境中运行,包括跨云, 预置,Kubernetes
,Mesos
等。最初专注于Kubernetes
,但很快将支持其他环境。集成和定制:策略执行组件可以扩展和定制,以便与现有的
ACL
,日志,监控,配额,审核等解决方案集成。
这些功能极大的减少了应用程序代码,底层平台和策略之间的耦合,使微服务更容易实现。
Istio
架构图中各个子模块功能如下:
Envoy
:负责各个应用服务之间通信。Pilot
:管理和配置Envoy
,提供服务发现、负载均衡和智能路由,保证弹性服务(服务超时次数、重试、熔断策略)。Mixer
:信息监控检查。Istio-Auth
:提供服务和服务、用户和服务之间的认证服务,实现访问控制,解决是谁访问的是哪个 API 的问题。
其中,图中的通信代理组件为Envoy
,这是Istio
原生引入的,但Linkerd
也能够集成对接Istio
。
4、Conduit
Conduit
于2017年12月发布,作为由Buoyant继Linkerd
后赞助的另外一个开源项目,作为Linkerd
面向Kubernetes
的独立版本。Conduit
旨在彻底简化用户在Kubernetes
使用服务网格的复杂度,提高用户体验,而不是像Linkerd
一样针对各种平台进行优化。
Conduit
的主要目标是轻量级、高性能、安全并且非常容易理解和使用。同Linkerd
和Istio
,Conduit
也包含数据平面和控制平面,其中数据平面由Rust
语言开发,使得Conduit
使用极少的内存资源,而控制平面由Go
语言开发。Conduit
依然支持Service Mesh
要求的功能,而且还包括以下功能:
- 超级轻量级和极快的性能。
- 专注于支持
Kubernetes
平台,提高运行在Kubernetes
平台上服务的可靠性、可见性及安全性。 - 支持
gRPC
、HTTP/2
和HTTP/1.x
请求及所有TCP流量。
Conduit
以极简主义架构,以零配置理念为中心,旨在减少用户与Conduit
的交互,实现开箱即用。
5、对比总结
下面对上述各种Service Mesh框架进行简单的比较汇总,见下表所示:
功能 | Linkerd | Envoy | Istio | Conduit |
---|---|---|---|---|
代理 |
Finagle + Jetty
|
Envoy
|
Envoy
|
Conduit
|
熔断 |
支持。基于连接的熔断器Fast Fail 和基于请求的熔断器Failure Accrual 。
|
支持。通过特定准则,如最大连接数、 最大请求数、最大挂起请求数或者最大重试数的设定。 | 支持。通过特定准则,如最大连接数和最大请求数等的设定。 | 暂不支持。 |
动态路由 |
支持。通过设置Linkerd 的dtab 规则实现不同版本服务请求的动态路由。
|
支持。通过服务的版本或环境信息实现。 | 支持。通过服务的版本或环境信息实现。 | 暂不支持。 |
流量分流 | 支持。以增量和受控的方式实现分流。 | 支持。以增量和受控的方式实现分流。 | 支持。以增量和受控的方式实现分流。 | 暂不支持。 |
服务发现 |
支持。支持多种服务发现机制,如基于文件的服务发现、Consul 、Zookeeper 、Kubernetes 等。
|
支持。通过提供平台无关的服务发现接口实现与不同服务发现工具集成。 | 支持。通过提供平台无关的服务发现接口实现与不同服务发现工具集成。 |
只支持Kubernetes 。
|
负载均衡 | 支持。提供多种负载均衡算法。 |
支持。提供多种负载均衡算法,如Round Robin 、加权最小请求、哈希环、Maglev 等。
|
支持。提供多种负载均衡算法,如Round Robin 、加权最小请求、哈希环、Maglev 等。
|
支持。当前只有HTTP请求支持基于P2C + least-loaded 的负载均衡算法。
|
安全通信 |
支持TLS 。
|
支持TLS 。
|
支持TLS 。
|
支持TLS 。
|
访问控制 | 不支持。 | 不支持。 |
支持。基于RBAC 的访问控制。
|
暂不支持。 |
可见性 |
分布式追踪(Zipkin )、运行时指标(InfluxDB 、Prometheus 、statsd )
|
分布式追踪(Zipkin )、运行时指标(statsd )
|
分布式追踪(Zipkin )、运行时指标(Prometheus 、statsd )、监控(NewRepic 、Stackdriver )
|
运行时指标(Prometheus )
|
部署模式 |
sidecar 或者per-host 模式
|
sidecar 模式
|
sidecar 模式
|
sidecar 模式
|
控制平面 |
Namerd
|
没有,但可通过API实现。 |
Pilot 、Mixer 、Citadel
|
Conduit
|
协议支持 |
HTTP/1.x 、HTTP/2 、gRPC
|
HTTP/1.x 、HTTP/2 、gRPC 、TCP
|
HTTP/1.x 、HTTP/2 、gRPC 、TCP
|
HTTP/1.x 、HTTP/2 、gRPC 、TCP
|
运行平台 | 平台无关 | 平台无关 |
目前支持Kubernetes ,平台无关是最终实现目标。
|
只支持Kubernetes 。
|
综上对比,推荐选择生态比较完善的Istio
。
Service Mesh框架选型对比分析:Linkerd、Envoy、Istio、Conduit相关推荐
- 构建基于Spring Cloud向Service Mesh框架迁移的解决方案及思路
作为新一代微服务架构体系,Service Mesh 技术有效地解决了 Spring Cloud 微服务架构和服务治理过程中的痛点问题,一经推出便引起了很大的反响.近一年来,伴随着云原生的热火朝天,Se ...
- 关于PE4259等各类射频开关选型对比分析
射频器件是无线通信设备的基础性零部件,在无线通信中扮演着两个重要的角色:首先是在发射信号的过程中,能将二进制信号转换成高频率的无线电磁波信号:其次是在接收信号的过程中,能将收到的电磁波信号转换成二进制 ...
- 常见微服务框架和对比分析
常见的微服务框架 第一代微服务框架 SpringCloud Spring Boot:快速开发微服务的框架(可以快速开发出一个单体微服务项目) SpringCloud 为开发者提供了快速构建分布式系统 ...
- Linkerd or Istio?哪个Service Mesh框架更适合你?
翻译 | 宋松 原文 | https://medium.com/solo-io/linkerd-or-istio-6fcd2aad6e42 本周我开始写一篇比较Istio和Linked的帖子,并且告诉 ...
- 聊聊Service Mesh:linkerd
[编者的话]随着企业逐渐将传统的单体应用向微服务或云原生应用的转变,虽然微服务或者云原生应用能给企业带来更多的好处,但也会带来一些具有挑战的问题,如怎么管理从单体应用转向微服务所带来的服务间通讯的复杂 ...
- 下一代 Service Mesh -- istio 架构分析
前面的分享中,我们讲到,出于性能和稳定的考虑,我们没有采用以 istio 为代表的第二代 service mesh技术,而是直接使用了 Envoy 搭配自己的 xDS 服务. 然而我们还是有必要去了解 ...
- Service Mesh:调度千军万马微服务,2.0妥妥的
冠望 发自 凹非寺 量子位 报道 | 公众号 QbitAI 过去一年,继Kubernetes风靡,Service Mesh已成功上位变成当之无愧的技术网红. TA不但可以极大简化用户使用体验,还将大中 ...
- 正确入门Service Mesh:起源、发展和现状
简介:Service Mesh早已不是一个新兴的概念,但大家对Service Mesh的探索依然火热.本文将依次讲解Service Mesh的定义(什么是Service Mesh).起因(为什么需要S ...
- 一文搞懂 Service Mesh 和 API Gateway 关系和区别
公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 关于Service Mesh和API Gateway之间的关系,这个问题过去两年间经常被问起,社区也有不少文章和资 ...
- 蚂蚁金服的 Service Mesh 演进之道?
蚂蚁金服在服务化上面已经经过多年的沉淀,支撑了每年双十一的高峰峰值.Service Mesh 作为微服务的一个新方向,在最近两年成为领域的一个大热点,但是如何从经典服务化架构往 Service Mes ...
最新文章
- 会议:第七届全国生物多样性信息学研讨会(9月25-27日)
- “阿一web标准学堂”选修课:EditPlus高级使用技巧(附视频、课件、代码下载)...
- HostMonitor使用介绍
- Aix oracle 自动启动,AIX如何自动启动和关闭软件的运行
- 深度学习中学习率(lr:learn rate)和batchsize如何影响模型性能?
- iOS开发之检查更新
- java如何查看调用记录_查看Java记录
- 服务器安装三节点RabbitMQ集群(3)
- comsol 超声声场模拟_新品上市 | COMSOL 物理仿真软件全新发布5.6 版本并推出四个新模块...
- 2019胡润全球富豪榜发布:最有钱的华人还是他!
- RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件介绍
- 大规模中文自然语言处理语料(百科,问答、新闻,翻译)
- 机器学习基础:K近邻算法(Machine Learning Fundamentals: KNN)
- CAN 报文编码学习笔记二:汽车CAN协议测试——发送与接收
- Android网速实时显示
- 这个世界的本源不是物质,而是物质背后的基本秩序-柏拉图
- 解决No thread-bound request found: Are you referring to request attributes outside of an actual web...
- Open3D-GUI系列教程(七)打包应用程序
- 论文阅读 Glow: Generative Flow with Invertible 1×1 Convolutions
- JavaSE02-JVM、JRE、JDK