Service Mesh

news2025/1/13 6:10:22

Service Mesh

参考如下文章:可以将此文章看作为下面文章的结合:

https://zhuanlan.zhihu.com/p/61901608

https://philcalcado.com/2017/08/03/pattern_service_mesh.html

https://zhuanlan.zhihu.com/p/153105848?from_voters_page=true

微服务演化进程

  1. 想象中,不同服务间通信的方式:A和B之间通信

请添加图片描述

  1. 原始通信时代

    然而现实很骨感。在实际情况中,通信需要底层能够传输字节码和电子信号的物理层来完成。

    在TCP协议出现之前,服务需要自己处理网络通信所面临的丢包、乱序、重试等一系列流控问题。

    因此服务实现中,除了业务逻辑外,还夹杂着对网络传输问题的处理逻辑。

请添加图片描述

  1. TCP时代

    为了避免每个服务都需要自己实现一套相似的网络传输处理逻辑.

    TCP协议出现了,它解决了网络传输中通用的流量控制问题,将技术栈下移,从服务的实现中抽离出来,成为操作系统网络层的一部分。
    请添加图片描述

  2. 第一代微服务

    在TCP出现之后,机器之间的网络通信不再是一个难题.

    以GFS/BigTable/MapReduce为代表的分布式系统得以蓬勃发展。

    这时,分布式系统特有的通信语义又出现了,如熔断策略、负载均衡、服务发现、认证和授权、quota限制、trace和监控等等,于是服务根据业务需求来实现一部分所需的通信语义。
    请添加图片描述

  3. 第二代微服务

    为了避免每个服务都需要自己实现一套分布式系统通信的语义功能.

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

请添加图片描述

边车模式迭代到服务网格

Sidecar pattern

Deploy components of an application into a separate process or container to provide isolation and encapsulation.

将应用程序的组件部署到单独的进程或容器中,以提供隔离和封装。

— Sidecar pattern

边车模式的通俗理解:

边车模式最好的例子无疑是三轮摩托车,边车就是主摩托车上加装的来达到扩展功能的装置。比如:

  • 增强稳定性
  • 载人和载物等
  • 行驶更加稳定
  • 给驾驶员提供其余服务等

在软件架构中,边车模式就是给应用服务加装一个边车来达到控制和逻辑分离的目的。在分布式中:比如日志记录,监控,流量控制,服务注册与发现,服务熔断和限流等在业务服务中不需要实现的控制面功能,可以交给边车。业务服务只需要专注实现业务逻辑即可。如上图一样,与分布式微服务架构完美契合,体现了控制和逻辑的分离与解耦。

边车模式解决的问题和Service Mesh出现的契机

边车模式解决的问题

分析第二代微服务模式存在的问题:

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

在软件设计上这个边车可以理解为一个agent,这个agnet和服务一起创建、销毁。将服务注册与发现、监控、流量控制、日志记录、服务限流与熔断等功能做成标准化的组件和模块,不需要在单独实现其功能来消耗业务开发的精力和时间来开发和调试这些功能,这样可以开发出真正高内聚低耦合的软件。

边车模式是基于将控制与逻辑分离和解耦的思想,即让专业的人做专业的事,业务代码只需要关心其复杂的业务逻辑,其他的事情”边车“会帮其处理。
请添加图片描述

例如:Linkerd,Envoy,NginxMesh为代表的代理模式(边车模式)

Service Mesh的出现

边车模式有效的分离了系统控制和业务逻辑,可以将所有的服务进行统一管理,让开发人员更专注于业务开发,显著的提升开发效率。而遵循这种模式进行实践从很早以前就开始了。

开发人员一直尝试将上文中我们提到的功能(如:流量控制、服务注册、服务发现、服务限流、服务熔断等)提取成一个标准化的 Sidecar ,通过 Sidecar 代理来与其他系统进行交互,这样可以大大简化业务开发和运维。而随着分布式架构和微服务被越来越多的公司和开发者接受并使用,这一需求日益凸显。这就是 Service Mesh 服务网格诞生的契机。

Service Mesh 有如下几个特点:

  • 应用程序间通讯的中间层
  • 轻量级网络代理
  • 应用程序无感知
  • 解耦应用程序的重试/超时、监控、追踪和服务发现

