微服务架构之「 下一代微服务 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 的基础思想原理明白了。
SideCar:
上面说到的与服务部署在一起的轻量级网络代理也就是指SideCar,它的作用就是实现服务框架的各项功能,这样,就可以让服务(Service A 或 Service B)回归业务本质。
传统的微服务架构中,各种服务框架的功能(例如:服务发现、负载均衡、限流熔断等)都代码逻辑或多或少的都需要耦合到服务实例的代码里,给服务实例增加了很多无关业务的代码,也带来了复杂度。
有了SideCar之后,服务节点只做业务逻辑自身的功能,服务之间的调用交给了SideCar,由SideCar去注册服务、去做服务发现、去做请求路由、去实现熔断限流、去做日志统计。
那么在这种新的微服务架构中,所有的 SideCar 组成在一起,其实就是一个服务网格了。那么这个大型的服务网格并不是完全自治的,它还需要一个统一的控制节点,也就是 Control Plane。
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 」的更多相关文章
- 面试都在问的「微服务」「RPC」「服务治理」「下一代微服务」一文带你彻底搞懂!
❝ 文章每周持续更新,各位的「三连」是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) ❞ 单体式应用程序 与微服务相对的另一个概念是传统的「单体式应用程 ...
- 微服务架构之「 API网关 」
在微服务架构的系列文章中,前面已经通过文章<架构设计之「服务注册 」>介绍过了服务注册的原理和应用,今天这篇文章我们来聊一聊「 API网关 」. 「 API网关 」是任何微服务架构的重要组 ...
- Re:从 0 开始的微服务架构--(四)如何保障微服务架构下的数据一致性--转
原文地址:http://mp.weixin.qq.com/s/eXvoJew3bjFKzLLJpS0Otg 随着微服务架构的推广,越来越多的公司采用微服务架构来构建自己的业务平台.就像前边的文章说的, ...
- 微服务架构:构建PHP微服务生态
微服务架构:构建PHP微服务生态 Linux系统技术交流QQ群(1675603)验证问题答案:刘遄 导读 诞生于 2014 年的“微服务架构”,其思想经由 Martin Fowler 阐述后,在近 ...
- 服务迁移之路 | Spring Cloud向Service Mesh转变
一.导读 Spring Cloud基于Spring Boot开发,提供一套完整的微服务解决方案,具体包括服务注册与发现,配置中心,全链路监控,API网关,熔断器,远程调用框架,工具客户端等选项中立的开 ...
- Istio入门实战与架构原理——使用Docker Compose搭建Service Mesh
本文将介绍如何使用Docker Compose搭建Istio.Istio号称支持多种平台(不仅仅Kubernetes).然而,官网上非基于Kubernetes的教程仿佛不是亲儿子,写得非常随便,不仅缺 ...
- .netcore 3.1高性能微服务架构:封装调用外部服务的接口方法--HttpClient客户端思路分析
众所周知,微服务架构是由一众微服务组成,项目中调用其他微服务接口更是常见的操作.为了便于调用外部接口,我们的常用思路一般都是封装一个外部接口的客户端,使用时候直接调用相应的方法.webservice或 ...
- 谁说微服务是Spring Cloud的独角戏?Service Mesh了解一下?
Service Mesh 的概念自 2017 年初提出之后,受到了业界的广泛关注,作为微服务的下一代发展架构在社区迅速发酵,并且孵化出了诸如 Istio 等广受业界关注的面向于云原生 (Cloud N ...
- .net core 跨平台开发 微服务架构 基于Nginx反向代理 服务集群负载均衡
1.概述 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客 ...
随机推荐
- 本人录制的视频资源(C/C++、Go、Qt、Linux等)
持续更新-- 编程语言 C语言开发实战:http://pan.baidu.com/s/1qXAP4x2 C语言贪吃蛇:https://pan.baidu.com/s/1pLRZIuJ C提高:http ...
- Java环境搭建若干问题
0.总体说明 本次搭建环境,为了偷懒,使用的是,阿里云镜像. 自带了Nginx.Tomcat.JDK等. 比较坑爹的是,虽然镜像带了很多安装好的软件,但是也有各种问题,比如它修改了tomc ...
- 支付宝开发之手机网站支付(H5支付)
其实官方的文档中:https://docs.open.alipay.com/203 介绍的已经很详细了,我就实地的看文档操作了一遍,具体步骤如下: 一.创建应用 流程如下: 首先要有支付宝开放平台: ...
- 详细回复某个CSDN网友,对我的文章和技术实力以及CSDN的吐槽
貌似被大学生鄙视了,我也是醉了,现在的大学生水平和信心,都这么高了~ 看来,我得加把劲了~ o(︶︿︶)o 电子商务系列文章,是我闲来无事,分享自己的一些业余实践经验的文章.其中关于数据库设计的这一篇 ...
- ARM汇编初探---汇编代码中都有哪几类指令---ARM伪指令介绍
要学习一个东西首先要把概念搞清楚,以下仅仅是自己的一些关于汇编的理解. 可运行文件里的01码是机器码,机器码不等于汇编码,尽管机器码能够非常easy翻译成汇编码. 汇编码中包括非常多汇编指令.伪指令和 ...
- 简单易用的动画animations
_tableView_selc.frame=CGRectMake(20, , 20,20); [UIView animateWithDuration:0.3f animations:^{ _table ...
- NSNull 和 nil 的判断
情况1. 等于Null if ([_content isEqual:[NSNull null]] ) { //等于Null } 情况2. 等于nil if (_content==nil || [_c ...
- MySQL主从复制架构使用方法
原文:MySQL主从复制架构使用方法 一. 单个数据库服务器的缺点 数据库服务器存在单点问题 数据库服务器资源无法满足增长的读写请求 高峰时数据库连接数经常超过上限 二. 如何解决单点问题 增加额外的 ...
- 【codeforces 779D】String Game
[题目链接]:http://codeforces.com/contest/779/problem/D [题意] 给你一段操作序列; 按顺序依次删掉字符串1中相应位置的字符; 问你最多能按顺序删掉多少个 ...
- 关于java项目与web项目中lib包的那点事
一.在java项目中如何引入外部jar包:1.在我们的java项目下新建一个lib文件夹:2.将我们需要引入的jat包复制到lib文件夹下:3.选中我们lib包下的jar,右键选择Build Path ...