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

article/2025/10/2 4:28:16

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

1、Linkerd

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

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

  • 支持多平台:可运行于多种平台,比如KubernetesDC/OSDocker,甚至虚拟机或物理机。
  • 无缝集成多种服务发现工具。
  • 支持多协议,如gRPCHTTP/1.xHTTP/2,甚至可通过linkerd-tcp支持TCP协议。
  • 支持与第三方分布式追踪系统Zipkin集成。
  • 灵活性、扩展性高,可通过其提供的接口开发自定义插件。

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

  • LinkerdLinkerd使用**Scala语言编写**,运行于JVM,底层基于Twitter的Finagle库,并对其做了相应的扩展。
  • Linkerd2:使用Go语言和Rust语言完全重写了Linkerd,专门用于Kubernetes

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

在这里插入图片描述

  • 控制平面

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

    由以下部分组成:

    • Controller:由public-api容器组成,该容器为CLIdashboard提供接口API。
    • Destination:数据平面中的每个代理都使用此组件来查找将请求发送到哪里。还用于获取服务配置信息,如:路由指标,重试和超时等。
    • Identity:该组件提供了证书的颁发,接受来自代理的CSRs并返回正确身份签名的证书。这些证书由代理在启动时获取,并且必须在代理准备就绪之前发出。随后,它们可用于Linkerd代理之间的任何连接以实现mTLS
    • Proxy Injector:是一个注入程序,每次创建一个pod时,它都会接收一个webhook请求。该注入程序检查资源以查找特定于Linkerd的注释(linkerd.io/inject: enabled)。当存在该注释时,注入器将更改容器的规范,并添加 initContainer包含代理本身的以及附属工具。
    • Service Profile Validator:用于在保存新服务配置文件之前先对其进行验证。
    • Tap:从CLIdashboard接收请求,以实时监视请求和响应。
  • 数据平面

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

2、Envoy

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

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

  • 优先支持HTTP/2gRPC,同时支持Websocket和TCP代理。
  • API驱动的配置管理方式,支持动态管理、更新配置以及无连接和请求丢失的热重启功能。
  • L3/L4层过滤器形成Envoy核心的连接管理功能。
  • 通过与多种指标收集工具及分布式追踪系统集成,实现运行时指标收集、分布式追踪,提供整个系统及服务的运行时可见性。
  • 内存资源使用率低,sidecarEnvoy最常用的部署模式。

3、Istio

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

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

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

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

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

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

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

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

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

  • 平台支持:Istio旨在在各种环境中运行,包括跨云, 预置,KubernetesMesos等。最初专注于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的主要目标是轻量级、高性能、安全并且非常容易理解和使用。同LinkerdIstioConduit也包含数据平面和控制平面,其中数据平面由Rust语言开发,使得Conduit使用极少的内存资源,而控制平面由Go语言开发。Conduit依然支持Service Mesh要求的功能,而且还包括以下功能:

  • 超级轻量级和极快的性能。
  • 专注于支持Kubernetes平台,提高运行在Kubernetes平台上服务的可靠性、可见性及安全性。
  • 支持gRPCHTTP/2HTTP/1.x请求及所有TCP流量。

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

5、对比总结

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