Service Mesh 将底层那些难以控制的网络通讯统一管理,诸如:流量管控,丢包重试,访问控制等。而上层的应用层协议只需关心业务逻辑即可。Service Mesh 是一个用于处理服务间通信的基础设施层,它负责为构建复杂的云原生应用传递可靠的网络请求。

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

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

请添加图片描述

目前最受开发者欢迎的服务网格是Istio项目,该项目最初由谷歌、IBM和Lyft开发

Service Mesh优点

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

Service Mesh缺点

  • 需要的专业知识: 在容器编排器(如Kubernetes)之上添加Istio之类的服务网格通常需要运维人员成为这两种技术的专家。

  • Service Mesh组件以代理模式计算并转发请求,一定程度上会降低通信系统性能,并增加系统资源开销;

  • Service Mesh组件接管了网络流量,因此服务的整体稳定性依赖于Service Mesh,同时额外引入的大量Service Mesh服务实例的运维和管理也是一个挑战;

当然,优缺点还有很多,这里只是个别列举

总结

历史总是惊人的相似。

在网络通信层面上

Service Mesh 是微服务时代的 TCP/IP 协议。连接不同的微服务!

在管理层面上

spring 将 对象逐一管理,Servide Mesh将微服务逐一管理!

如有描述错的地方,欢迎指正

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

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

相关文章

浅谈 开源许可证

目录浅谈 开源许可证一、什么是开源许可证1.1 什么是开源1.2 什么是开源许可证Copyleft 许可证(Copyleft 许可证)宽松许可证(permissive 许可证)二、为什么要有开源许可证2.1、No License:没有开源许可证意味着什么2.2…

38.Isaac教程--AprilTags

AprilTags ISAAC教程合集地址文章目录AprilTags源码Isaac Codelet运行示例应用程序在主机系统上运行示例应用程序在 Jetson 上运行应用程序在 Websight 中查看应用程序的输出AprilTags 是一种流行的基准标记形式。 它在机器人技术中有广泛的应用,包括对象跟踪、视觉…

数据挖掘领域十大经典算法

一、什么是数据挖掘?数据挖掘是人工智能和数据库领域研究的热点问题,所谓数据挖掘是指从数据库的大量数据中揭示出隐含的、先前未知的并有潜在价值的信息的非平凡过程。数据挖掘是一种决策支持过程,它主要基于人工智能、机器学习、模式识别、…

蓝桥杯STM32G431RBT6学习——USART

蓝桥杯STM32G431RBT6学习——USART 前言 串口在蓝桥杯近几届中考频也相对较高(十三、十二届均考),因此必然也要学习一下。 作为后来之秀的开源项目DAP Link不仅支持SWD调试下载,同时还支持串口调试功能,国信长天开…

软件课设(Ⅲ)——padavan-ng编译以及内核模块修改

我记得今年的很多笔试面试都遇到了linux相关的操作,答题状况都挺……昂。算是补课吧,正好大四的毕业实习、软3还有研0的项目都需要linux的环境进行推进,记录一下,聊作纪念。 实验要求 编译系统,下载并提交,…

大数据技术之Hadoop(Yarn)

第1章 Yarn资源调度器 我们先来思考下面几个问题: 1)如何管理集群资源? 2)如何给任务合理分配资源? Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平…

图形编辑器:修改图形 x、y、width、height、rotation

大家好,我是前端西瓜哥。图形编辑器的一个需求,就是可以通过属性面板的输入框设置选中元素的属性值。 项目地址,欢迎 star: https://github.com/F-star/suika 线上体验: https://blog.fstars.wang/app/suika/ 最终效果…

Express框架连接MongoDB数据库操作

在上一篇中已经在Node.js中引入使用了mongoose进行MongoDB数据库的基本操作,在本篇当中在Express框架中来连接数据库以及操作数据库; Express 项目环境 这里是通过全局安装Express框架生产的项目环境,也可以通过局部安装的方式,安…

【MySQL】第十一部分 SELECT的执行过程

【MySQL】第十一部分 SELECT的执行过程 文章目录【MySQL】第十一部分 SELECT的执行过程11. SELECT的执行过程11.1 SQL92语法的结构11.2 SQL92语法的结构11.3 语句执行顺序11.4 解释之前遗留问题总结11. SELECT的执行过程 11.1 SQL92语法的结构 SELECT ... FROM TABLE WHERE 多…

