Basic-Paxos算法(可以先看后面的实际例子再看前面的具体介绍部分)
Paxos算法的目的
Paxos算法的目的是为了解决分布式环境下一致性的问题。
多个节点并发操纵数据,如何保证在读写过程中数据的一致性,并且解决方案要能适应分布式环境下的不可靠性(系统如何就一个值达到统一)
Paxos的两个组件
Proposer
提议发起者,处理客户端请求,将客户端的请求发送到集群中,以便决定这个值是否可以被批准。
Acceptor
提议批准者,负责处理接收到的提议,他们的回复就是一次投票。会存储一些状态来决定是否接收一个值
Paxos有两个原则
1)安全原则---保证不能做错的事
a) 针对某个实例的表决只能有一个值被批准,不能出现一个被批准的值被另一个值覆盖的情况;(假设有一个值被多数Acceptor批准了,那么这个值就只能被学习)
b) 每个节点只能学习到已经被批准的值,不能学习没有被批准的值。
2)存活原则---只要有多数服务器存活并且彼此间可以通信,最终都要做到的下列事情:
a)最终会批准某个被提议的值;
b)一个值被批准了,其他服务器最终会学习到这个值。
Paxos具体流程图
第一阶段(prepare)
1).获取一个proposal number, n;
2).提议者向所有节点广播prepare(n)请求;
3).接收者(Acceptors比较善变,如果还没最终认可一个值,它就会不断认同提案号最大的那个方案)比较n和minProposal,如果n>minProposal,表示有更新的提议minProposal=n;如果此时该接受者并没有认可一个最终值,那么认可这个提案,返回OK。如果此时已经有一个accptedValue, 将返回(acceptedProposal,acceptedValue);
4).提议者接收到过半数请求后,如果发现有acceptedValue返回,表示有认可的提议,保存最高acceptedProposal编号的acceptedValue到本地
第二阶段(Accept)
5)广播accept(n,value