功能LinkerdEnvoyIstioConduit
代理Finagle + JettyEnvoyEnvoyConduit
熔断支持。基于连接的熔断器Fast Fail和基于请求的熔断器Failure Accrual支持。通过特定准则,如最大连接数、 最大请求数、最大挂起请求数或者最大重试数的设定。支持。通过特定准则,如最大连接数和最大请求数等的设定。暂不支持。
动态路由支持。通过设置Linkerddtab规则实现不同版本服务请求的动态路由。支持。通过服务的版本或环境信息实现。支持。通过服务的版本或环境信息实现。暂不支持。
流量分流支持。以增量和受控的方式实现分流。支持。以增量和受控的方式实现分流。支持。以增量和受控的方式实现分流。暂不支持。
服务发现支持。支持多种服务发现机制,如基于文件的服务发现、ConsulZookeeperKubernetes等。支持。通过提供平台无关的服务发现接口实现与不同服务发现工具集成。支持。通过提供平台无关的服务发现接口实现与不同服务发现工具集成。只支持Kubernetes
负载均衡支持。提供多种负载均衡算法。支持。提供多种负载均衡算法,如Round Robin、加权最小请求、哈希环、Maglev等。支持。提供多种负载均衡算法,如Round Robin、加权最小请求、哈希环、Maglev等。支持。当前只有HTTP请求支持基于P2C + least-loaded的负载均衡算法。
安全通信支持TLS支持TLS支持TLS支持TLS
访问控制不支持。不支持。支持。基于RBAC的访问控制。暂不支持。
可见性分布式追踪(Zipkin)、运行时指标(InfluxDBPrometheusstatsd)分布式追踪(Zipkin)、运行时指标(statsd)分布式追踪(Zipkin)、运行时指标(Prometheusstatsd)、监控(NewRepicStackdriver)运行时指标(Prometheus)
部署模式sidecar或者per-host模式sidecar模式sidecar模式sidecar模式
控制平面Namerd没有,但可通过API实现。PilotMixerCitadelConduit
协议支持HTTP/1.xHTTP/2gRPCHTTP/1.xHTTP/2gRPCTCPHTTP/1.xHTTP/2gRPCTCPHTTP/1.xHTTP/2gRPCTCP
运行平台平台无关平台无关目前支持Kubernetes,平台无关是最终实现目标。只支持Kubernetes

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


http://chatgpt.dhexx.cn/article/6OfuaMKI.shtml

相关文章

ue4 中动画控制,利用conduit节点

Actor的动画状态可能有几种idle,run,walk,skill,而skill中由又有几种不同的技能动作,要做进步一控制,这里只是提供一种思路,利用动画蓝图里的 conduit 节点,减少大量重复性的 state&…

PIX中Conduit命令用法

<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /> conduit命令用来允许数据流从具有较低安全级别的接口流向具有较高安全级别的接口&#xff0c;例如允许从外部到DMZ或内部接口的入方向的会话。对于向内部接口的连接&#xff0c;…

Service Mesh-Conduit概览

2019独角兽企业重金招聘Python工程师标准>>> Service Mesh-Conduit概览 Conduit是一款针对Kubernetes的超轻量级的service mesh。它可以透明得管理服务运行时之间的通信&#xff0c;使得在Kubernetes上运行服务更加安全和可靠&#xff1b;它还具有不用修改任何应用程…

WebApp开发实践

网上购物网站&#xff08;以出售软件为例&#xff09; webApp开发由Java实现&#xff0c;运用了 jdbc&#xff0c;jsp&#xff0c;servlet&#xff0c;jQueryFlot图表 等技术&#xff0c;数据库为SqlServer2008&#xff0c;仅供参考学习&#xff0c;转载文章需注明: 一、后台…

Qt+QtWebApp开发笔记(五):http服务器html中使用json触发ajax与后台交互实现数据更新传递

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/131122772 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

webapp开发框架选择注意点

webapp开发框架选择需要注意&#xff1a; 第一步&#xff1a;开发支持的语言类型 根据前端开发人员的能力&#xff0c;来选择webapp开发框架。 例如&#xff1a;前端人员只会写react 就要求webapp开发框架支持react。 第二步&#xff1a;查看webapp开发框架文档是否齐全 例…

Qt+QtWebApp开发笔记(二):http服务器日志系统介绍、添加日志系统至Demo测试

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/130762721 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

WebApp开发----数字角标

数字角标--有底色和无底色 数字角标一般和其它控件&#xff08;列表、9宫格、选项卡等&#xff09;配合使用&#xff0c;用于进行数量提示。 角标的核心类是.mui-badge&#xff0c;默认为实心灰色背景&#xff1b;同时&#xff0c;mui还内置了蓝色&#xff08;blue&#xff09…

WebApp开发学习

1.折叠面板 <!DOCTYPE html> <html> <head><meta charset"utf-8"><meta name"viewport" content"widthdevice-width,initial-scale1,minimum-scale1,maximum-scale1,user-scalableno" /><title></title…

