微服务架构之「 下一代微服务 Service Mesh 」

Service Mesh 被大家称为下一代的微服务,是微服务领域的一颗新星,被大家讨论的非常多。

我在大家的讨论中,还看到有人说 “目前的微服务架构我都没学会呢,现在又来一个下一代微服务,真学不动了”。

哈哈,没办法,互联网技术就是发展得这么快,这些技术其实也都是由于大家所在的公司业务规模和复杂度变大以后所推动出来的。

最开始 Service Mesh 的概念是由Buoyant公司在2016年提出。然后在随后几年,业内就围绕着 Service Mesh 思想探索出了各种实现,其中包括以 Linkerd 为代表的第一代 Service Mesh,随后又有以 Istio 为代表的第二代 Service Mesh。

在国内的一些大厂里,例如 阿里、新浪 等,也都有基于Service Mesh思想的自研实现。既然 Service Mesh 这么火,那它到底是什么呢?又该如何去应用呢?

一、什么是「 Service Mesh 」?

Service Mesh 中文称为 服务网格,为啥,因为它的部署图看起来就像一个网格,如下图:

Service Mesh 就是一个基础设施层,它是用于处理微服务中,服务与服务之间通信的一种技术。在 Service Mesh 的实践方案中,它是由一系列轻量级的网络代理组成的,并且这些网络代理会与咱们的应用部署在一起,特别适用于云原生应用,因为 Service Mesh 可以做到应用是无感知的。

(上图的绿色小块可以理解成是咱们微服务的应用,蓝色小块可以理解成 Service Mesh 的轻量级网络代理)

有了 Service Mesh 之后,微服务中,服务与服务之间的通信就是靠这些 网络代理模块 来保障。

那我们为啥需要采用 Service Mesh 呢,Service Mesh 帮我们解决了目前微服务之间调用的啥痛点了吗?

二、为什么需要「 Service Mesh 」?

在传统微服务架构中,随着业务越来越大,拆分的服务实例也越来越多,那么各个服务之间的依赖就变成了非常复杂的网络拓扑结构,可能就类似于这样了:

哈哈,晕图了、晕图了!

在如此复杂的分布式部署结构下,咱们微服务中服务依赖调用和数据传输所面临的问题也成倍增加,极大的提高了服务治理的难度。

同时,由于 容器化技术 的成熟和规模化,微服务都会采用容器化,并朝着 云原生应用 的方向发展。而传统的微服务架构中,虽然也有服务治理的组件,但是这些组件大多需要在应用代码里进行集成,这是不符合 云原生应用 的思想的。因此,大家急需一个标准化,能高效部署和运维的微服务体系方案。

因此,Service Mesh 就出现了,Service Mesh 就是用来解决这些痛点的,设计的目的就是用来解决微服务架构中 服务间可靠调用、服务治理 等问题。

下面就拿第一代 Service Mesh 产品 Linkerd 举例说明:

图中可以看到,每一个服务实例(Service)的部署都会同时部署一个 Linkerd 实例,并且服务之间的调用并不是直接进行的,而是先经过 Linkerd 模块去代理转发完成的。

例如:Service A 需要调用 Service B 的时候,Service A 是把请求发给与它一起部署的 Linkerd-1 的,然后这个 Linkerd-1 将请求发给 Service B 所部署模块的 Linkerd-2,然后  Linkerd-2 再将请求内容转发给 Service B 处理。因此,在整个流程中,Service A  和 Service B 只需要关注自己的业务逻辑即可,无需关注任何服务框架的功能,这些服务框架的功能都是由Linkerd 去实现,Linkerd 要做 负载均衡、熔断、限流、监控等等。

下面我们具体来看看 Service Mesh 的原理。

三、「 Service Mesh 」的原理与应用?

Service Mesh 的核心其实就2个模块:SideCar 与  Control Plane,如图:

搞懂了 SideCar 与  Control Plane 也就对 Service Mesh 的基础思想原理明白了。

  1. SideCar:

    上面说到的与服务部署在一起的轻量级网络代理也就是指SideCar,它的作用就是实现服务框架的各项功能,这样,就可以让服务(Service A 或 Service B)回归业务本质。

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

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

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

  2. Control Plane:

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

在文章的最开始提到过,以 Linkerd 为代表的被称为第一代 Service Mesh,而以 Istio 为代表的称为了第二代 Service Mesh。主要的不同就是 Istio 引入了 Control Plane 的概念,可以通过  Control Plane 来对服务进行一些精细化控制,所以 Istio 也被称为是实际上的 Service Mesh 标准产品。

以上,就是我对微服务架构中「 Service Mesh」的一些思考,你是怎么看的呢?

码字不易啊,喜欢的话不妨转发朋友,或点击文章右下角的“在看”吧。??

本文原创发布于微信公众号「 不止思考 」,欢迎关注。涉及 思维认知、个人成长、架构、Web技术 等。

原文地址:https://www.cnblogs.com/jsjwk/p/11089131.html

时间: 2024-07-30 15:45:42

微服务架构之「 下一代微服务 Service Mesh 」的相关文章

微服务架构之「 配置中心 」

在微服务架构的系列文章中,前面已经通过文章<微服务架构之「服务网关 」>介绍过了在微服务中服务网关的原理和应用,今天这篇文章我们继续来聊一聊微服务中另外一个重要模块:「 配置中心 」.后面还会继续介绍 服务框架.服务监控.服务治理等.还是那句话,只有将这些基础设施弄清楚了,微服务实践的道路才能走的稳.走的远. 「配置中心」,顾名思义,就是用来统一管理项目中所有配置的系统.虽然听起来很简单,但也不要小瞧了这个模块.如果一个中型互联网项目,不采用配置中心的模式,一大堆的各类配置项,各种不定时的修改

