一文读懂:下一代微服务技术Service Mesh

news2024/11/18 8:10:49

相信提到微服务大家一定不会陌生,但是说起服务网格,即Service Mesh,很多同学可能就会画大大的问号了!话不多说先给结论:我们可以简单的把Service Mesh理解为网络代理,它可以解决传统微服务中的痛点,把服务通信及相关管控功能从业务中分离!

网络代理

网络代理可以简单类比成现实生活中的中介,本来需要通信的双方因为各种原因在中间再加上一道关卡。本来双方就能完成的通信,为何非要多此一举呢?那是因为代理可以为整个通信带来更多的功能,比如:

  • 拦截:代理可以选择性拦截传输的网络流量,比如一些公司限制员工在上班的时候不能访问某些游戏或者电商网站,再比如把我们和世界隔离开来的 GFW,还有在数据中心中拒绝恶意访问的网关

  • 统计:既然所有的流量都经过代理,那么代理也可以用来统计网络中的数据信息,比如了解哪些人在访问哪些网站,通信的应答延迟等

  • 缓存:如果通信双方比较“远”,访问比较慢,那么代理可以把最近访问的数据缓存在本地,后面的访问不用访问后端来做到加速,CDN 就是这个功能的典型场景

  • 分发:如果某个通信方有多个服务器后端,代理可以根据某些规则来选择如何把流量发送给多个服务器,也就是我们常说的负载均衡功能,比如Nginx

  • 跳板:如果 A、B 双方因为某些原因不能直接访问,而代理可以和双方通信,那么通过代理,双方可以绕过原来的限制进行通信。

  • 注入:既然代理可以看到流量,那么它也可以修改网络流量,可以自动在收到的流量中添加一些数据,比如有些宽带提供商的弹窗广告

服务网格 Service mesh

Service Mesh这个词的发明人——Buoyant的CEO William Morgan,对其定义:

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

实际工作中我们可以把Service Mesh看做是传统代理的升级版,即分布式的微服务代理,主要用来解决目前微服务框架中出现的问题。在传统模式下,代理一般是集中式的单独的服务器,所有的请求都要先通过代理,然后再流入转发到实际的后端。而在 service mesh 中,代理变成了分布式的,它常驻在了应用的身边,最常见的就是 kubernetes sidecar,sidecar即边车模式,每一个应用的 pod 中都运行着一个代理,负责流量相关的事情,下图很贴切的解释了什么是边车:

sidecar为每个服务都配备一个“边车”,边车可以理解为一个 agent ,这个服务所有的通信都是通过这个 agent 来完成的,这个 agent 同服务一起创建,一起销毁。像服务注册、服务发现、监控、流量控制、日志记录、服务限流和服务服务熔断等功能完全可以做成标准化的组件和模块,不需要在单独实现其功能来消耗业务开发的精力和时间来开发和调试这些功能,这样可以开发出真正高内聚低耦合的软件,架构如下图所示:

应用微服务之后,每个单独的微服务都会有很多副本,而且可能会有多个版本,这么多微服务之间的相互调用和管理非常复杂,通过service mesh我们可以把这块内容统一在代理层管理,最后加上一个控制中心对所有的代理进行统一的管理,管理员只需要根据控制中心的 API 来配置整个集群的应用流量、安全规则即可,代理会自动和控制中心打交道根据用户的期望改变自己的行为。

在service mesh的相关工具中,Istio 和 Linkerd 获得了更多的认可,当然也有其它选择,包括: Consul Connect,Kuma,AWS App Mesh和OpenShift

网络代理和service mesh区别

网络代理都是基于网络流量的,一般都是工作在 IP 或者 TCP 层,很少关心具体的应用逻辑;

在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服务实例的运维和管理也是巨大的挑战;

最后划重点:

Service Mesh的出现解决了传统微服务框架中的痛点,使得开发人员专注于业务本身(这点在下一篇文章中会谈一下spring cloud和 lstio的对比),将服务通信及相关管控功能从业务中分离到基础设施层。

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

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

