paxos协议
Paxos算法是Lamport宗师1998提出的一种基于消息传递的分布式一致性算法,使其获得2013年图灵奖。
1、paxos协议解决了什么问题?
Paxos算法解决的问题正是分布式一致性问题,即一个分布式系统中的各个进程如何就某个值(决议)达成一致
2、paxos协议的实现原理?
Paxos将系统中的角色分为提议者 (Proposer),决策者 (Acceptor),和最终决策学习者 (Learner):
- Proposer: 提出提案 (Proposal)。Proposal信息包括提案编号 (Proposal ID) 和提议的值 (Value)。
- Acceptor:参与决策,回应Proposers的提案。收到Proposal后可以接受提案,若Proposal获得多数Acceptors的接受,则称该Proposal被批准。
- Learner:不参与决策,从Proposers/Acceptors学习最新达成一致的提案(Value)。
sequenceDiagram participant Proposer participant Acceptor participant Learner Proposer -> Acceptor: Prepare(n) Acceptor -> Proposer: Promise(n, v) Proposer -> Learner: Accept(n, v) Learner -> Learner: Ack(n, v) alt Ack(n, v) > 2/3 Learner -> Learner: Stable(n, v) end
Paxos算法通过一个决议分为三个阶段(Learn阶段之前决议已经形成):
- 第一阶段:Prepare阶段。Proposer向Acceptors发出Prepare请求,Acceptors针对收到的Prepare请求进行Promise承诺。
- 第二阶段:Accept阶段。Proposer收到多数Acceptors承诺的Promise后,向Acceptors发出Propose请求,Acceptors针对收到的Propose请求进行Accept处理。
- 第三阶段:Learn阶段。Proposer在收到多数Acceptors的Accept之后,标志着本次Accept成功,决议形成,将形成的决议发送给所有Learners。
两个承诺:
-
不再接受Proposal ID小于等于(注意:这里是<= )当前请求的Prepare请求。
-
不再接受Proposal ID小于(注意:这里是< )当前请求的Propose请求
一个应答:
不违背以前作出的承诺下,回复已经Accept过的提案中Proposal ID最大的那个提案的Value和Proposal ID,没有则返回空值。
3、paxos协议的优缺点?
优点:
- 保证强一致性
缺点:
- 较难理解,完整的paxos实现复杂
- 存在活锁问题
4、paxos协议在开源中的应用
zookeeper
Google的chubby
参考文章:
- https://mp.weixin.qq.com/s/aJoXSQo9-zmukN2RsiZ3_g