背景
该协议是解决分布式数据一致性的问题,使得多个节点上对于某个提案达成一致。
协议交互过程
协议包含三个角色
1 提案发起者 Proposer
2 接受者 Accepter
3 学习者 learner
协议分为两个阶段
阶段一:prepare
1 发起者向接受者发送prepare 请求,带上提案的版本号n,提案的值为v, 这个版本号是全局唯一,可以用时间戳加上节点编号超时。
2 接受者接到请求
A 如果版本号比之前批准的版本号小,则拒绝处理,结束本次批准过程。
B 从已处理的请求中找出上一次批准的版本号和提案的值。如果是首次则返回ok
阶段二: accept
1 提案者接受到接受者返回的预处理响应,主要有以下几种情况
A 回复数量符合多数派,均返回ok,那么说明认可这个提案,接着可以发起accept 指令,提案版本为n,值为v
B 回复数量符合多数派,到返回的数据有不同的版本和值。那么需要统计出超过半数的那个版本和值x, 接着再以版本为n,值为x向接受者发起accept请求。如果这时的返回值符合多数派则提案成功,否则将提案的版本加一,在从prepare 阶段重新开始。
C 回复的数量不符合多数派,那么版本号加一,从prepare阶段重新开始。