webApp开发心得

从事单页相关的开发一年有余&#xff0c;期间无比的推崇webapp的网站模式&#xff0c;也整理了很多移动开发的知识点&#xff0c;但是现在回过头来看&#xff0c;webapp究竟是好还是不好真是一言难尽哟&#xff01; webapp使用JavaScript修改页面&#xff1b;紧接着再从服务器…

Qt+QtWebApp开发笔记(一):QtWebApp介绍、下载和搭建基础封装http轻量级服务器Demo

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/130631547 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

安卓WebApp开发-项目MiliSetu

文章目录 目录 文章目录 前言 WebAPP开发 一、WebAPP是什么&#xff1f; 二、安装HBuilder X 1.HBuilder X 官网 2.创建一个app项目 3.项目文件 ​编辑 index 总结 前言 WebAPP开发 WebApp开发&#xff0c;是移动端程序的实现方式之一&#xff0c;是一种简单&#…

关于webapp开发

最近想搞一个自用的手机app&#xff0c;但是Android开发给我的感觉是麻烦&#xff0c;想着web也可以制作手机app&#xff0c;于是去网上搜索了一番&#xff0c;最后下载了HBuilderX&#xff0c;然后开始搞&#xff0c;对于原生web&#xff0c;选择5App&#xff0c;默认模板就行…

Web App 开发

0. jQuery Mobile 介绍 jQM是为触控优化的移动web框架&#xff0c;用来设计响应式网站和跨平台移动开发的&#xff1b; &#xff08;这里的跨平台指的是可以运行在iOS、Android、BlackBerry、WindowsPhone各种平台上&#xff09; jQM的资料多而且详细、容易上手&#xff0c;对…

【WebApp】webApp开发总结(集合转贴)

为什么80%的码农都做不了架构师&#xff1f;>>> 【来源地址】 http://www.cnblogs.com/pifoo/archive/2011/05/28/webkit-webapp.htmlhttp://classjs.com/tag/%E7%A7%BB%E5%8A%A8%E7%AB%AF%E5%BC%80%E5%8F%91/http://java-mans.iteye.com/blog/1639503http://www.z…

iOS开发入门——项目创建

iOS开发入门——项目创建 1、新建项目 2、项目模版 3、项目配置 配置好之后点下一步就好。。。。 4、确定存储位置 5、启动模拟器 这就是第一个空白项目的创建过程&#xff0c;后面将持续更新iOS开发学习经历。

ios开发基础教程

博客专栏 斯坦福iOS公开课笔记 文章&#xff1a;8篇 阅读&#xff1a;11187 IOS开发进阶 文章&#xff1a;9篇 阅读&#xff1a;34499 深入浅出Objective-C 文章&#xff1a;17篇 阅读&#xff1a;56719 IOS开发入门实例 文章&#xff1a;30篇 阅读&#xff1a;134894

iOS开发学习指南

1. 提升你的英语水平 虽然知乎er的平均水平比较高&#xff0c;但是现实情况是很大一部分程序员的英文水平是不太过关的。那大概需要提升到什么水平呢&#xff1f;我觉得达到比较流畅的阅读技术文档及书籍&#xff0c;配合英文字幕可以比较轻松的观看wwdc的session的水平就可以…

iOS开发入门——简单上手体验

iOS开发入门——简单上手体验 下面我们正式进入对iOS即swift的探索了解&#xff0c;我们在上一篇iOS开发入门——项目创建中已经创建了一个项目&#xff0c;我们将基于它继续探索&#xff0c;如下图所示&#xff1a; 我们双击即可进入这个项目。 1、进入项目 进入项目后如下图…

IOS开发之——入门

前言 目前主要的移动开发平台有&#xff1a;Android、iOS、WindowsPhone&#xff0c;前两者占据着绝大多数的终端应用&#xff0c;我们常说的移动开发就是指&#xff1a;Android和iOS开发。本位主要讲述IOS的开发。 Android、iOS系统架构对比 android是基于Linux内核设计的&…