繁体   English   中英

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

[英]Leader election for paxos-based replicated key value store

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

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

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

谢谢你的回答。

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

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


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

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

从两篇协议中可以看出,Raft协议可以比Multi-Paxos具有更好的吞吐量。 Raft的作者(和其他人)认为Raft更容易理解和实施。

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM