Service Mesh目的:是解决系统架构微服务化后的服务间通信和治理问题。

news2025/1/18 6:46:15

参考链接:https://www.zhihu.com/tardis/bd/art/397945267?source_id=1001

1、Service Mesh 是什么

Service Mesh的定义:

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

Service Mesh 目的是解决系统架构微服务化后的服务间通信和治理问题。 服务网格由 Sidecar 节点组成,这个模式的精髓在于实现了数据面(业务逻辑)和控制面的解耦。具体到微服务架构中,即给每一个微服务实例同步部署一个 Sidecar。
在这里插入图片描述
在 Service Mesh 部署网络结构图中,绿色方块为应用服务,蓝色方块为 SideCar,应用服务之间通过 Sidecar 进行通信,整个服务通信形成图中的蓝色网络连线,图中所有蓝色部分就形成了 Service Mesh。其具备如下主要特点:

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

Service Mesh构成:主要由控制平面与数据平面共同构成。
在这里插入图片描述
控制平面:

  1. 不直接解析数据包。
  2. 与控制平面中的代理通信,下发策略和配置。
  3. 负责网络行为的可视化。
  4. 通常提供 API 或者命令行工具可用于配置版本化管理,便于持续集成和部署。

数据平面:

  1. 通常是按照无状态目标设计的,但实际上为了提高流量转发性能,需要缓存一些数据,因此无状态也是有争议的。
  2. 直接处理入站和出站数据包,转发、路由、健康检查、负载均衡、认证、鉴权、产生监控数据等。
  3. 对应用来说透明,即可以做到无感知部署。

2、Service Mesh 解决的问题

关键信息为:
本质:基础设施层。
功能:请求分发。
部署形式:网络代理。
特点:透明。

从上述 Service Mesh 的定义看:

  • 基础设施层是 Service Mesh 的定位,致力于解决微服务基础设施标准化、配置化、服务化和产品化的问题。
  • 服务间通信是 Service Mesh 技术层面对的问题,对微服务屏蔽通信的复杂度,解决微服务的通信治理问题。
  • 请求的可靠传递是 Service Mesh 的目标。
  • 轻量级网络代理是 Service Mesh 的部署方式。
  • 对应用程序透明是 Service Mesh 的亮点和特色,实现对业务无侵入。

综合上述,Service Mesh 主要解决用户如下 3 个维度的痛点需求:

  1. 完善的微服务基础设施

通过将微服务通信下沉到基础设施层,屏蔽了微服务处理各种通信问题的复杂度,形成微服务之间的抽象协议层。开发者无需关心通信层的具体实现,也无需关注 RPC 通信(包含服务发现、负载均衡、流量调度、流量降级、监控统计等)的一切细节,真正像本地调用一样使用微服务,通信相关的一切工作直接交给 Service Mesh。

  1. 语言无关的通信和链路治理

功能上,Service Mesh 并没有提供任何新的特性和能力,Service Mesh 提供的所有通信和服务治理能力在 Service Mesh 之前的技术中均能找到,比如 Spring Cloud 就实现了完善的微服务 RPC 通信和服务治理支持。

Service Mesh 改变的是通信和服务治理能力提供的方式,通过将这些能力实现从各语言业务实现中解耦,下沉到基础设施层面,以一种更加通用和标准化的方式提供,屏蔽不同语言、不同平台的差异性,有利于通信和服务治理能力的迭代和创新,使得业务实现更加方便。

Service Mesh 避免了多语言服务治理上的重复建设,通过 Service Mesh 语言无关的通信和服务治理能力,助力于多语言技术栈的效率提升。

  1. 通信和服务治理的标准化
  • 微服务治理层面,Service Mesh 是标准化、体系化、无侵入的分布式治理平台。
  • 标准化方面,Sidecar 成为所有微服务流量通信的约束标准,同时 Service Mesh 的数据平台和控制平面也通过标准协议进行交互。
  • 体系化方面,从全局考虑,提供多维度立体的微服务可观测能力(Metric、Trace、Logging),并提供体系化的服务治理能力,如限流、熔断、安全、灰度等。

通过标准化,带来一致的服务治理体验,减少多业务之间由于服务治理标准不一致带来的沟通和转换成本,提升全局服务治理的效率。

3、Service Mesh 的原理

Service Mesh 的核心是数据平面 Sidecar 与控制平面 Control Plane,如下图:
在这里插入图片描述
数据平面: Sidecar,与服务部署在一起的轻量级网络代理,用于实现服务框架的各项功能(如,服务发现、负载均衡、限流熔断等),让服务回归业务本质。

数据平台可以认为是将 Spring Cloud、Dubbo 等相关的微服务框架中通信和服务治理能力独立出来的一个语言无关的进程,并且更注重通用性和扩展性。在 Service Mesh 中,不再将数据平面代理视为一个个独立的组件,而是将这些代理连接在一起形成一个全局的分布式网格。

