【服务网格】Service Mesh 是什么?为我们解决了什么问题?

news2025/1/20 1:04:40

文章目录

  • 背景
  • 一、Service Mesh 介绍
    • Service Mesh的定义
    • Service Mesh 诞生
  • 二、Service Mesh 解决的问题
  • 三、Service Mesh 的原理
  • 四、Service Mesh具体是怎么实现的?Istio是什么?
    • istio架构和主要功能
    • Istio 1.5.1 性能总结
    • Istio与Kubernetes
    • istio的实战案例
      • 蚂蚁金服的实战案例
      • 蚂蚁金服在2019年双十一的成功大规模落地为 Service Mesh
  • 参考资料

背景

最近Service Mesh服务网格这个概念有点热,我们已经有了这么多分布式微服务框架了,例如Spring Cloud, Dubbo,ServiceComb等等,为什么还需要Service Mesh呢,具体是怎么Mesh的, 我一堆微服务不就是服务网格了, 还有需要Mesh吗? Sidecar又是什么东西?

服务网格(Service Mesh)这两年很火,号称是下一代微服务架构,希望能够让大家对最新的架构技术,有个初步的了解。

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

一、Service Mesh 介绍

Service Mesh的定义

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

Service Mesh 诞生

从概念到落地?不,是从落地到概念。

在这里插入图片描述

时间回到2016年9⽉29⽇,在Buoyant公司内部一次关于微服务的分享会上,“Service Mesh” ,这个接下来几年占据各种云原生头条的 buzz word,就这么被造出来了。不得不说,起名真是门艺术,Micro-Services -> Service Mesh,多么承前启后和顺其自然啊,光看名字就能很形象地理解这玩意儿所做的事情:把微服务的各个service(服务)节点,用一张mesh(网格)连接起来。就这样,原本被拆散得七零八落的微服务们,又被 Service Mesh 这张大网紧密得连接到了一起;即使依然天各一方(进程间隔离),但也找回了当年一起挤在单体应用内抱团撒欢的亲密感(通信更容易)。

Service Mesh 目的是解决系统架构微服务化后的服务间通信和治理问题。 服务网格由 Sidecar 节点组成,这个模式的精髓在于实现了数据面(业务逻辑)和控制面的解耦。具体到微服务架构中,即给每一个微服务实例同步部署一个 Sidecar。

在这里插入图片描述

在 Service Mesh 部署网络结构图中,绿色方块为应用服务,蓝色方块为 SideCar,应用服务之间通过 Sidecar 进行通信,整个服务通信形成图中的蓝色网络连线,图中所有蓝色部分就形成了 Service Mesh。其具备如下主要特点:

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

二、Service Mesh 解决的问题

从上述 Service Mesh 的定义看:

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

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

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

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

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

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

  • 通信和服务治理的标准化

    • 微服务治理层面,Service Mesh 是标准化、体系化、无侵入的分布式治理平台。
    • 标准化方面,Sidecar 成为所有微服务流量通信的约束标准,同时 Service Mesh 的数据平台和控制平面也通过标准协议进行交互。
    • 体系化方面,从全局考虑,提供多维度立体的微服务可观测能力(Metric、Trace、Logging),并提供体系化的服务治理能力,如限流、熔断、安全、灰度等。
      通过标准化,带来一致的服务治理体验,减少多业务之间由于服务治理标准不一致带来的沟通和转换成本,提升全局服务治理的效率。

三、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 的监控信息和日志数据。

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

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

连接:Istio 通过集中配置的流量规则控制服务间的流量和调⽤,实现负载均衡、熔断、故障注⼊、重试、重定向等服务治理功能。

保护:Istio 提供透明的认证机制、通道加密、服务访问授权等安全能⼒,可增强服务访问的安全性。

控制:Istio 通过可动态插拔、可扩展的策略实现访问控制、速率限制、配额管理、服务计费等能⼒。

观测:动态获取服务运⾏数据和输出,提供强⼤的调⽤链、监控和调⽤⽇志收集输出的能⼒。配合可视化⼯具,可⽅便运维⼈员了解服务的运⾏状况,发现并解决问题。

Service Mesh 是一个专门处理服务通讯的基础设施层。它的职责是在由云原生应用组成服务的复杂拓扑结构下进行可靠的请求传送。

在实践中,它是一组和应用服务部署在一起的轻量级的网络代理,并且对应用服务透明。

