【问题标题】:How does one handled skipped event numbers with Paxos?如何使用 Paxos 处理跳过的事件编号?
【发布时间】:2014-12-17 12:49:44
【问题描述】:

如果我们正在运行 multi-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?

【问题讨论】:

    标签: paxos


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 第一个选项过于昂贵,因为提出 noop 会强制领导者进行故障转移。这将在 multipaxos 期间破坏稳定的领导者并强制磁盘刷新。如果这只是一个节点丢包的情况,那么您可能真的不希望该节点将自己作为领导者,因为它可能会在该主机上发生扩展丢包,从而导致集群完全不稳定。如果您刚刚进行了领导者选举,因此没有丢失值,您将强制进行第二次领导者选举。最好在稳定流中加入一些错误检查。
    • 第二个选项你确实想要一个越界追赶方法,但如果你有一种检测差距的入站方法,那么你会很快知道追赶。您想赶上最新的人,而不是缺少价值观的人。这既建议了一种带内方式来了解您是否有差距,也可以提供一种可靠的方式来找到最新的人,以便您可以在带外与他们联系以赶上。赶上意味着知道您错过的操作的有序列表。根据不清楚谁知道在多次关闭故障转移之后立即知道缺失值列表的问题。
    • @simbo1905 第一个不应该导致领导者故障转移,因为在洞之后显然有一个领导者被选举出来。
    • 顺便说一下,这些正是我在实现中使用的,已经被许多生产系统使用。
    • 哦,是的,我认为这是一个安全的民意调查,因为该提案小于已接受的提案,因此没有领导者选举,nack 将发送值。节点只需要保留最高的未提交值,因此这表明您保留一个已提交值的缓冲区仅用于此查询目的?谢谢
    猜你喜欢
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    相关资源
    最近更新 更多