今天给大家分享一个话题,就是多机房多活架构,这个话题可能很多兄弟从来没听说过,或者哪怕听过,但是因为一直在小公司工作,也没搞过,没经历过。
不过没关系,今天我们就给大家讲解讲解这个大厂才会玩儿的多机房多活架构师什么,大家也可以了解了解,就当拓个知识面出来。
什么是服务器?什么是机架?什么是机房?
说到这个多机房多活架构,首先我们得先给大家说说,啥叫做机房,这么说吧,你平时在本地打开 intellij idea,在里面打开项目代码,然后用 spring boot 一类的框架写一堆的代码,controller+service+dao 这个画面大家是不是很熟悉?
然后呢,然后写完了代码,你得把代码打包啊,上传到线上服务器上啊,然后在线上服务器里用 jar 包重新启动系统啊,这个过程你可以自己手工操作,也可以借助 jenkins 一类的工具自动化流水线部署。
但是大致流程如下图:
那现在问大家一个问题,你这所谓的线上服务器,是在哪里啊?懵逼了吗?不知道了吗?
那说明你这还是有问题的,这个线上服务器其实是一个真实存在的有物理形态的一个东西,就跟你家里的衣柜一样,他是看得见摸得着的。
首先,你公司如果想要提供一台服务器给你用,他必须在一个机房里买一台或者租用一台服务器,这里就有一个机房的概念,这个机房是啥呢?大概来说,就跟你住的城市郊区里盖的厂房看起来类似吧,他就是一个房子!
然后呢,在这个机房里,有一些房间,房间里呢,有一排一排的机架,或者叫做机柜,这个机架就是一个架子,机柜就是柜子,机架上就放了一台一台的服务器,服务器就是一个一个的大黑盒子。
所以此时如下图:
然后呢,这个机架上放的服务器,就一黑盒子,他是联网的,咱们可以通过网络连接他,怎么连接?
他有 ip 地址啊,你通过 ssh 一类的连接命令,或者是代码里通过网络都可以连接到这台服务器去,所以这就是你连接服务器的过程。
什么是同城灾备机房?
那然后呢?问题来了,你现在理解了上述的概念,就知道了,你的系统是部署在一个看得见的机房的一个机架的一个服务器里的,那如果整个机房突然停电了呢?是不是会导致你的系统就直接没了?
对啊,就是这样子的,所以说,我们可以在一个城市里的另外一个机房里,把你的系统也部署一套,此时你的系统就部署了两个机房了。
如下图:
那现在问题来了,这俩机房怎么协同工作啊,这里告诉你一个小秘密,一个机房里部署的系统是会连接到自己的一个数据库的,数据库也是在那个机房的另外一台服务器上部署的,然后平时我们就访问这个机房部署的系统就好了。
但是呢,另外一个机房里也是有两台服务器,一台部署系统,一台部署数据库。
此时我们可以让生产机房里的数据库的数据实时同步到同城灾备机房的那个数据库里去,一旦要是生产机房停电了,直接就访问同城灾备机房的系统就好了啊,数据在那个机房的 mysql 了都是有的。
如下图:
什么是两地三中心的架构?
但是这个时候问题又来了,万一要是这个城市发生了一些自然灾害,类似于洪涝、地震一类的问题,俩机房都完蛋了,这可怎么办啊?
此时就会出现一个两地三中心的架构,就是一个城市里俩机房,另外一个城市搞一个异地灾备机房,让同城灾备机房的数据实时同步给异地灾备机房,此时即使是一个城市发生了自然灾害,那也不怕啊,别的城市还有一个机房呢。
如下图:
什么是多机房多活的架构?
但是这么搞有一个问题,平时就用一个机房的资源,另外俩机房就是同步数据做灾备的,发生停电、自然灾害的时候,才会用到灾备机房,这可怎么办呢?
所以后来又开始搞多活架构,就是说,上述三个机房都可以访问,哪个机房写入了数据,他就会把数据同步给另外俩机房。
如下图:
因此到这里为止,就给大家讲清楚了咱们的多机房多活的架构了,这一般是大厂通常会这么搞,但是中小公司一般是不会这么玩的,不过大家可以作为一个知识面了解一下,别人家说到多机房多活都不知道啥意思。