基于paxos的复制键值存储的领导者选举

时间:2014-03-25 02:50:31

标签: distributed-system key-value-store paxos

我将使用多个Paxos实现一个键值存储。我会有几个节点,其中一个是主节点。此主节点接收更新请求并将值复制到从属节点。

我的问题是如何选择主节点(或领导者)?我还可以使用Paxos算法吗?如果是这样,您是否认为有必要将paxos实现抽象为一个单元,该单元不仅可以由复制单元使用,还可以由领导选举单元使用?

如果我使用id最小的节点成为领导者?如何实施主租约?

感谢您的回答。

2 个答案:

答案 0 :(得分:8)

在我提出实际问题之前,我建议对于类似paxos的系统,你不要把它看成是主奴关系,而是平等关系。基本的Paxos甚至没有领导者的概念。多领域作为绩效优化的领导者,选择该领导者是协议的一部分。

Multi-Paxos归结为下面的Paxos:有一个准备阶段和一个接受阶段。 Multi-Paxos的见解是,一旦一个节点赢得了接受轮次,它同时赢得了领导者选举,之后该领导者不需要准备阶段,直到它检测到另一个节点已经接管了领导。


现在有一些实用的建议。我有多年从事多种paxos,多paxos和其他共识系统的经验。

我首先建议实施Paxos或Multi-paxos。在保持正确性的同时优化Paxos系统是非常困难的 - 特别是如果您有这些类型的问题。我宁愿考虑实施Raft协议

正如本文所述,Raft协议可以比Multi-Paxos具有更好的吞吐量。 Raft的作者(和其他人)认为Raft更容易理解和实施。

您也可以考虑使用其中一个开源Raft系统。我没有任何经验告诉你维护是多么容易。不过,我听说过维护Zookeeper实例的痛苦。 (我也听过有关Zookeeper的正确性证据的投诉。)

接下来,已经证明每个共识协议都可以永久循环。在您的系统中构建一个超时机制,并在适当的时候进行随机退避。这就是实际工程师如何克服理论上的不可能性。

最后,检查您的吞吐量需求。如果您的吞吐量足够高,您将需要弄清楚如何跨多个共识集群进行分区。这是一个完整的蜡球。

答案 1 :(得分:0)

您可以使用并行多paxos实例来解决此问题,以管理群集的配置。考虑通过多个paxos更新的复制JSON对象包含以下信息:

  • 序列号
  • 现任领导者ID
  • 当前领导者的租约到期时间戳
  • 同伴ID列表

您可以使用stock paxos实现并将所有必要的逻辑放在网络层中:

  • 删除所有准备和接受从领导者以外的任何节点收到的消息,直到租约到期为止。
  • 在租约到期前不久,主动提升序列号和领队的租约时间。