主要有控制面和数据面组成,数据面截获不同服务之间的调用并对其进行“处理”;控制面协调代理的行为,并为运维人员提供 API,用来操控和测量整个网络。

istio架构和主要功能

在这里插入图片描述

istio1.5的架构图

Istio 1.5.1 性能总结

  • Istio 负载测试网格包含了 1000 个服务和 2000 个 sidecar,全网格范围内,QPS 为 70,000。 在使用 Istio 1.5.1 运行测试后,我们得到了如下结果:
  • 通过代理的 QPS 有 1000 时,Envoy 使用了 0.5 vCPU 和 50 MB 内存。
  • 网格总的 QPS 为 1000 时,istio-telemetry 服务使用了 0.6 vCPU。
  • Pilot 使用了 1 vCPU 和 1.5 GB 内存。
  • 90% 的情况 Envoy 代理只增加了 6.3 ms 的延迟。

Istio与Kubernetes

在这里插入图片描述

Kubernetes 的本质是应用的生命周期管理,具体来说就是部署和管理(扩缩容、自动恢复、发布)。

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

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

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

xDS 定义了 Service Mesh 配置的协议标准。

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

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

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

istio的实战案例

蚂蚁金服的实战案例

蚂蚁金服在2019年双十一的成功大规模落地为 Service Mesh

在这里插入图片描述

首先是自研的SOFAMosn替代了Envoy,支持了更多的协议SOFARPC/Dubbo/WebService。
优化SOFAMesh避免了大量不必要的花销。

蚂蚁金服在云原生落地方面的基本思路
在这里插入图片描述

参考资料

  • istio介绍和资料整理_cobb1的博客-CSDN博客

  • ServiceMesh究竟解决什么问题?-阿里云开发者社区 (aliyun.com)

  • Java进阶专题(二十八) Service Mesh初体验 - 有梦想的老王 - 博客园 (cnblogs.com)

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

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

相关文章

四、MyBatis获取参数值的两种方式(重点)

文章目录 四、MyBatis获取参数值的两种方式(重点)4.1 单个字面量类型的参数4.2 多个字面量类型的参数4.3 map集合类型的参数4.4 实体类类型的参数4.5 使用Param标识参数 四、MyBatis获取参数值的两种方式(重点) MyBatis获取参数值…

IP-GUARD屏幕记录能实现平时不记录,特定操作触发记录吗?

支持触发性屏幕记录。部分策略有选项“记录屏幕”,勾选后,策略触发时,会自动记录客户端当时的屏幕情况,记录次数和间隔可通过配置修改。 所有包含了记录屏幕的策略有: 应用程序、上网浏览、流量控制、网络控制、邮件控制、IM传送控制、上传控制、文档控制、打印控制、敏感…

深浅拷贝,类型检测及继承面试题

01 对象的深/浅拷贝 1.1 变量的存储 基本类型:基本类型的值存在栈内存中 引用类型: 引用类型的地址存储在栈内存中,他的值存储在堆内存中,通过指针(地址)连接 1.2 变量拷贝 基本类型:基本类型拷贝的是值 引用类型…

达梦数据库中,如何设置表的访问控制权限?

在工作中,大家都会遇到这样的场景,出于对数据库访问安全的考虑,对于某些用户我们不想让他们看到全库的表,只想给他们特定表的访问权限。那么在DM数据库中我们该如何去配置相应的权限呢? 我们下面来进行详细解析。 我们…

buuctf6

目录 [ACTF2020 新生赛]BackupFile [RoarCTF 2019]Easy Calc 利用PHP的字符串解析特性Bypass: http走私攻击 来首歌吧 荷兰宽带数据泄露​编辑 面具下的flag [ACTF2020 新生赛]BackupFile 1.打开环境 查看源代码得不到任何想要的信息,使用目录扫描来得到我们…

关于秒杀系统的一系列问题

阻塞队列怎么么实现?超卖问题?整体怎么实现? 5 设计一个秒杀系统 特点:高并发,请求量远大于库存量,只有少数能成功;逻辑比较简单,下单减库存; 设计理念:**限…

ESP8266基于Lua开发点灯示例

ESP8266基于Lua开发点灯示例 ✨基于ESPlorer IDE:https://github.com/4refr0nt/ESPlorer/releases🔧固件烧录工具:NodeMCU-PyFlasher🌿esp8266烧录工具下载:https://github.com/marcelstoer/nodemcu-pyflasher/release…

LabVIEW CompactRIO 开发指南2 CompactRIO软件架构

