导读
译《The Part-Time Parliament》——终于读懂了Paxos协议!
究竟是什么?
简单说,paxos是为了解决强一致性的算法
算法中,大概有3种角色(一人可以作为多个角色)
主要3种角色
-
proposer:提议发起者
proposer可以发起proposal(提议) proposal(提议)包括: 1.Proposal Value:提议的值; 2.Proposal Number:提议编号,要求提议编号不能冲突;
proposer:提议发起者,主要有两种行为: 1.向acceptor发prepare请求 2.向acceptor发accept请求
-
acceptor:提议接受者,主要行为:
根据协议规则,对(proposer:提议发起者)的请求作出应答;
-
learner:提议学习者,主要行为:
可以根据(acceptor:提议接受者)的状态,学习最终被确定的值。
主要流程
1.[prepare]阶段
进行[prepare]请求
(proposer:提议发起者)
选择一个proposalValue(提议编号)n,
向所有的acceptor广播prepare(n)请求。
进行[promised]响应
(acceptor:提议接受者)
若proposalValue(提议编号)n比之前阶段接收的prepare(请求)都要大,
{
promised(承诺)之后的[accept]阶段,proposalValue(提议编号)只能>=n
promised(承诺)之后新的[prepare]阶段,proposalValue(提议编号)只能>n
}
并返回上一次的[accept]阶段中,
proposalValue(提议编号)m < n 且
m为上一次[accept]阶段中最大proposalValue(提议编号)的proposal(提议)
2.[accept]阶段
进行[propose]请求
(proposer:提议发起者)
得到了多数acceptor的承诺后,如果没有发现有一个acceptor接受过一个值
那么向所有的acceptor发起自己的值和提议编号n,否则,
从所有接受过的值中选择对应的提议编号最大的,作为提议的值,提议编号仍然为n。
进行[accept]响应
(acceptor:提议接受者)
接收到提议后,如果该提议编号不违反自己做过的承诺,则接受该提议。