2.1 分布式并行计算模式

2.1.1 最初想到的master-slave结构

当我们最初构思使用几台计算机去设计一个分布式并行计算系统时,很自然就会想到master-slave(m-s)的结构,由一台计算机作为主调度者,然后几台计算机根据调度完成任务,如图2-1所示。

2.1 分布式并行计算模式 - 图1

图2-1 master-slave结构

实际上,这个最简单的并行计算结构目前仍然存在于很多分布式系统中,master通常实现为一个SocketServer,slave与之保持心跳,并且互相通信传送任务,最后由master汇集结果。这个结构一目了然,容易被C/C++或者Java实现。或者另外一种变体就是在一台计算机上的多线程实现,由线程共享变量代替通信,多线程实现的master-slave结构也广泛存在于各种应用中,对于经验并不多的工程师,也能自己写一个多线程实现的master-slave一展身手。

但是实践的时间长点,我们会发现这个最简单的并行计算结构存在一些缺陷。首先,各个slave需要获取master的存在并连接它,master必须做为一个服务程序存在,它跟slave之间是一种紧密耦合的连接状态,master必须一直存在于集群中,它虽然孤立,但是它是中心领导,它太重要了,因此不能有任何问题。

另外,我们观察master的职责,它除了分配任务给slave执行外,还承担着负责协同一致性等角色,比如它要接受slave的注册,如果slave死掉,需要感知等等,承担的责任太多了。

因此master最好能将协同部分的职责分离出来,它只负责任务调度部分,为了减少故障,它最好不要做为服务程序一直存在。