1.2 示例:主-从应用

2018-05-21 17:32:08.0

    要实现主-从模式的系统,我们必须解决以下三个关键问题:

    主节点崩溃:如果主节点发送错误并失效,系统将无法分配新的任务或重新分配已失败的任务。

    从节点崩溃:如果从节点崩溃,已分配的任务将无法完成。

    通信故障:如果主节点和从节点之间无法进行信息交换,从节点无法得知新任务分配给它。

    

    主节点失效时,需要一个备份主节点。当主节点崩溃时,备份主节点接管主节点的角色,进行故障转移,而且需要恢复到旧的主节点崩溃时的状态。恢复时不能依靠已经崩溃的主节点获取这些信息,而是需要从其他地方获取。

    当离节点有效时,但备份主节点却认为主节点已崩溃(如主节点负载过高导致的消息延迟)。那么备份主节点可能接管成为主节点的角色,成为第二个主节点。一些从节点无法与主节点通信,进而与第二个主节点通信,这个场景中的问题,称为脑裂。系统中两个或者多个部分独立工作,导致整体行为不一致。

    需要找出一种方法来处理主节点失效的问题,还需要避免脑裂问题。

    客户端向主节点提交任务,之后主节点交任务派发到有交的从节点中。从节点接收到派发的任务,执行完成这些任务后会向主节点报告执行状态。主节点下一步会将执行结构通知给客户端。

    从节点崩溃后,已下发的任务将无法完成(也有可能已经执行了任务,部分执行,或全部执行,但没有报告结果),并需要重发。首先,主节点需要有能监测从节点崩溃的能力。如果整个运算过程产生了其他作用,还有必要执行某些恢复过程来清除之前的状态。

    从节点与主节点之间的网络故障,可能导致两个从节点执行相同的任务;另外一个重要问题是对锁等同步原语的影响。


    总结:

    主-从框架的需求:

    主节点选举:使得主节点可以给从节点分配任务。

    崩溃检测:主节点要有检测从节点崩溃或失去连接的能力。

    组成员关系管理:主节点必须具有知道哪一个节点可以执行任务的能力

    无数据管理:主节点和从节点必须具有通过某种可靠的方式来保存分配状态和执行状态的能力。







上一篇:前言
下一篇:1.3 分布式协作的难点