我有以下问题:
我有一个分布式系统,在选择领导者时,我需要以一种或另一种方式达成共识。
我有一组players
,它们通过消息相互通信。为了使这些玩家从一个阶段发展到另一个阶段,必须有人跟踪他们的进度。当前,有两种类型的播放器:
leader
---当他收到N-1条done
玩家的N-1
消息时,他负责向所有其他用户广播状态更改
follower
---他负责获取领导者的消息并更新其内部状态机。
每个播放器都从2个管道接收消息:
-Status pipeline
-他收到一个类型数组
[user1,user2,user3...userN]
,其中每个元素都是在线用户。
-Message pipeline
-基于推送的通知。关注者用户将在此处发布准备进行下一步的消息。领导者将跟踪DONE
计数器,并在达到阈值时广播ADVANCE to next step
。
我不知道如何应对领导人的连任。万一领导者断开连接(可以通过超时来实现),其他节点如何确定谁是下一个领导者,并且如果它们是随机选择的,当前领导者是否应该存储在数据库中?我的意思是,他们只交换消息,服务器上没有任何内容,例如全局变量之类的东西。
答案 0 :(得分:0)
您基本上需要实现两阶段提交和领导者选举方案。现在,您可以自己实施它们(两阶段提交已得到充分记录,是的,您需要共享存储),或者,如果您可以灵活地使用分布式开源协调服务,那么Zookeeper将是您的理想之选。最好的选择。在apache zookeeper的页面上查看以下文章,他们讨论您需要的两种食谱。希望这会有所帮助。
https://zookeeper.apache.org/doc/current/recipes.html#sc_recipes_twoPhasedCommit