STM32G431—ADC+E2PROM读写实验

目录 1.ADC介绍 配置cubemx 代码 2.IIC 通信 原理图 AT24C02 代码 i2C.c 主函数 1.ADC介绍 ADC 有多达 18 个转换通道,其中通道 0~通道 15 是外部通道,使用的 GPIO 引脚如表 所示。 ADC引脚GPIO引脚GPIO配置ADC引脚GPIO引脚GPIO配置IN0PA0模拟输…

Aspose.PDF for .NET提取矢量图像的支持

Aspose.PDF for .NET提取矢量图像的支持 增加了对提取矢量图像的支持。 改进了PDF到Microsoft Excel的转换。 添加了对创建“PrinterMark”批注的支持。 增加了检测PDF文件是否包含矢量图形的功能。 Aspose.PDF for.NET是一个高级PDF处理和解析API,用于在跨平台应用…

Linux常用命令——setsid命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) setsid 在新的会话中运行程序。 补充说明 setsid命令子进程从父进程继承了:SessionID、进程组ID和打开的终端。子进程如果要脱离这些,代码中可通过调用setsid来实现。,而命令…

C#中的基本概念(类_对象_属性_方法)

C#中的基本概念(类_对象_属性_方法) 对象的概念: 任何存在的实体都是对象,对象是真实存在的, 它包括“静态特征”和“动态特征” 对象包含2个方面: 静态特征:表示对象的属性,用来存储对象本身的数据 动态特征(行为):表示对象的方法,用来说明对象能做什么 例如: 一…

云服务器部署Node.js前后端分离项目

云服务器部署Node.js 前后端分离项目 准备工作 1.拥有一台服务器 自行选择阿里云,腾讯云… 2.重装系统 以腾讯云为例,安装centos 7.6系统 重置一下密码 3.使用远程管理工具 以宝塔工具为例,添加连接 4.安装宝塔面板 宝塔面板 - 简单好用的Linux…

基于ImageAI的图像识别

博主简介 博主是一名大二学生,主攻人工智能研究。感谢让我们在CSDN相遇,博主致力于在这里分享关于人工智能,c,Python,爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主,博主会继续更新的&#xff0c…

每日学术速递1.25

CV - 计算机视觉 今天带来的是北航IRIP实验室被国际计算机视觉与模式识别会议CVPR 2022接收的6篇论文。 CVPR是由IEEE主办的计算机视觉、模式识别及人工智能等领域最具影响力和最重要的国际顶级会议。CVPR官网显示,此次会议有超过8161篇的大会论文投稿,…

测试篇(三):测试用例的万能公式、对水杯和登录页面设计测试用例、测试用例的设计方法

目录一、测试用例的万能公式二、对登录页面设计测试用例三、测试用例的设计方法3.1 基于需求的设计方法3.2 等价类3.3 边界值3.4 判定表3.5 正交排列3.6 场景设计法3.7 错误猜测法四、面试真题一、测试用例的万能公式 首先,为"水杯"设计一个测试用例&…

计算机网络基础(二)

文章目录1. 应用层1.1 定制应用层协议1.2 网络版计算器实现1.3 应用层细分1.4 HTTP协议1.4.1 认识网址(URL)1.4.2 HTTP协议简易了解1.4.3 简易版HTTP服务器1.4.4 HTTP请求报文详解1.4.5 响应报文1.4.6 HTTP的一些安全问题1.5 HTTPS协议1.5.1 HTTPS和SSL/TLS1.5.2 短链接和长链接…

【Java|golang】1802. 有界数组中指定下标处的最大值---双指针

给你三个正整数 n、index 和 maxSum 。你需要构造一个同时满足下述所有条件的数组 nums&#xff08;下标 从 0 开始 计数&#xff09;&#xff1a; nums.length n nums[i] 是 正整数 &#xff0c;其中 0 < i < n abs(nums[i] - nums[i1]) < 1 &#xff0c;其中 0 &l…

2023年最新Python常见编程面试题(1)精选30个题目附答案

2023年最新Python面试题&#xff08;1&#xff09;之基础篇精选1.统计字符串中字符出现的次数2.获取字典key值键中小写字母对应键值对3.将字典中key变小写4.更改字典value值5.将cookies变成字典形式6.有如下字符串username把它转换成为UserName7.分别求出奇数和偶数把奇数偶数存…