Service Mesh的起源

目前基于微服务架构搭建自己的应用,已经成为主流的开发方式,从几年前的星星之火到现在的大规模的落地,构建微服务应用是每个开发者都需要面对的工作,然后软件开发行业从来没有银弹,微服务在给我们带来一系列便利的同时,也依赖会存在缺点,其中最核心的问题就是如何管理好服务间的网络通信,特别是应用规模变得越来越庞大的时候,这个问题就会变得越来越突出,而Service Mesh技术就是解决这个问题而生的,通过它可以让开发者从软件通信的泥泞中解脱出来,省去了开发和维护控制逻辑的繁重工作,让开发人员只关注业务。

云原生是未来软件架构的方向,而且它现在正以燎原之势席卷着整个软件开发行业,现在开发的应用一般都在云上,或者正在全面上云的路上,并且或多或少已经引入了云原生架构中的技术,而service mesh是云原生中重要的一环。

有人把kubernetes和service mesh和serverless称为云原生架构的三架马车,如果把k8s比如云原生的操作系统,而serverless是让应用不在关注机器与实例,那么service mesh就好比应用的网络通信层,它让应用与服务节藕,让开发者只关注业务,有很多业务逻辑中夹杂着大量控制逻辑的应用程序,而service mesh帮你完成了这些工作,而服务不在出现超时,重试这样的控制逻辑控制,也不用集成各种流量控制相关的类库工具包,你的代码只有业务本身,service mesh让你着眼于现在,解决当下微服务的痛点,并稳定的迈向云原生的未来。

有的人把service mesh称为第二代微服务,这不无道理,而现在的微服务也有一些问题,著名的软件大师马丁福勒曾经写过一篇著名的文章叫《微服务》,这里面描述了微服务的概念与特性,其中有两个特性非常重要

1、围绕业务去构建团队
云原生技术专题-Service Mesh-为什么会出现(一)_第1张图片
这张图是单体应用典型的模式,首先左侧指的是开发团队它的一个整体架构,而这些开发团队分为不同的职能分成了不同的层次组合在一起,他们开发出来的产品就是右边这个样子,包括它前端的页面以及中间业务层逻辑,和最后的数据库层

而微服务架构中整个开发团队会围绕业务去构建,所以它的结构和单体是不太一样的,可以看到它不同的职能被划分成了一个个小的团队,每个小的团队会对应实现一个独立的业务,那么这样的出现,这就引出了一个著名的理论叫康威理论,康威定理是这样描述的,它是说它一个团队的结构会决定这个团队最终开发的产品的结构。

2、去中心化的数据管理
云原生技术专题-Service Mesh-为什么会出现(一)_第2张图片

在左边的单体模式下,整个数据库是一个整体,它的数据是中心化的,而微服务的架构下也业务是绑定在一起的,它的数据库和业务也是绑定在一起的,不同业务会持有不同的数据库,这就是所谓的去中心化的数据特点,这两个特点会带来什么样的优势?

微服务架构的优势
团队层面:当我们把团队划分为一个小的内聚的团队的时候,就会发现一个非常大的优势,就是沟通成本会急剧的降低,比如说之前在开发单体应用的时候,前端和后端需要连接一个接口,就不得不去跨团队去协调去沟通,但是现在大家坐在一起沟通就可以了,它的沟通成本会降低,同时我们这些小的团队可以在一起快速的去独立的去完成业务,和别的team不会有太多的耦合,也不会有太多的依赖。
产品层面:从产品角度来讲,因为不同的业务划分了一个个小的微服务,那么就带来一个大的优势就是可以去独立的去部署,独立部署有两个好处,第一个好处就是可以充分的去利用系统资源,比如说模块一可能访问量比较高,那么我们可以把它多部署几份,模块二访问量比较低,就可以部署一到二份就可以,而原来这样的优势在单体应用是不存在的,不得不去部署多个实例,哪怕这里面有一部分的业务它访问比较高,访问量比较低的那部分业务也同样被部署了多份,它整体的系统利用率是比较低的,另外一个优势就是可以独立的部署,字节的业务开发完成,我就可以直接独立部署,不需要去协调,去等待其他的模块一起去上线。

微服务是软件架构的银弹吗?
什么是银弹理论,银弹理论起源于1975年写的一本书叫人月神话,它是这样描述银弹理论的,没有任何一种技术和管理上的进步,可以极大的提高生产效率,这句话的意思可以理解为没有任何一种技术可以完美的可以完美的解决软件开发出现的问题,而软件开发的本质就是取舍,我们总是在天平的两端不断的去摇摆,去寻找其中的平衡点,算法中有一个重要的原理就是用空间换时间,或者用时间换空间,这就是一种取舍,软件开发中也是一样,无论是进行应用系统开发,还是架构的设计,都需要寻找平衡点,甚至是给一个函数在命名的时候,都要去纠结名词在前还是动词在前,曾经有个笑话说程序员50%的时间都是在函数起名上,这其实不无道理,那么微服务带来了很大的优势,同样也存在一些缺点。

微服务架构面临什么样的问题?

云原生技术专题-Service Mesh-为什么会出现(一)_第3张图片
这是一个非常简单的微服务示例,一共6个微服务,假设当两个服务进行调用的时候,突然网络出现了中断,怎么办呢?那就需要想办法进行去调试,这张图演示的微服务规模非常的小,很容易就会发现问题的所在,但是如果你的微服务变得越来越庞大的时候,系统功能越来越多的时候,比如下面的这张图如何去排查
云原生技术专题-Service Mesh-为什么会出现(一)_第4张图片
再或者说系统复杂到下面这种程度
云原生技术专题-Service Mesh-为什么会出现(一)_第5张图片
如何去找到出现问题的节点,很显然这就是微服务面料的最大的一个痛点,就是服务间网络通信的问题

为什么说网络通信是微服务架构的痛点?
这就要引出一个新的理论,这就是非常著名的分布式计算的8个缪论
云原生技术专题-Service Mesh-为什么会出现(一)_第6张图片
比如说它是这样描述的,可以一眼看出这些都是反话,为什么会有这8种缪论的存在呢,是因为我们工程师在开发业务系统的时候,潜意识里面很难去考虑网络相关的问题,很难会把网络相关的需求纳入到我们的设计中,因此就导致了这8个缪论的产生,其实在分布式的系统中,网络问题是经常出现的,而微服务这种架构,因为服务变得越来越多,变得更离散,交互也越来越多,所以网络问题也会出现的概率会更大,因此这就是微服务架构的最大的一个痛点。

如何管理和控制服务间的通信?
而解决微服务网络通信的痛点,也就如何去管理和控制服务网络通信的问题,一般情况下主要有以下的一些需求
1、服务注册/发现
2、路由,流量转移
3、弹性能力(熔断、超时、重试)系统出现故障,如何通过熔断、超时、重试这些弹性能力来提升系统整个健壮性和可靠性
4、安全,网络安全,如何进行授权,进行身份认证
5、可观察性,对于微服务来说,服务的可视化是非常重要的,也就是服务的可观测性,如何通过可视化的方式去查看整个服务的状态,系统的资源使用情况
而这些功能组合在一起就是service mesh