相关文章

进程状态与优先级

目录 进程状态: tracing stop:追踪暂停状态 Z:僵尸状态: 为什么要有僵尸进程呢? 孤儿进程 进程优先级: 其他概念: 进程切换: pc/eip 环境变量: PATH:全…

nestjs初始化项目

安装nestjs脚手架 npm i -g nestjs/cli初始化项目 nest new <project-name>说明初始化项目成功 结构说明 node_modules:项目所有的依赖src: 项目的主题test: 项目测试目录.eslintrc.js: eslint约束.gitignore: git上传忽略文件nest-cli.json: nest项目配置文件package…

《C++程序设计原理与实践》笔记 第12章 一个显示模型

本章介绍了一个显示模型(display model)&#xff08;GUI的输出部分&#xff09;&#xff0c;并给出了使用示例和基本概念&#xff0c;例如屏幕坐标、线和颜色等。 12.1 为什么需要图形&#xff1f; 我们为什么用四章的篇幅介绍图形以及一章介绍GUI&#xff1f; 图形很有用。…

通信原理笔记—基带信号的波形设计与编码

目录 引言&#xff1a; 基带传输系统的基本模型&#xff1a; 基带信号的波形设计与编码&#xff1a; 数字信号的波形设计原则&#xff1a; 基带信号的基本波形&#xff1a; 常用的二进制码型&#xff1a; 单极性不归零码&#xff1a; 双极性不归零码&#xff1a; ​编辑…

RTI Connext DDS代码生成器

0 简介RTI代码生成器Code Generator,创建用RTI ConnextDDS定义define和注册register用户数据类型所需的代码。在以下情况下&#xff0c;使用代码生成器是可选的&#xff1a;您正在使用动态类型&#xff08;请参阅RTI Connext DDS核心库用户手册[RTI ConnextDDS Core Libraries …

新来一个卷王,天天加班到12点,太让人崩溃......

在程序员职场上&#xff0c;什么样的人最让人反感呢&#xff1f; 是技术不好的人吗&#xff1f;并不是。技术不好的同事&#xff0c;我们可以帮他。 是技术太强的人吗&#xff1f;也不是。技术很强的同事&#xff0c;可遇不可求&#xff0c;向他学习还来不及呢。 真正让人反…

2023全网汇总PMP备考攻略(附答题技巧资料)

一&#xff0c;多复习和学习新版考纲 01《PMBOK》看三遍 这边建议看三遍《PMBOK》&#xff0c;更有利于我们巩固知识&#xff0c;查缺补漏。 第一遍 第一遍是老师带着我们去看。这个时候一定要非常专心&#xff0c;千万不要上课走神或者玩手机。因为这一遍老师会告诉我们&a…

结构型设计模式 Structural Patterns :适配器 Adapter(C++ 实现)

文章大纲 适配器简介对象适配器类适配器C++ 实现代码参考文献与学习路径Structural PatternsAdapterMatch interfaces of different classesBridgeSeparates an object’s interface from its implementationCompositeA tree structure of simple and composite objectsDecorat…

C#中的那些警告如何去除?完全去除C#警告

一般在c中没有使用的变量会有警告&#xff0c;C#中也有&#xff0c;在QT中我们利用Q_UNSED可以直接消除这些警告&#xff0c;那么我们在C#中该如何做才能消除这些不必要的警告呢&#xff1f;经过查询微软官方网站发现&#xff0c;有的找到了解决方法&#xff0c;有的仍然一筹莫…

学习bootstrap怎么样?

想必学习前端的都知道这个响应式框架&#xff0c;之前我接触这个框架的时候是在学习前段页面设计的进阶教程是接触的&#xff0c;那个时候要做那种登陆注册界面&#xff0c;里面的输入框很让人头疼有时候电脑的宽度不一样或者是写了一个精美的网页然后放到手机上的时候就变了模…

【C++】继承(基类和派生类的关系、菱形虚拟继承、继承和组合)