Re:从 0 开始的微服务架构--(四)如何保障微服务架构下的数据一致性--转

原文地址:http://mp.weixin.qq.com/s/eXvoJew3bjFKzLLJpS0Otg 随着微服务架构的推广,越来越多的公司采用微服务架构来构建自己的业务平台.就像前边的文章说的,微服务架构为业务开发带来了诸多好处的同时,例如单一职责.独立开发部署.功能复用和系统容错等等,也带来一些问题. 例如上手难度变大,运维变得更复杂,模块之间的依赖关系更复杂,数据一致性难以保证,等等.但是办法总是比问题多,本篇文章就来介绍一下我们是如何保障微服务架构的数据一致性的. 微服务架构的数据一

解析微服务架构(二):融入微服务的企业集成架构

上一篇文章介绍了微服务架构的起源.定义.通用特性.常见概念误区.微服务架构与SOA架构比较.微服务架构收益以及企业引入微服务架构的策略. 本文将介绍融入微服务的企业集成架构的演进,并描述交互式系统的微服务模式及相关技术决策,然后给出了一个具体的微服务架构业务应用的例子. 交互型系统(System of Engagement)与记录型系统(System of Record) 随着移动互联网的快速发展,企业除了需要提供传统核心IT系统能力之外,还需提供客户与合作伙伴友好型的以交互为重点的创新及交互式

.netcore 3.1高性能微服务架构:封装调用外部服务的接口方法--HttpClient客户端思路分析

众所周知,微服务架构是由一众微服务组成,项目中调用其他微服务接口更是常见的操作.为了便于调用外部接口,我们的常用思路一般都是封装一个外部接口的客户端,使用时候直接调用相应的方法.webservice或WCF的做法就是引用服务,自动生成客户端.在webapi2.0里,我们都会手动封装一个静态类.那么在.netcore3.1的微服务时代,我们该如何处理这个问题呢? ----思路都是一样的,封装一个外部服务,并且使用依赖注入和 HttpFactory工厂等.netcore特有的方式提升性能.接下来我们

Spring Cloud构建微服务架构 消息驱动的微服务(消费分区)【Dalston版】

通过上一篇<消息驱动的微服务(消费组)>的学习,我们已经能够在多实例环境下,保证同一消息只被一个消费者实例进行接收和处理.但是,对于一些特殊场景,除了要保证单一实例消费之外,还希望那些具备相同特征的消息都能够被同一个实例进行消费.这时候我们就需要对消息进行分区处理. 使用消息分区 在Spring Cloud Stream中实现消息分区非常简单,我们可以根据消费组示例做一些配置修改就能实现,具体如下: 在消费者应用SinkReceiver中,我们对配置文件做一些修改,具体如下: spring.c

.net core 跨平台开发 微服务架构 基于Nginx反向代理 服务集群负载均衡

1.概述 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器. 服务器集群就是指将很多服务器集中起来一起进行同一种服务,在客户端看来就像是只有一个服务器.集群可以利用多个计算机进行并行计算从而获得很高的计算速度,也可以用多个计算机做备份,从而使得任何一个机器坏了整个系统还是能正常运行. 负载均衡,英文名称为Load

SOA和微服务架构的区别?

知乎用户 289 人赞同了该回答 谢多人邀请,其实前面几位的回答已经差不多了,在这里仅谈下自己的简单总结. 微服务架构强调的第一个重点就是业务系统需要彻底的组件化和服务化,原有的单个业务系统会拆分为多个可以独立开发,设计,运行和运维的小应用.这些小应用之间通过服务完成交互和集成.每个小应用从前端web ui,到控制层,逻辑层,数据库访问,数据库都完全是独立的一套.在这里我们不用组件而用小应用这个词更加合适,每个小应用除了完成自身本身的业务功能外,重点就是还需要消费外部其它应用暴露的服务,同时自身

百度“百老汇”架构师深刻透视微服务架构

首先解释这个"百老汇"=百度老年架构师活动中心.......什么是微服务首先微服务并没有一个官方的定义,想要直接描述微服务比较困难,我们可以通过对比传统WEB应用,来理解什么是微服务.传统的WEB应用核心分为业务逻辑.适配器以及API或通过UI访问的WEB界面.业务逻辑定义业务流程.业务规则以及领域实体.适配器包括数据库访问组件.消息组件以及访问接口等.一个打车软件的架构图如下: 尽管也是遵循模块化开发,但最终它们会打包并部署为单体式应用.例如Java应用程序会被打包成WAR,部署在T

你真的理解微服务架构吗

什么是微服务 首先微服务并没有一个官方的定义,想要直接描述微服务比较困难,我们可以通过对比传统WEB应用,来理解什么是微服务. 传统的WEB应用核心分为业务逻辑.适配器以及API或通过UI访问的WEB界面.业务逻辑定义业务流程.业务规则以及领域实体.适配器包括数据库访问组件.消息组件以及访问接口等.一个打车软件的架构图如下: 尽管也是遵循模块化开发,但最终它们会打包并部署为单体式应用.例如Java应用程序会被打包成WAR,部署在Tomcat或者Jetty上. 这种单体应用比较适合于小项目,优点是