Paxos简述
paxos协议可能难以理解,但是并不复杂,简单来说主要基于以下几个原则:
- 少数服从多数
- 抢占式访问
- 后者认同前者
基本工作流程
关键词解释
- 角色:Porposer -> 提案发起者,Acceptor -> 提案批准者
- 序号:每个提案都有唯一序号,序号按时间顺序生成,Acceptor只会接受最新序号的也就是时间最新的提案请求
流程
prepare阶段:Proposer使用序号s向过半数的Accepor发送prepare请求,Acceptor收到请求后检查序号是否符合要求,一旦符合要求Acceptor则会响应请求表示通过。如果之前没有通过提案,响应中不包含任何提案信息,如果之前通过某些提案,则相应中包含最大序号的提案。
accept阶段:如果Proposer收到了半数以上Acceptor的响应则发出accept请求,请求内容包含之前prepare请求的序号,以及本次提案的值,如果prepare阶段半数以上Acceptor响应的提案全部为空,则本次accept请求的值为Proposer要提交提案的值,如果prepare阶段过半数响应中有非空提案,则本次accept请求的值为提案集合中序号最大提案的值。Acceptor收到请求后仍然只需要检查序号是否符合要求,只要序号符号要求就会通过提案响应请求。
commit阶段:如果Proposer收到了来自半数以上Acceptor的accept请求响应,则发出commit请求给每个Acceptor,通知所有Acceptor提交之前通过的提案。
官方阐述