Service Mesh(服务网格)

Service Mesh作为下一代微服务技术的代名词,初出茅庐却深得人心一鸣惊人,大有一统微服务时代的趋势。

那么到底什么是Service Mesh?

一言以蔽之:Service Mesh是微服务时代的TCP协议。

有了这样一个感性的初步认知,我们再来看到底什么是Service Mesh。

提到Service Mesh,就不得不提微服务。根据维基百科的定义:

微服务 (Microservices) 是一种软件架构风格,它是以专注于单一责任与功能的小型功能区块 (Small
Building Blocks) 为基础,利用模块化的方式组合出复杂的大型应用程序,各功能区块使用与 语言无
关 (Language-Independent/Language agnostic) 的 API 集相互通信。

目前业界跟微服务相关的开发平台和框架更是不胜枚举:Spring Cloud, Service Fabric,Linkerd,Envoy,Istio …

这些纷繁的产品和Sevice Mesh有什么样的关联?哪些属于Service Mesh的范畴?

为了理清这些繁复的产品和概念,我们先来了解下微服务和Service Mesh技术的历史发展脉络。

了解清楚了技术的主要脉络,就能清晰的知道上述的各个平台、框架属于技术脉络中的哪个结点,其间的关系也就一目了然。

Phil Calçado的文章《Pattern: Service Mesh》,详细的介绍了从开发者视角来看,服务开发模式和Service Mesh技术的演化过程,个人认为是非常经典的学习Service Mesh的资料。这里借用文章的脉络,结合自己的理解并予以简化,试图说清楚ServiceMesh的概念和这项技术诞生的历史必然性。你可以把本文当做原文的一个中译版本来阅读。

时代0:开发人员想象中,不同服务间通信的方式,抽象表示如下:

在这里插入图片描述

时代1:原始通信时代

然而现实远比想象的复杂,在实际情况中,通信需要底层能够传输字节码和电子信号的物理层来完成,在TCP协议出现之前,服务需要自己处理网络通信所面临的丢包、乱序、重试等一系列流控问题,因此服务实现中,除了业务逻辑外,还夹杂着对网络传输问题的处理逻辑。

在这里插入图片描述

时代2:TCP时代

为了避免每个服务都需要自己实现一套相似的网络传输处理逻辑,TCP协议出现了,它解决了网络传输中通用的流量控制问题,将技术栈下移,从服务的实现中抽离出来,成为操作系统网络层的一部分。

在这里插入图片描述

时代3:第一代微服务

在TCP出现之后,机器之间的网络通信不再是一个难题,以GFS/BigTable/MapReduce为代表的分布式系统得以蓬勃发展。这时,分布式系统特有的通信语义又出现了,如熔断策略、负载均衡、服务发现、认证和授权、quota限制、trace和监控等等,于是服务根据业务需求来实现一部分所需的通信语义。

在这里插入图片描述

时代4:第二代微服务

为了避免每个服务都需要自己实现一套分布式系统通信的语义功能,随着技术的发展,一些面向微服务架构的开发框架出现了,如Twitter的Finagle、Facebook的Proxygen以及Spring Cloud等等,这些框架实现了分布式系统通信需要的各种通用语义功能:如负载均衡和服务发现等,因此一定程度上屏蔽了这些通信细节,使得开发人员使用较少的框架代码就能开发出健壮的分布式系统。

在这里插入图片描述

时代5:第一代Service Mesh

第二代微服务模式看似完美,但开发人员很快又发现,它也存在一些本质问题:

  • 其一,虽然框架本身屏蔽了分布式系统通信的一些通用功能实现细节,但开发者却要花更多精力去掌握和管理复杂的框架本身,在实际应用中,去追踪和解决框架出现的问题也绝非易事;
  • 其二,开发框架通常只支持一种或几种特定的语言,回过头来看文章最开始对微服务的定义,一个重要的特性就是语言无关,但那些没有框架支持的语言编写的服务,很难融入面向微服务的架构体系,想因地制宜的用多种语言实现架构体系中的不同模块也很难做到;
  • 其三,框架以lib库的形式和服务联编,复杂项目依赖时的库版本兼容问题非常棘手,同时,框架库的升级也无法对服务透明,服务会因为和业务无关的lib库升级而被迫升级;

因此以Linkerd,Envoy,NginxMesh为代表的代理模式(边车模式)应运而生,这就是第一代Service Mesh,它将分布式服务的通信抽象为单独一层,在这一层中实现负载均衡、服务发现、认证授权、监控追踪、流量控制等分布式系统所需要的功能,作为一个和服务对等的代理服务,和服务部署在一起,接管服务的流量,通过代理之间的通信间接完成服务之间的通信请求,这样上边所说的三个问题也迎刃而解。

在这里插入图片描述

如果我们从一个全局视角来看,就会得到如下部署图:

在这里插入图片描述

