我将使用多个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正确性证明的投诉.)
接下来,已经证明每个共识协议都可以永远循环.在您的系统中构建一个超时机制,并在适当的时候进行随机退避.这就是实际工程师如何克服理论上的不可能性.
最后,检查您的吞吐量需求.如果您的吞吐量足够高,您将需要弄清楚如何跨多个共识集群进行分区.那是一个完整的'蜡球'.