当前位置: 首页 > news >正文

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

作者:奎哥

来源:不止思考

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

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

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

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

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

01 什么是「 Service Mesh 」?

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

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

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

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

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

02 为什么需要「 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 的原理。

03 「 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」的一些思考。

推荐阅读

《Service Mesh实战:基于Linkerd和Kubernetes的微服务实践》

推荐语:思科技术专家撰写,以Linkerd和K8s为背景,详解Service Mesh工作原理,以及K8s下Linkerd管理、运维和监控。

你与世界

只差一个

公众号

点击“阅读原文“了解更多微服务好书!

相关文章:

  • 新书推荐 |《OpenCV 4计算机视觉项目实战(原书第2版)》
  • 一文看懂用R语言读取Excel、PDF和JSON文件(附代码)
  • 新书推荐 |《好设计,有方法:我们在搜狐做产品体验设计》
  • 新书推荐 |《广告数据定量分析:如何成为一位厉害的广告优化师》
  • 用Python给女友准备个绝对甜蜜的七夕礼物
  • 新书推荐 |《机器学习即服务:将Python机器学习创意快速转变为云端Web应用程序》...
  • 搞定这个月薪50K的AI热门领域,看这9本书就够了
  • 新书推荐 |《强化学习:原理与Python实现》
  • 智能生产之路(一):从计算机集成制造到精益生产再到工业 4.0
  • 这是一份所有人都适用的DevOps书单
  • 新书推荐 |《TensorFlow机器学习实战指南(原书第2版)》
  • CIC 2019 回顾:行业洞察与数字化转型的未来
  • 新书推荐 |《区块链工程实践:行业解决方案与关键技术》
  • 如何打造高质量的NLP数据集
  • 新书推荐 |《Linux系统安全:纵深防御、安全扫描与入侵检测》
  • 深入了解以太坊
  • Hexo+码云+git快速搭建免费的静态Blog
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • Python_网络编程
  • SpiderData 2019年2月13日 DApp数据排行榜
  • springboot_database项目介绍
  • supervisor 永不挂掉的进程 安装以及使用
  • Swoft 源码剖析 - 代码自动更新机制
  • 第十八天-企业应用架构模式-基本模式
  • 动态魔术使用DBMS_SQL
  • 浮现式设计
  • 聊聊hikari连接池的leakDetectionThreshold
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 用Python写一份独特的元宵节祝福
  • 7行Python代码的人脸识别
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​flutter 代码混淆
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (10)ATF MMU转换表
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (C++)八皇后问题
  • (C语言)共用体union的用法举例
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (九)c52学习之旅-定时器
  • (十三)Flask之特殊装饰器详解
  • (十五)使用Nexus创建Maven私服
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)http协议
  • **CI中自动类加载的用法总结
  • .“空心村”成因分析及解决对策122344
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .Net Core 中间件验签
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET学习教程二——.net基础定义+VS常用设置
  • /bin/bash^M: bad interpreter: No such file or directory
  • /bin/rm: 参数列表过长"的解决办法