如果我们正在运行多个paxos,那么节点可能会看到:
Propose(N)
Accept!(N,Vn)
Accept!(N+1,Vm)
Accept!(N+4,Vo) // huh? where is +2, +3?
Accept!(N+5,Vp)
这可能是因为:
在分布式有限状态机上的一般操作中,不会通勤,节点应按顺序应用所有操作。这意味着节点需要能够区分这两种情况。如果提案失败,则节点没有问题。如果它丢失了消息,则表明节点应该等到它们出现,否则尝试恢复丢失的数据(例如,请求快照重新初始化和捕获)。
有哪些选项或策略可以解决这个问题或策略?它们会产生什么开销?
这个问题的灵感来自In Paxos, can an Acceptor accept a different value after it has already accepted one?
答案 0 :(得分:1)
我可以想到两种方法来解决这个问题。
最简单的方法是让缺少+2和+3的节点返回并尝试在这些插槽中提出无操作。如果那里有决策,节点将在准备回合中学习数据。否则,将决定无操作。
另一种方法是进行带外重新学习过程。无论如何,这可能是必要的:如果节点在其他节点之后加入系统,它如何赶上?
或者您可以使用两者的组合。领导者可以为其历史上的任何漏洞提出无操作,其他人可以使用重新学习过程。这就是我的paxos系统的工作方式。