如果我们暂时略去服务,只看Service Mesh的单机组件组成的网络:

在这里插入图片描述

相信现在,大家已经理解何所谓Service Mesh,也就是服务网格了。它看起来确实就像是一个由若干服务代理所组成的错综复杂的网格。

时代6:第二代Service Mesh

第一代Service Mesh由一系列独立运行的单机代理服务构成,为了提供统一的上层运维入口,演化出了集中式的控制面板,所有的单机代理组件通过和控制面板交互进行网络拓扑策略的更新和单机数据的汇报。这就是以Istio为代表的第二代Service Mesh。

在这里插入图片描述

只看单机代理组件(数据面板)和控制面板的Service Mesh全局部署视图如下:

在这里插入图片描述

至此,见证了6个时代的变迁,大家一定清楚了Service Mesh技术到底是什么,以及是如何一步步演化到今天这样一个形态。

现在,我们再回过头来看Buoyant的CEO William Morgan,也就是Service Mesh这个词的发明人,对Service Mesh的定义:

服务网格是一个 基础设施层,用于处理服务间通信。云原生应用有着复杂的服务拓扑,服务网格保证 请求在这些拓扑中可靠地穿梭。在实际应用当中,服务网格通常是由一系列轻量级的 网络代理组成的,它们与应用程序部署在一起,但 对应用程序透明。

这个定义中,有四个关键词:

**基础设施层+请求在这些拓扑中可靠穿梭:**这两个词加起来描述了Service Mesh的定位和功能,是不是似曾相识?没错,你一定想到了TCP;

**网络代理:**这描述了Service Mesh的实现形态;

**对应用透明:**这描述了Service Mesh的关键特点,正是由于这个特点,Service Mesh能够解决以Spring Cloud为代表的第二代微服务框架所面临的三个本质问题;

总结一下,Service Mesh具有如下优点:

  • 屏蔽分布式系统通信的复杂性(负载均衡、服务发现、认证授权、监控追踪、流量控制等等),服务只用关注业务逻辑;
  • 真正的语言无关,服务可以用任何语言编写,只需和Service Mesh通信即可;
  • 对应用透明,Service Mesh组件可以单独升级;

当然,Service Mesh目前也面临一些挑战:

  • Service Mesh组件以代理模式计算并转发请求,一定程度上会降低通信系统性能,并增加系统资源开销;
  • Service Mesh组件接管了网络流量,因此服务的整体稳定性依赖于Service Mesh,同时额外引入的大量Service Mesh服务实例的运维和管理也是一个挑战;

历史总是惊人的相似。为了解决端到端的字节码通信问题,TCP协议诞生,让多机通信变得简单可靠;微服务时代,Service Mesh应运而生,屏蔽了分布式系统的诸多复杂性,让开发者可以回归业务,聚焦真正的价值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557725.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重装系统计算机无法启动,手把手教你电脑无法开机怎么重装系统

电脑开不了机怎么重装系统,以前人们都是运用光驱驱动盘模式来装系统,可是操作起来会稍微有些麻烦,导致现在很多人提到装系统都望而生畏。其实现在装系统已经很简单了,这里小编就给大家陈述一下电脑在开不了机的情况下怎么重装系统…

计算机打印机无法扫描,佳能MF4752打印机无法扫描文件怎么办?

佳能MF4752安装完驱动后无法扫描,在打印机上面按右键选开始扫描,点预览出来的是空白。用开始——所有程序——Windows 传真扫描进行扫描时会自动退出,发现系统自带的扫描程序无法扫描后安装了佳能的扫描软件Canon MF ToolBox ,但在扫描的时候…

技校毕业是什么学历_初中毕业上技校学什么专业好

对于初中毕业的学生无法进入高中的,只有选择职业技能学校也就是大家所说的技校,通过学习专业技能理论知识与实践操作技能达到一定的水平获得相关的学历和技能证书。大多数初中毕业生因为不了解就业情况所以不知道自己能够选择什么样的专业学习才能够有更…

c++如何快速写出get set_如何快速写出一篇合格的毕业论文

从自己毕业时艰难的才能在三个月内完成一篇,到如今十天内就可以整出来一篇,不需要加班的那种。本人的专业是法律硕士,在此仅以法律专业为例,如何快速写出一篇合格的毕业论文。事实告诉你,完全不用20天时间。一、选择合…

的安装方法_显卡安装方法

显卡安装方法1. 将机箱竖直站立的放置在桌面上,面朝机箱后面板(键鼠,USB,网线接口处),取下机箱后面板右侧上下的两颗大头螺丝,将机箱右侧的侧面板向后拉,即可取下右侧面板。2. 打开机箱侧板后,可…

Java 中访问路径的问题

在Java中路径分为绝对路径和相对路径 访问路径 通常访问路径也就是URL,统一资源定位符,URL由两部分组成资源路径和资源名称 资源名称也就是你要访问的路径,就比如我的image,我的image是访问的控制器的一个方法再由控制器方法转跳…

