单体系统
说分布式系统之前,我们先来说说什么是单体系统。几年前流行使用Spring MVC+Spring+MyBatis这三个框架,现在流水使用Springboot框架,然后配合MySQL数据库,我们就可以很容易的去开发出一个包含各种功能模块的单体系统,如下:
我们以前是写好代码之后,将项目打成war包,然后将war包放在Tomcat下的webapps目录下,随着Tomcat服务器的启动,war包可以自动被解压;现在很多都是直接用Springboot去启动系统,由于Springboot已经内嵌了Tomcat,Springboot会自动配置并启动Tomcat服务器,不用再去手工部署Tomcat了。单体系统它就是一个工程,所有的功能模块都放在这个系统里面了,假如你这个单体系统是一个电商类系统,里面就可能包含了购物车模块、订单模块、商品模块、配送模块、会员模块和营销模块,所有的模块都包含在了一个业务系统里面。
我们再来看一下这个图,我们的单体系统是不是可能会部署在多台服务器上?没错,不管你是部署在一台服务器上还是部署在多台服务器上,它都是一个单体系统,因为它就只有一个工程,这个工程里面就包含了所有的功能模块代码,所有的业务逻辑,不管这个单体系统部署了多少台服务器,它始终都是一个单体系统。
分布式系统
那么什么是分布式系统呢?它意思就是说啊,把一个单体系统拆分成很多个系统。一般来说啊,单体系统里面如果包含的功能模块太多了,比如好几十个功能模块,那么这时候就会有很多人去维护这个包含了大量功能模块的单体系统,这个时候就会考虑把这个单体系统拆分成分布式系统了。然后某几个人去维护这个系统,某几个人去维护那个系统,就不会说所有人都去维护一个大系统了。
从上图可以看出,我们把购物车、订单、商品、配送、会员、营销,这些不同的功能模块放到了不同的工程里面,然后单独的部署在一台服务器上,变成了一个独立的系统了,这个时候原来的单体系统就变成了分布式系统了。
总结
分布式系统它的本质呢,就是因为一个单体系统内的功能模块太多了,太多人一起去维护这个系统的代码实在是非常的麻烦,所以就得把不同的功能模块拆分成不同的系统,让原来的一个大系统现在分布在很多个小系统里面去,那么不同的小系统呢,它又部署在了不同的服务器上,所以这就让单体系统变成了一个分布式系统了。