文章目录1、继承的概念和定义2、基类和派生类的赋值转换3、继承中的作用域4、派生类的默认成员函数5、继承与友元和静态成员6、复杂的菱形继承及菱形虚拟继承7、继承和组合1、继承的概念和定义 继承是面向对象程序设计上程序复用的重要手段&#xff0c;以往接触的复用都是函数复…

程序员的自律之路

世界的精彩不是单纯的美丽&#xff0c;毕竟丑恶也是美丽的食粮&#xff0c;黑暗也是光明的救世主 很久没有写博客了&#xff0c;最近半年不太稳定&#xff0c;也经历了一些自我成长的东西。 事后我进行深度反省&#xff0c;思考一个人或者说是一个程序员的失控原因到底是什么&a…

推荐几款好用的企业级文档管理软件

知识库&#xff0c;又称为智能数据库或人工智能数据库。知识库的概念来自两个不同的领域&#xff0c;一个是人工智能及其分支-知识工程领域&#xff0c;另一个是传统的数据库领域。由人工智能&#xff08;AI&#xff09;和数据库&#xff08;DB&#xff09;两项计算机技术的有机…

Java字符串查找(3种方法)

在给定的字符串中查找字符或字符串是比较常见的操作。字符串查找分为两种形式&#xff1a;一种是在字符串中获取匹配字符&#xff08;串&#xff09;的索引值&#xff0c;另一种是在字符串中获取指定索引位置的字符。根据字符查找String 类的 indexOf() 方法和 lastlndexOf() 方…

金融公司在 2022 年扩大了对下一代技术的投资

根据 Broadridge Financial Solutions, Inc. 的一份新报告&#xff0c;大多数金融服务公司现在认为数字化转型对其业务至关重要&#xff0c;并且已经在寻求下一波技术来帮助取得成功。 在对 500 名最高管理层高管及其在全球买方和卖方的直接下属进行的 2023 年数字化转型和下…

代码随想录算法训练营第五十七天_第九章_动态规划 | 1143.最长公共子序列、1035.不相交的线、53. 最大子数组和 动态规划

LeetCode 1143.最长公共子序列 视频讲解https://www.bilibili.com/video/BV1ye4y1L7CQ文章讲解https://programmercarl.com/1143.%E6%9C%80%E9%95%BF%E5%85%AC%E5%85%B1%E5%AD%90%E5%BA%8F%E5%88%97.html 思路&#xff1a;代码&#xff1a;LeetCode 1035.不相交的线 视频讲解h…

技术开发119

技术开发119 业务内容&#xff1a; 汽车零部件的制造产业用机械零部件的设计、制造、组装电机零部件的制造 公司简介&#xff1a; 董事长&#xff1a;管原胜安 资本金&#xff1a;3200万日元 员工数&#xff1a;36名 成立时间&#xff1a;1972年7月 资格认证&#xff1a…

【学习笔记】coursera | Computational Neuroscience | Week 1

Course Introduction 1.1 Course Introduction 三种模型 Descriptive models of the brain&#xff08;描述型, what&#xff09;&#xff1a;神经元如何对外部刺激做出反应&#xff1f;用神经元编码模型如何量化描述&#xff1f;如何从神经元中获取信息&#xff08;解码&am…

Linux 中 su 命令的使用

目录 &#x1f34d;①普通用户切换 root 用户 &#x1f349;②root 用户切换普通用户 su 命令的作用是在 Linux 中切换用户&#xff0c;是英文单词&#xff1a;Switch&#xff08;切换&#xff09; User&#xff08;用户&#xff09; 的缩写。 语法&#xff1a; su [-] 用户…

三维引擎大盘点

近年&#xff0c;智慧城市、数字孪生大热&#xff0c;三维引擎就成为了绕不过去的一个词&#xff0c;但是目前市场的的三维引擎多的让人头晕目眩&#xff0c;他们各自都有哪些优缺点呢&#xff0c;今天我们就来盘点下主流的三维引擎。 常见的三维引擎按平台可分为客户端三维引擎…