在传统的微服务架构中,各种服务框架的功能(如,服务发现、负载均衡、限流熔断等)代码逻辑或多或少的都需要耦合到服务实例的代码中,给服务实例增加了很多无关业务的代码,同时带来了一定的复杂度。

有了 SideCar 之后,服务节点只做业务逻辑自身的功能,服务之间的调用只需交给 SideCar,由 SideCar 完成注册服务、服务发现、请求路由、熔断限流、日志统计等业务无关功能。

在这种新的微服务架构中,所有的 SideCar 组成在一起,就形成了服务网格。那么这个大型的服务网格并不是完全自治的,它还需要一个统一的控制节点 Control Plane。

控制平面: 是用来从全局的角度上控制 SideCar,相当于 Service Mesh 架构的大脑,控制着 SideCar 来实现服务治理的各项功能。比如,它负责所有 SideCar 的注册,存储统一的路由表,帮助各个 SideCar 进行负载均衡和请求调度;它收集所有 SideCar 的监控信息和日志数据。

4、Service Mesh具体是怎么实现的?Istio是什么?

Istio是⼀个Service Mesh形态的⽤于服务治理的开放平台。(治理的是服务间的访问)

Istio与Kubernetes

在这里插入图片描述
Kubernetes 的本质是应用的生命周期管理,具体来说就是部署和管理(扩缩容、自动恢复、发布)。

Kubernetes 为微服务提供了可扩展、高弹性的部署和管理平台。

Service Mesh 的基础是透明代理,通过 sidecar proxy 拦截到微服务间流量后再通过控制平面配置管理微服务的行为。

Service Mesh 将流量管理从 Kubernetes 中解耦,Service Mesh 内部的流量无需 kube-proxy 组件的支持,通过为更接近微服务应用层的抽象,管理服务间的流量、安全性和可观察性。

Service Mesh 是对 Kubernetes 中的 service 更上层的抽象,它的下一步是 serverless。
在这里插入图片描述

Istio复⽤了Kubernetes Service的定义,在实现上进⾏了更细粒度的控制。

Istio的服务发现就是从 Kube-apiserver中获取 Service和Endpoint,然后将其转换成 Istio服务模型的 Service 和ServiceInstance,但是其数据⾯组件不再是 Kube-proxy,⽽是在每个Pod ⾥部署的 Sidecar,也可以将其看作每个服务实例的 Proxy。这样,Proxy 的粒度就更细了,和服务实例的联系也更紧密了,可以做更多更细粒度的服务治理

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

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

相关文章

Docker:01 OverView

Docker:01 OverView 基本介绍 Docker是一个用于开发、交付、运行应用程序的开放平台,可以使应用程序与基础架构分开,以便快速交付软件。 Docker在一个被叫做容器的隔离环境下,提供了打包和运行的能力。 容器非常轻量化&#x…

[SICTF 2023] webmisc

文章目录 webBaby_PHP涉及知识点 我全都要RCE你能跟得上我的speed吗 miscPixel_art攻破这个压缩包&#xff01; web Baby_PHP 涉及知识点 php解析特性apache换行解析漏洞无参RCE 源代码 <?php highlight_file(__FILE__); error_reporting(0);$query $_SERVER[QUERY_ST…

【新版】软考 - 系统架构设计师(总结笔记)

个人总结学习笔记&#xff0c;仅供参考&#xff01;&#xff01;&#xff01; →点击 笔者主页&#xff0c;欢迎关注哦&#xff08;互相学习&#xff0c;共同成长&#xff09; 笔记目录 &#x1f4e2;【系统架构设计系列】系统架构设计专业技能 计算机组成与结构操作系统信…

AI系统论文阅读:SmartMoE

提出稀疏架构是为了打破具有密集架构的DNN模型中模型大小和计算成本之间的连贯关系的——最著名的MoE。 MoE模型将传统训练模型中的layer换成了多个expert sub-networks&#xff0c;对每个输入&#xff0c;都有一层special gating network 来将其分配到最适合它的expert中&…

UMA 2 - Unity Multipurpose Avatar☀️九.Expressions表情管理与表情插件推荐 (口型同步 / 表情管理)

文章目录 🟥 Expressions文件位置🟧 功能 : 解决嘴巴张开问题🟨 Expressions : 表情面板API讲解🟩 表情插件推荐 : 口型同步 / 表情管理🟥 Expressions文件位置 Expressions也是UMA内置5种实用Recipes之一,位置如下. 使用方法: 如下图所示,将Recipes拖到Additional…

【ESP-S3-BOX-Lite花屏问题】:Github下载源码(出厂源码factory_demo)编译调试到ESP-S3-BOX-Lite中出现花屏现象

项目场景&#xff1a; 最近拿到了一块乐鑫的 ESP-S3-BOX-Lite &#xff08;esp-box: ESP-BOX 是乐鑫信息科技&#xff09; 详细资料&#xff08;esp32_s3_box_lite&#xff09; 版本信息 ESP-BOX依赖的 ESP-IDF分支信息支持状态master> release/v5.1 commit id: 22cfbf3…

