莱斯利-兰伯特 于1990年提出的一种基于消息传递的一致性算法。
Basic-Paxos
角色介绍
- Client 请求发起者,系统外部角色
- Proposer 接收Client请求,向集群提出提议。起到冲突调节的作用
- Acceptor 提出议票和接受者,只有在行程法定人数(Quorum)时,提议才会最终被接受。(仲裁系统)
- Learner 提议接受者,备份,对集群一致性没有影响(不参与投票)
步骤和阶段
- 1、Prepare
Proposer提出一个提案,编号为N,此N大于这个Proposer之前提出提案编号。请求acceptor的quorum接收
- 2、Promise
如果N大于此acceptor之前接收的任何提案编号则接受,否则拒绝
- 3、Accept
如果达到了多数派,proposer会发出acceptor请求,此请求包含提案编号N,以及内容
- 4、Accepted
如果此acceptor在此期间没有收到任何大于N的提案,则接受此提案的内容,否则忽略
流程图
- 部分节点失效,还是可以达成共识
- Proposer失败,
潜在问题--活锁
实现难,效率低(2轮RPC)