paxos 算法总结
paxos 共识算法的三个角色
- proposers 提案者
- 向接受者(acceptor) 提交提案和预请求,等待大多数接受者响应。
- 如果大多数接受者(acceptor)响应同意提案, 则将会响应同意的提案值,如果大多数提案者拒绝,则放弃并终止,重新开始流程。
- 如果大多数接受者(acceptor)同意,提案者 (proposer) 之后会发送一个提案编号n 值为 v 的一个commit 消息。
- 如果大多数接受者(acceptor)接受了 commit 消息,则协议轮完成。
-
Acceptors 接受者
- 接受提案并与准备同意的最大的提案编号进行比较。
- 如果提案编号n 较大则接受,否则拒绝。
- 如果后续提交消息的值与先前接受的提案值相同,并且其序列号是商定的最高数字,则接受后续提交消息。
-
Leaner 学习者
- 发现大多数接受者已经接受了提案者的提案。
- 选择一个主 leaner 并将选择的提案值通过网络共享给其他leaner.
paxos 算法的条件
- 接受者必须接受他们得到的第一个提案值。
- 若一个提案值 v 被选中, 那么每一个被选中的较高提案值的提案都有 v 值。
在网络上的通信是异步的,因此可能存在某些接受者没有接受到选择的提案值, 只要不违反上述两个条件就可以。
提案者提出某些限制的条件连通提案值一起发送给接受者(acceptors) 集合。
准备阶段的预请求(prepare phase) 两个主要的请求:
- 保证不接受比n 小的提案, (n 是新的提案编号值)
- 响应接受者已经接受到的小于n 的最大值的提案。
兰伯特表示:
如果提案者(proposers)从大多数接受者(acceptor) 接受到响应吗,那么他就可以发起一个编号为n ,值为 v 的一个提案,
(v 是所有接受者响应编号中最大编号的值, 或者如果响应者报告没有提案的话,是被提案者任意选中的一个值)。
网友评论