分布式共识的复杂性主要来源于网络的不可靠与请求的可并发两大因素
Basic Paxos
Paxos算法将分布式系统中的节点分为三类。
提案节点:称为Proposer,提出对某个值进行设置操作的节点,设置值这个行为就被称为提案(Proposal),值一旦设置成功,就是不会丢失也不可变的。注意,Paxos是典型的基于操作转移模型而非状态转移模型来设计的算法,不要把这里的“设置值”类比成程序中变量赋值操作,而应该类比成日志记录操作,在后面介绍的Raft算法中就直接把“提案”叫作“日志”了。
决策节点:称为Acceptor,是应答提案的节点,决定该提案是否可被投票、是否可被接受。提案一旦得到过半数决策节点的接受,即称该提案被批准(Accept)。提案被批准即意味着该值不能被更改,也不会丢失,且最终所有节点都会接受它。
记录节点:称为Learner,不参与提案,也不参与决策,只是单纯地从提案、决策节点中学习已经达成共识的提案,譬如少数派节点从网络分区中恢复时,将会进入这种状态。