第一章 CompactRIO软件架构 几乎所有的CompactRIO系统都至少有三个顶层VIs在三个不同的目标上异步执行:FPGA、实时操作系统(RTOS)和主机PC。如果开始软件开发时没有某种架构或流程图可供参考,那么可能会发现跟踪所有软件组件和通信路径是具有挑战性的。拥有一个在…

CentOS7上使用yum搭建LNMP架构并实现wordpress博客实战

前言 🏠个人主页:我是沐风晓月 🧑个人简介:大家好,我是沐风晓月,阿里云社区博客专家😉😉 💕 座右铭: 先努力成长自己,再帮助更多的人 &#xff0c…

魔兽worldserver.conf 服务端配置文件说明

魔兽worldserver.conf 服务端配置文件说明 我是艾西,今天把很多小伙伴需要的魔兽worldserver.conf 服务端配置文件说明分享给大家,大家可以自己研究参考下 worldserver.conf 这个文件是服务端的配置文件,可以在这里做很多个性化修改 注意&a…

SpringSecurity跌坑指南

SpringSecurity跌坑指南 1,事情原委 这两天开始了毕业设计,但是突然发现自己的java方面的基础比较薄弱,于是决定自己从头到尾的开发一个java项目 要说跌的最惨的坑,莫过于springsecurity,如果你只是想要在项目里面配…

〖ChatGPT实践指南 - 零基础扫盲篇⑦〗- 基于 Python 实现的 OpenAI-Library 的简单使用

文章目录 ⭐ python 安装 OpenAI library⭐ 创建 openai.py 进行测试⭐ openai.Completion.create() 方法的小拓展 该章节我们呢来学习一下 OpenAI-Library 的使用,OpenAI-Library 是 OpenAI 官方给我们提供的各种开发语言的库,供我们使用。在前面的章节…

【无标题】基于matlab的长短期神经网络lstm的股票预测

目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 基于长短期神经网络LSTM的股票预测 MATALB编程实现,附有代码 效果图 结果分析 展望 参考论文 背影 股票市场的波动十分巨大,由于一些不确定因素的影响,导致很难对股票进行投资盈利。因此&…

数据库 SQL Server 检测到基于一致性的逻辑 I/O 错误 校验和不正确 解决方法

目录 一、错误提示信息: 二、原因分析: 三、解决方法: 四、执行完成结果: 五、重要说明 一、错误提示信息: 本文验证是数据库中的baiduAi_0258表无法通过select语句ID条件查询, 如执行 select * fro…

远程桌面,openGL

x11、xserver看另一篇博客 openGL是一种规范,用于绘制图像 OpenGL是Khronos Group开发维护的一个规范(也就是提供了一种接口),它主要为我们定义了用来操作图形和图片的一系列函数的API,需要注意的是OpenGL本身并非API。…

vscode 配置有误导致的一次Linux 崩溃

一、问题描述 1. 要实现的功能 编写一个Linux 按键驱动,按下按键时,产生中断,在中断中启动定时器进行防抖处理。 2. 出现的问题 在中断处理函数中,调用 add_timer 函数设置定时器超时函数,并启动定时器。编写完驱动…

【消息队列】Apache Pulsar存储计算分离

前言 对于一个互联网项目来说,一般除了在语言层面的技术选型外,也会引入各种中间件,比如缓存、消息队列、搜索、NoSQL等,但是跳出语言层面来看的话,其实我们庖丁解牛之后,每个中间件都解决了特定的问题。 …

计组 作业九

作业9 题量: 36 满分: 100 作答时间:04-27 10:56至05-10 23:59 89.5分 一. 单选题(共18题,39分) 1. (单选题, 2分)Intel80486是32位微处理器,Core是______位微处理器。 A. 16B. 32C. 48D. 64 我的答案…

20.网络爬虫—Scrapy-Redis分布式爬虫

网络爬虫—Scrapy-redis详讲 Redis的安装与使用分布式概念和作用分布式爬虫分布式爬虫特点redis的使用Redis 操作/启动 Redis Desktop Manager下载特点和架构安装和使用Scrapy-redis 代码部署spider文件 settings文件 前言: 🏘️🏘️个人简介…

wsl2使用open3d等进行图像绘制

在~/.bashrc文件中添加两个环境变量 export DISPLAY"grep nameserver /etc/resolv.conf | sed s/nameserver //:0" export LIBGL_ALWAYS_INDIRECT0 第一行是让wsl将openGL命令(图形绘制命令)输出到哪里,也就是x-server的位置&…