基于javaweb的家庭理财管理系统(servlet+jsp)

一、系统简介 本项目采用工具开发&#xff0c;jspservletjquery技术编写&#xff0c;数据库采用的是mysql&#xff0c;navicat开发工具。 系统一共分为2个角色分别是&#xff1a;管理员&#xff0c;用户 获取方式 xystgl master 码盗_java_bishe / java系统 GitCodeGitC…

Edge浏览器没有让我失望! 今天终于可以在win10中模拟IE内核进行前端测试了!

前言 &#x1f61d; ietest现在是不是不好用了? Edge浏览器仿真是不是不见了&#xff1f; 如图 如果我们在前端开发javascript遇见一些老旧的语法标准&#xff0c;想要测试一下都难&#xff0c;想想都抓狂!&#x1f624;&#x1f624; 不过不用担心&#xff0c;经过这几天的…

娱乐时间 —— 用python将图片转为excel十字绘

最近看蛮多朋友在玩&#xff0c;要么只能画比较简单的&#xff0c;要么非常花时间。想了下本质上就是把excel对应的单元格涂色&#xff0c;如果能知道哪些格子要上什么颜色&#xff0c;用编程来实现图片转为excel十字绘应该是很方便的。 图片的每一个像素点都可以数值化&#x…

人工智能TensorFlow PyTorch物体分类和目标检测合集【持续更新】

1. 基于TensorFlow2.3.0的花卉识别 基于TensorFlow2.3.0的花卉识别Android APP设计_基于安卓的花卉识别_lilihewo的博客-CSDN博客 2. 基于TensorFlow2.3.0的垃圾分类 基于TensorFlow2.3.0的垃圾分类Android APP设计_def model_load(img_shape(224, 224, 3)_lilihewo的博客-CS…

C语言指针详解(1)------指针类型(简单例子+详细讲解)

C语言指针类型详解及举例 此文介绍了C语言中常见的6种指针,对每种指针进行了介绍,并举出相应的例子供大家理解学习. 文章目录 C语言指针类型详解及举例1.字符指针2.数组指针3.指针数组4.函数指针5函数指针数组6指向函数指针数组的指针 1.字符指针 字符指针是指向字符数组或字符…

vue学习之事件绑定

事件绑定 创建 demo5.html,内容如下 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</…

手写Mybatis框架

Mybatis核心配置文件就是为了配置Configration 因此要首先会解析Mybatis核心配置文件 首先使用dom4J解析Mybatis核心配置文件 新建模块演示dom4j解析.xml 目录放错了 无所谓 引入依赖 从原来项目可以拷贝过来 就些简单配置就好 解析核心配置文件和解析xxxMapper.xml映射文件…

《React vs. Vue vs. Angular:2023年的全面比较》

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

如何快速下载UE源码

前置技能要求掌握Git和Github的基础操作和知识 1.获取源码仓库授权并下载源代码 (1).获取授权 UE是开源的&#xff0c;但是它的代码仓库在Github不开源&#xff0c;我们没法直接搜索到&#xff0c; 登录->个人信息->应用与账户->连接Github 请按照官网指引成功进…

想要精通算法和SQL的成长之路 - 课程表III

想要精通算法和SQL的成长之路 - 课程表III 前言一. 课程表III&#xff08;贪心优先队列&#xff09;1.1 优先选择截止时间更小的课程1.2 如果当前课程无法学习怎么办&#xff1f;1.3 优化 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 课程表III&#xff08;贪心优先队列&…

【ArcGIS pro】-使用arcpy一次保存多个布局

在arcgis Pro中常常会创建多个地图和多个布局&#xff0c;本文介绍如何使用代码&#xff0c;一次保存多个布局文件 在arcgis pro中打开python视图 找到工程位置 在python视图中输入如下代码 保存为pdf import arcpy# 设置当前项目&#xff0c;这通常是一个.aprx文件 projec…

11.Xaml DatePicker控件 时间控件

1.运行效果 2.运行源码 a.Xaml源码 <Grid Name="Grid1"><!--DisplayDate="2020-5-1" 显示的日期--><!--DisplayDateStart="2020

Linux CentOS7 添加中文输入法

在安装CentOS7时&#xff0c;现在默认安装了桌面中文系统。可以切换为英文&#xff0c;中英文可以按要求随时更换。而在CentOS7桌面环境下&#xff0c;显示中文非常方便、正确&#xff0c;并不能录入中文。 在远程登录系统的情况下&#xff0c;不论是系统语言&#xff08;LANG…

Vue2电商前台项目——完成Home首页模块业务

Vue2电商前台项目——完成Home首页模块业务 Vue基础知识点击此处——Vue.js 文章目录 Vue2电商前台项目——完成Home首页模块业务一、项目开发的步骤二、Home首页拆分静态组件1、完成TypeNav三级联动组件&#xff1a;全局组件2、完成其余静态组件&#xff1a;局部组件 三、请求…