如何使用Paxos处理跳过的事件编号?

时间:2014-10-22 06:04:47

标签: paxos

如果我们正在运行多个paxos,那么节点可能会看到:

Propose(N)
Accept!(N,Vn)
Accept!(N+1,Vm)
Accept!(N+4,Vo) // huh? where is +2, +3?
Accept!(N+5,Vp)

这可能是因为:

  • 有一个稳定的领导者,但该节点本地的网络丢失了,否则延迟了+2和+3。
  • 有一次停电,有两次尝试提出+2和+3失败的提案

在分布式有限状态机上的一般操作中,不会通勤,节点应按顺序应用所有操作。这意味着节点需要能够区分这两种情况。如果提案失败,则节点没有问题。如果它丢失了消息,则表明节点应该等到它们出现,否则尝试恢复丢失的数据(例如,请求快照重新初始化和捕获)。

有哪些选项或策略可以解决这个问题或策略?它们会产生什么开销?

这个问题的灵感来自In Paxos, can an Acceptor accept a different value after it has already accepted one?

1 个答案:

答案 0 :(得分:1)

我可以想到两种方法来解决这个问题。

最简单的方法是让缺少+2和+3的节点返回并尝试在这些插槽中提出无操作。如果那里有决策,节点将在准备回合中学习数据。否则,将决定无操作。

另一种方法是进行带外重新学习过程。无论如何,这可能是必要的:如果节点在其他节点之后加入系统,它如何赶上?

或者您可以使用两者的组合。领导者可以为其历史上的任何漏洞提出无操作,其他人可以使用重新学习过程。这就是我的paxos系统的工作方式。