我将使用多个Paxos实现一个键值存储。我会有几个节点,其中一个是主节点。此主节点接收更新请求并将值复制到从属节点。
我的问题是如何选择主节点(或领导者)?我还可以使用Paxos算法吗?如果是这样,您是否认为有必要将paxos实现抽象为一个单元,该单元不仅可以由复制单元使用,还可以由领导选举单元使用?
如果我使用id最小的节点成为领导者?如何实施主租约?
感谢您的回答。
答案 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对象包含以下信息:
您可以使用stock paxos实现并将所有必要的逻辑放在网络层中: