目录
如何设计分布式消息驱动架构 2
一、 绪论 2
美国科学家约翰.冯.诺伊曼发明世界上第一台计算机的初衷就是代替人工算术,当时在一秒钟之内进行了5000次加法运算和500次乘法运算,一举震惊世界,人们无不欢呼喝彩。时至今日,计算机不仅可以进行数值计算,还可以进行逻辑计算,并且还具有记忆功能。 2
随着计算机被广泛地运用到各行各业,从而诞生了一种行业:软件开发工程师、程序员、码农,他们每天都在为现实世界编写各种程序,然后在计算机中运行它们,自动、高效、永无休止地帮人类处理海量工作。 2
二、 工作模式 2
在现实世界中,每当面临挑着或者解决巨大问题时,人类都会按照这两种工作模式解决问题,如下: 2
(一) 蚂蚁搬大象 2
蚂蚁每天都在孜孜不倦地寻找食物,并将其搬回巢穴。 2
当一只蚂蚁发现一头大象尸体时,便会发出通知信号,随后附近所有的蚂蚁都会纷至沓来,一起将这头大象搬回洞穴。 2
有的蚂蚁抬头,有的蚂蚁搬脚,有的蚂蚁顶肚,还有的蚂蚁。。。。。。齐心协力地一步步将大象搬回去,不得不感叹蚂蚁的智慧和毅力。 2
由此可见,蚂蚁搬大象采用的是一种中心化的工作模式,即将所有的蚂蚁集中到一起,收到抬头消息的蚂蚁就抬头,收到搬脚消息的蚂蚁就搬脚,收到顶肚消息的蚂蚁就顶肚,从而完成一只蚂蚁无法办到的事。同理,计算机领域中的分布式和集群也是一样的道理,协调控制器会自动划分角色(master/slave、header/follower),分配任务,发送通信消息,从而将多台计算机组成一个整体,完成一台计算机无法完成的事情,比如:天猫双十一、春晚抢红包、12306购票等。 2
(二) 大象装冰箱 3
在赵本山、宋丹丹的小品中,有一个环节,赵问:“如何将一头大象装进冰箱”?宋答“三步,第一步打开冰箱门,第二步放入大象,第三步关上冰箱门”。 3
相信很多观众当时都非常费解,哪有这么大的冰箱呢?其实我们都认为将一整头大象直接放入冰箱是不可能,但是大家还是会这样想,这都是惯性思维。 3
完成这个挑战很简单,只需打破惯性思维,首先聘请一群工人将大象分解,一部分工人切分头部,一部分工人切分身体,一部分工人。。。。。。,最后再分别将分块放入冰箱。 3
由此可见,这是一种将大问题拆分成小问题,然后分而治之的方法,从而达到将大象放入冰箱的目的,收到切分头部消息的工人就切分头部,收到切分身体消息的工人就切分身体,各自独立完成一部分工作,这是一种去中心化的工作模式。同理,在分布式系统中,为了增加系统容错性,提高数据可靠性,经过分片每个计算节点都会存储一部分数据,这就是分布式存储,不同于传统方式将所有数据集中存储在一起,比如:MySql数据库。 3
三、 本质 3
综上所诉,中心化模式追求的是齐头并进,要么都完成,要么都完不成,强调一种事务性,蚂蚁搬大象就是这样,只要有蚂蚁偷懒,未完成前一个步骤,那么下一个步骤就无法进行,因为有的蚂蚁可能会被压死,这样最终就无法完成任务。与之相对,去中性化模式,首先将任务分解,然后分发给各个工人,高度自治,完成一部分就是一部分,只要最终完成就行了。 3
那么如果希望设计一种既能完成蚂蚁搬大象,又能胜任大象放冰箱的系统,那么就需要支持这两种模式。 3
从整体上,可以采用去中心化模式进行分解,这是框架的职责,需要做到对使用此框架的应用开发工程师完全无感知;对于拆分出来的独立模块,这是应用开发工程师编写高度自治业务逻辑(比如:聚合根)的地方,对外而言,它们只管接收什么类型的消息(命令),发送什么类型的消息(事件),这就是最简单的、最本质的开发模式,就像开发单体应用程序一样,他们只需完全专注于业务领域。 3
四、 特点 3
综上所述,为了满足框架易用性、数据可靠性、系统可用性,设计的系统需要具备以下特点: 3
(一) 消息驱动 3
(二) 低延迟 3
(三) 高并发 4
(四) 高可用 4