我有以下问题:
我有一个分布式系统,在选择领导者时,我需要以一种或另一种方式达成共识。
我有一组players
通过消息相互交流。为了让这些玩家从一个阶段进步到另一个阶段,必须有人跟踪他们的进步。目前,有两种类型的玩家:
leader
---当他收到 N-1done
条消息(针对N-1
玩家)时,他负责向所有其他用户广播状态变化
follower
---他负责获取领导者的消息并更新他的内部状态机。
每个玩家从 2 个管道接收消息:
- Status pipeline
- 他接收一个类型数组,
[user1,user2,user3...userN]
其中每个元素是在线用户。
- -Message pipeline
基于推送的通知。追随者用户将在此处发布他们已准备好进行下一步的消息。领导者将跟踪DONE
计数器,当达到阈值时,他将广播ADVANCE to next step
。
我不知道如何处理领导人连任。如果领导者断开连接(这可以通过超时实现),其他节点如何决定谁是下一个领导者,如果他们随机选择,当前领导者是否应该存储在数据库中?我的意思是他们只交换消息,服务器上没有任何东西,比如全局变量或其他东西。