hashcode、equals

一、hashcode是什么? 1、hash和hash表是什么? 想要知道这个hashcode,首先得知道hash,通过百度百科看一下 hash是一个函数,该函数中的实现就是一种算法,就是通过一系列的算法来得到一个hash值&#xff0…

word怎么设置页码为第几页共几页

1.首先在WORD文档中编辑好你的文档内容; 2.点击插入中的页眉(或页脚),选择“空白内容”,出现[在此处键入]。如下面图片所示内容; 3.在[在此处键入]中输入第页,共页;([]…

Tue Jun 15 16:18:44 CST 2021 There was an unexpected error (type=Bad Request, status=400). Validatio

异常: 原因:点击链接,链接后边的参数值为null,controller中接受的对象不能接受到 id的值为null,不能封装到对象中 解决:

OS复习——设备管理习题

OS复习——设备管理习题 在I/O系统中引入缓冲的主要原因是什么?某文件占10个磁盘块,现要把该文件的磁盘块逐个读入主存缓冲区,并送用户区进行分析。一个缓冲区与磁盘块大小相等。把一个磁盘块读入缓冲区的时间为100μs,缓冲区数据…

职中心得体会300字高一计算机,职业高中毕业的自我鉴定范文300字

职业高中毕业的自我鉴定范文300字自我鉴定就是把一个时段的个人情况进行一次全面系统的总结,自我鉴定可以让我们对自己有个正确的认知,不如立即行动起来写一份自我鉴定吧。我们该怎么去写自我鉴定呢?下面是小编精心整理的职业高中毕业的自我鉴…

软件测试——语句覆盖

语句覆盖 一、定义: 程序中每一个语句至少能被执行一次 二、特点: 1、程序中每一个语句执行一次 2、对程序执行逻辑的覆盖率低,属于最弱的覆盖方式 3、无需测试程序的分支情况 4、无需测试程序分支判断的输入值以及输入值的组合 5、无需测试…

网络服务器最基本的是文件,你可能想知道的15个网络常用基础知识

原标题:你可能想知道的15个网络常用基础知识网络是一个复杂的系统,涉及知识很多。现在腾正小超人给大家分享15个常用的网络基础知识:1) 如何查看本机所开端口用netstat -a —n命令查看!再stat下面有一些英文,我来简单说一下这些英…

csdn如何插入多列表格?

csdn如何插入多列表格? 问题:点击插入表格只能插入两列 问题效果图: 如果我们想插入自己想要的表格效果该如何处理呢?首先可以百度Markdown 编辑器语法进行相关研究(由于自己基础薄弱,所以我就偷个懒&am…

反编译后怎么修改服务器地址,反编译后怎么修改服务器地址

反编译后怎么修改服务器地址 内容精选换一换业务接入DDoS高防后,经过高防转发的流量到服务端之后真实源IP将被隐藏,在业务应用开发中,通常需要获取客户端真实的IP地址。例如,投票系统为了防止刷票,需要通过获取客户端真…

五行塔怎么吃第五个_中医美容——“五行美容养颜法”,善用五行,女人会越来越漂亮...

人天生体质强人不同,俗话说“有人怎么吃都不胖,有人只喝水也长肉”,这说的就是体质不同,生活环境不同,饮食习惯不同。从中医的角度来讲,每个人都有属于自己的五行属性。这种属性深深的影响着你的身体器官、…

事务超时时间无效_什么是ZooKeeper?ZooKeeper分布式事务详解

前言zookeeper当初到底面临什么问题?而zookeeper又是如何解决这些问题的?实际上zookeeper主要就是解决分布式环境下的一致性问题。那么解决这个问题到底有哪些难点呢?我们一步一步来阐述和推理这个过程。分布式事务我们首先考虑一致性的特殊情…

MongoDB解决“Error parsing YAML config file: yaml-cpp: error at line 2, column value(安装服务)

解决“Error parsing YAML config file: yaml-cpp: error at line 2, column 13: illegal map value”(安装服务) 在安装 MongoDB服务中,我遇到以下报错: 解决: 于是我,我打开配置文件mongod.cfg&#x…

from mysql partition select_玩转select条件查询,避免踩坑

条件查询语法:select 列名 from 表名 where 列 运算符 值说明:注意关键字where,where后面跟上一个或者多个条件,条件是对前面数据的过滤,只有满足where后面条件的数据才会被返回。下面介绍常见的查询运算符。操作符描述…

Linux使用vi/vim打开文档/文件报错E325:ATTENTION Found a swap file by the name

重点:解决方法是: rm -rf .文件名.文件类型后缀.swp 如 rm -r .mongod.conf.swp 1、对于同一个文件如果上次已经打开,而未关闭的情况下,又打开该文件进行编辑时,会出现如下提醒: 这是由于已经打开但未闭关…