选举分布式系统的新领导者

时间:2018-08-22 21:04:12

标签: message-queue distributed-system consensus

我有以下问题:

我有一个分布式系统,在选择领导者时,我需要以一种或另一种方式达成共识。

我有一组players,它们通过消息相互通信。为了使这些玩家从一个阶段发展到另一个阶段,必须有人跟踪他们的进度。当前,有两种类型的播放器:
leader ---当他收到N-1条done玩家的N-1消息时,他负责向所有其他用户广播状态更改
follower ---他负责获取领导者的消息并更新其内部状态机。

每个播放器都从2个管道接收消息:
-Status pipeline-他收到一个类型数组 [user1,user2,user3...userN],其中每个元素都是在线用户。
-Message pipeline-基于推送的通知。关注者用户将在此处发布准备进行下一步的消息。领导者将跟踪DONE计数器,并在达到阈值时广播ADVANCE to next step

为了更好的主意,我附上了一张照片:

enter image description here

我不知道如何应对领导人的连任。万一领导者断开连接(可以通过超时来实现),其他节点如何确定谁是下一个领导者,并且如果它们是随机选择的,当前领导者是否应该存储在数据库中?我的意思是,他们只交换消息,服务器上没有任何内容,例如全局变量之类的东西。

1 个答案:

答案 0 :(得分:0)

您基本上需要实现两阶段提交和领导者选举方案。现在,您可以自己实施它们(两阶段提交已得到充分记录,是的,您需要共享存储),或者,如果您可以灵活地使用分布式开源协调服务,那么Zookeeper将是您的理想之选。最好的选择。在apache zookeeper的页面上查看以下文章,他们讨论您需要的两种食谱。希望这会有所帮助。

https://zookeeper.apache.org/doc/current/recipes.html#sc_recipes_twoPhasedCommit