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 ,但在扫描的时候…

SpringBoot设置首页(默认页)跳转

SpringBoot设置首页(默认页)跳转 方案1:controller里添加一个"/"的映射路径 RequestMapping("/") public String index(Model model, HttpServletResponse response) {model.addAttribute("name", "simonsfan");return &…

计算机网络客户服务器应用,计算机网络工程教学资料-项目九 Internet服务器应用.pptx...

目前的网络绝大多数都可以看作是客户机/服务器网络,因此服务器在局域网中占有非常重要的地位。本项目将以Windows XP为例,来介绍服务器的安装方法,以及如何设置服务器。设置邮箱的容量大小及安全文件服务器的组建与应用E- mail服务器的组建与…

WebMvcConfigurerAdapter过时的替换方法

WebMvcConfigurerAdapter过时的替换方法 Spring 5.0后,WebMvcConfigurerAdapter被废弃,取代的方法有两种: ①implements WebMvcConfigurer(官方推荐) ②extends WebMvcConfigurationSupport 使用第一种方法是实现了…

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

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

四年级计算机笔试题,四年级计算机考试卷.doc

四年级计算机考试卷2010—2011(上)四年级信息技术期末试题闭卷 时间:40分钟 满分:100分一、单项选择题 (20*360)1、“金山文字”是一种(? ??)软件。???A、图形处理 ???????? B、表格处理 C、具有文字、图形混合排版功能的文字处理 D、不具…

thymeleaf(th:each th:selected) 从后台动态获取下拉框数据回显及选中

thymeleaf(th:each th:selected) 从后台动态获取下拉框数据回显及选中 <select οnchange"getChilds(this.value)" id"catId" name"catId"><option value""> -- 请选择 -- </option><option th:selected"…

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

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

th:text=“${user?.name}“ ${?.}

th:text"${user?.name}" thymeleaf中这样写的意思是如果user不为空&#xff0c;则得到user.name的值&#xff0c;如果user为空&#xff0c;则得到null

哈工大计算机学院成立,哈工大计算机科学与技术学院简介

哈尔滨工业大学计算机专业创建于1956年&#xff0c;是中国最早的计算机专业之一。在1985年, 它又发展成计算机科学与工程系&#xff0c;并建立了计算机科学技术研究所。2000年,计算机科学与技术学院成立。同年&#xff0c;建立了软件学院&#xff0c;后经国家教育部、国家计委批…

SpringMVC拦截器(interceptors)

一、什么是拦截器&#xff1f; spring提供的一个特殊的组件&#xff0c;当DispatcherServlet收到请求之后&#xff0c;如果有拦截器&#xff0c;会先调用拦截器&#xff0c;然后调用响应的处理器(Controller)。 注&#xff1a; 过滤器属于servlet规范&#xff0c;而拦截器属于…

选择计算机系统的依据是什么,大学计算机基础 试题

大学计算机基础 试题大学计算机基础考试会出什么样的试题?大家知道吗?下面小编为大家带来大学计算机基础试题&#xff0c;仅供参考&#xff0c;希望能够帮到大家。大学计算机基础试题一、单选题练习1.完整的计算机系统由( C )组成。A.运算器、控制器、存储器、输入设备和输…

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

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

Java 中访问路径的问题

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

黔东南天气预报软件测试,黔东南天气预报15天

发送给QQ好友★黔东南未来15天天气预报★黔东南天气预报7月22日 星期四:阵雨&#xff0c;22C~30C北风&#xff0c;小于3级黔东南天气预报7月23日 星期五:多云&#xff0c;22C~30C北风&#xff0c;小于3级黔东南天气预报7月24日 星期六:多云&#xff0c;21C~29C北风&#xff0c;…

m40型工业机器人_工业机器人选型的9大参数

工业机器人选型的9大参数By Mathieu人们经常讨论“机器人”。首先&#xff0c;对于工业自动化的行业外人士来说&#xff0c;要澄清的是工厂使用的“机器人”绝对不是类似的我的机器人女友中的类人机器人。对于自动化行业的老鸟&#xff0c;资深的机、电工程师来说&#xff0c;选…

hashcode、equals

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

科研工作者结合实验与计算机模拟,理论物理前沿重点实验室

中国科学院理论物理前沿重点实验室理论物理前沿重点实验室属于基础理论类实验室。实验室定位为&#xff1a;依托理论物理研究所&#xff0c;面向科学前沿&#xff0c;面向国家大科学工程&#xff0c;坚持“开放、流动、竞争、联合”&#xff0c;联合全国理论物理学工作者&#…

poi 不自动计算 设置单元格公式_Java POI:如何读取Excel单元格的值而不是计算公式?...

上面的建议对我来说不起作用cell.getRawValue()返回与AUT上的excel单元格相同的公式&#xff0c;所以写下面的函数&#xff0c;它工作&#xff1a;public void readFormula() throws IOException {FileInputStream fis new FileInputStream("Path of your file");Wo…