算法程序员首页投稿(暂停使用,暂停投稿)

Paxos算法-基于消息传递的一致性算法

2017-10-10  本文已影响134人  Lane0x

1.来源

Paxos算法是莱斯利·兰伯特(Leslie Lamport)于1990年提出的一种基于消息传递的一致性算法。

1.1.故事

在古希腊,有一个叫做Paxos的小岛,岛上通过议会的形式来通过法令,议会中议员通过信使来传递消息。议员和信使都是兼职的,他们随时有可能离开会议厅,并且信使可能会重复的传递消息,也可能丢失消息。因此议会要保证在这种情况下法令仍然能够正确地产生,并且不会出现冲突。

1.2.波折

1990年,The Part-Time Parliament,完成并投稿,无人能懂,被拒
1996年,上述论文被重审,Nancy Lynch公布修改版Revisiting the Paxos Algorithm
1998年,The Part-Time Parliament终于被ACM TOCS接收
2001年,Lamport本人重新讲述原文,发表了论文Paxos Made Simple

2.分布式事务的CAP理论

三者不可兼得

3.常见一致性协议

3.1.限定

4.Paxos算法

4.1.角色

Proposer(选举中对某个职位提出候选人的倡议者)

Acceptor(对倡议者提出的候选人进行投票的参与者)

Learner(类似于没有投票权的群众)

4.2.通信方式

4.3.推导

4.3.1.一个Acceptor

假设只有一个Acceptor(可以有多个Proposer),只要Acceptor接受它收到的第一个提案,则该提案被选定,该提案里的value就是被选定的value。这样就保证只有一个value会被选定。

缺陷:唯一的Acceptor宕机,就彻底崩溃了

4.3.2.多个Acceptor

4.3.2.1.约定

4.3.2.2.推论

4.3.2.2.1.满足P2b

Proposer生成提案之前,应该先去“学习”已经被选定或者可能被选定的value,然后以该value作为自己提出的提案的value。如果没有value被选定,Proposer才可以自己决定value的值。这样才能达成一致。这个学习的阶段是通过一个“Prepare请求”实现的。

4.3.2.2.2.满足P1a

如果Acceptor收到一个编号为M的Prepare请求,在此之前它已经响应过编号大于M的Prepare请求。该Acceptor不可能接受编号为M的提案。因此,该Acceptor可以忽略编号为M的Prepare请求。当然,也可以回复一个error,让Proposer尽早知道自己的提案不会被接受。

4.3.2.3.提案生成

4.3.2.4.接收提案

4.3.2.5.流程

上一篇 下一篇

猜你喜欢

热点阅读