图文讲解:分布式系统、微服务架构与服务器集群的区别与联系
前言
目前越来越多的公司都在用微服务架构,可以说微服务就是未来的主流,所以对其了解乃至深入理解是很有必要的,本文采用图文结合的方式系统地介绍了什么是分布式系统、微服务架构、服务器集群,方便初学者了解,同时也介绍了三者之间的区别与联系,并给出了作者的见解,方便进阶读者深入理解。
由于作者水平有限,所以如本文有什么错误欢迎指出,读者若有什么不同的观点也欢迎评论区或者私信交流。
基础概念讲解
什么是分布式系统?
分布式系统概念
由多台独立计算机通过网络协同工作、共同完成同一任务,对外表现为一个整体的系统。
由概念我们不难理解,分布式系统就是多台计算机合作完成同一项任务,通俗理解来讲就是*"一个篱笆三个桩,一个好汉三个帮”*,一个计算机完成不了的任务通过多个计算机来完成。
分布式系统图
分布式优势
相信从图中可以看出,现在6个计算机负责同一个任务,那么每个计算机所承受的压力变为了原来的六分之一,若性能还是不够的话还可以再加计算机,可见分布式系统的出现主要是为了在性能方面分散压力同时提高可拓展性。
需注意各个计算机负责的点不同,否则就变成了服务器集群。(你可以先跳过此段话看完后面再来理解)
该图为类比到项目上的分布式架构(大家多注意区分分布式系统和分布式架构,下文分布式多代表分布式架构)。
什么是微服务架构?
微服务概念
微服务是指将一个大型的单体应用系统按照业务功能拆分成一组小型、独立运行的服务。
概念也很明确了,就是将一个应用的复杂业务拆分成多个单独的服务,通俗来理解就是同样是看病的地方,小诊所一个屋子负责很多病症,而大医院则分成了各个科室,不同科室负责不同的病症。所以微服务架构与单体架构的不同点在于同样是很多功能,微服务架构将各个功能拆分开来了。
单体架构VS微服务架构
需注意:单体架构是模块,微服务架构是服务,区别在于各个模块互相依赖,而各个服务之间则是互相联系,也就是说对于单体架构,若模块1出问题可能其他模块也都崩溃,但若服务1出问题(若分离的够好)并不影响其他服务。
关于API网关的讲解具体可见我其他博客。
微服务优势
由上述可以看出,微服务架构相较于单体架构耦合度低了很多,对于大型复杂业务,若采用单体架构,则很容易写成“屎山”,后期极难维护,而若一个地方写错了,则整个程序可能都会崩溃,对于大型复杂业务根本不可取,但是若采用微服务架构,将不同业务分离开来,架构清晰很多的同时也便于团队合作开发,且若某个地方写错了虽然很难避免影响到其他服务,但可以最小化影响,同时可以快速定位到错误的服务,微服务架构主要是为了降低项目业务耦合度和增加协作效率。
但凡事都有两面性,对于简单项目则更建议采用单体架构,否则便是徒增开发难度和复杂度,且如果代码水平不够的话很容易把微服务写成“屎山”,反倒不如单体架构优雅。架构没有绝对优劣,合适才是最优解。
什么是服务器集群?
服务器集群概念
同一个服务的多台服务器同时运行,用于提高性能和可用性。
从概念就可以直接理解什么是服务器集群,通俗理解就是你开了个店,生意太好了,所以你又开了几个分店。
这里很容易和分布式系统混淆,大家先不必纠结,先理解服务器集群即可,下面会进行论述。
服务器集群图
关于负载均衡以及各种负载均衡策略的讲解具体可见我其他博客。
服务器集群的优势
其实由图可以很容易看出,现在你有了三个运行服务A的服务器,现在你拥有了三倍的性能,同时若其中某个服务器宕机,整个服务仍然正常运行,所以我们可以知道服务器集群的优势是提高项目的性能和稳定性。
三者的区别与联系
很多人把三者看为A包含B,B包含C的集合形式,这样其实是不正确的。
需明确,三者虽关联密切,但并不是同种类型的东西,它们关注的角度不同,无法用集合的形式表示,就像对于字母、数字、符号,你无法用A包含B,B包含C的集合形式来解释他们的关系。
作者见解:可以将三者套入医院,分布式就是一个医院有不同场所,各个场所做着不同的事情但共同完成整个流程(系统层面),微服务就是医院有很多科室,各个科室负责不同的病症(业务方面),服务器集群就是多个科室负责相同的病症。
区别
关注点不同
-
分布式系统 是一种系统形态,强调多节点协同工作来完成同一任务;
-
微服务架构 是一种设计思想,强调将业务拆分成多个独立的小服务;
-
服务器集群 则是一种部署方式,强调同一服务运行在多台服务器上以提升性能和可靠性。
解决的问题不同
- 分布式系统解决了性能和可拓展性的问题。
- 微服务架构解决了业务复杂度和耦合度的问题。
- 分布式系统解决了高并发和高可用的问题。
联系
微服务架构既然拆分了业务,那若将各个业务分别部署到不同的单个服务器岂不是即提升了性能又降低了耦合度,这便是微服务和分布式的结合。
而若将微服务的每个业务分别部署到不同的多个服务器上岂不是又提升了并发性能和高可用,这便是微服务和分布式和服务器集群的结合。
对于单纯的服务器集群来说,每个服务器运行是同一模块,则不能算为分布式,但是若运行不同的模块(各个模块之间不以业务划分)则可以称之为服务器集群+分布式,而若运行不同的服务(各个服务之间以业务划分),则可称为服务器集群+分布式+微服务架构。
两两之间论述
分布式和微服务的论述
分布式更强调系统层面的模块分离和物理的部署,将不同模块部署到不同服务器,重点在于提升性能和可拓展性。
微服务更强调业务上的解耦,将整个项目拆分为不同的服务,重点在于降低业务复杂度和耦合度。
但现实中一般的微服务架构都是分布式,因为一般大型公司将服务拆分后往往会部署到不同的服务器。
而若项目拆分后依旧将全部服务部署到同一服务器,则不属于分布式。
是微服务但并不是分布式的例子
分布式和集群的论述
分布式架构是将不同模块部署到不同的服务器。
服务器集群是将同一业务部署到不同的服务器。
不难看出,对于服务器集群,各个服务器运行的是同一业务,而分布式的各个服务器则是不同模块。
所以单纯的服务器集群并不是分布式,单纯的分布式也不是集群,而若将分布式的各个模块都部署到多台服务器上,则即是服务器集群,又是
分布式。
单独的分布式架构
单独的服务器集群
即是分布式架构又是服务器集群
微服务和集群的论述
其实两者很容易区分,并无太多关联,一般的微服务也不是集群,一般的集群也不是微服务。
但是现实中应该采用微服务的项目都进行了集群部署,因为这样便兼顾了降低业务耦合度和提高高并发、高可用能力。
微服务非集群
微服务集群
一些加深理解的问题
1.分布式和微服务各自的目的?
分布式是为了分散物理压力和增加可拓展性。
微服务是为了降低业务的复杂度和耦合度。
2.分布式一定是微服务吗?
并不一定,若分布式的各部分是按照业务划分的则属于微服务,反之则不属于。
3.微服务一定是分布式吗?
并不一定,若微服务部署到不同的服务器则属于分布式,反之不属于。
4.如何区分分布式和集群?
只需要看服务器上部署的是不是同一模块,若是同一模块则是集群,若是不同模块则是分布式,若有多个服务器相同模块,同时多个又不同,则是分布式又是集群。
5.要给作者点赞吗?
既然你都看到这里了,说明对作者所说还是有点认可的,那么点个吧,又不花钱(手动滑稽)。
写于文尾:本文章仅为作者个人理解,若有遗漏或错误欢迎点出,若有不同观点欢迎交流,若哪部分不是特别理解可以在评论区指出或者私信作者。最后祝愿大家都有一个好的未来,每天开心。
一模块则是集群,若是不同模块则是分布式,若有多个服务器相同模块,同时多个又不同,则是分布式又是集群。
5.要给作者点赞吗?
既然你都看到这里了,说明对作者所说还是有点认可的,那么点个吧,又不花钱(手动滑稽)。
写于文尾:本文章仅为作者个人理解,若有遗漏或错误欢迎点出,若有不同观点欢迎交流,若哪部分不是特别理解可以在评论区指出或者私信作者。最后祝愿大家都有一个好的未来,每天开心。