Paxos and Raft ABC

Paxos

Paxos是全部分布式环境中关于某个值达成一致的协议,Paxos 一个节点同时包括提议者和接受者。顾名思义:提议者是发起投票;接受者接受投票请求,根据投票请求和自身状态进行响应的回复。为了防止异常丢状态,Paxos在内部持久化三个参数:当前已接受的提案号;当前达成共识的value的值;当前最小的提案号。按照两阶段模式进行操做:分布式

阶段一:Prepare(n) 请求 阻塞新来的老的提案
为何能够这样?由于 分布式日志进来的时候,Acceptor 会把日志里带的请求里的提案号n和本身的最小提案号进行比较。若是前者大,会更新本身的最小的提案号,向提案者响应赞成请求。
这样就保证了提案号小的IO请求永远不会获得Acceptor的响应,因为Propasl 的提案号都是递增的,保证了前者服从后者的原则。ide

提案者接受到了上面的请求以后,若是赞成的数量达成了多数,接着广播Accept(n,val) 到全部Acceptor.日志

阶段二:Accept(n,val)
Acceptor 在这个阶段,会把本身的最小提案号和请求中的提案号n 比较一次。原则同上面阶段一,赞成以后:除了更新本身的最小提案号为n以外,还用n 更新本身的已接受提案号,向提议者返回本身当前的最小的提案号。若是不一样意,也向提议者返回本身当前的最小的提案号,拒绝请求。it

若是提案者收到任何关于Accept(n,val)的拒绝响应,就须要从新发起投票(可能会更新本身的提案号)。 不然,表示val 广播到分布式系统中去,而且被你们接受。class

相关文章
相关标签/搜索