Paxos算法

本文转载自:Paxos算法

一、Paxos算法的描述

通过一个决议分为两个阶段:

1、prepare阶段:

(1) proposer选择一个提案编号n并将prepare请求发送给acceptors中的一个多数派;
(2) acceptor收到prepare消息后,如果提案的编号大于它已经回复的所有prepare消息,则acceptor将自己上次接受的提案回复给proposer,并承诺不再回复小于n的提案;

2、批准阶段:

(1) 当一个proposer收到了多数acceptors对prepare的回复后,就进入批准阶段。它要向回复prepare请求的acceptors发送accept请求,包括编号n和根据P2c决定的value(如果根据P2c没有已经接受的value,那么它可以自由决定value)。
(2) 在不违背自己向其他proposer的承诺的前提下,acceptor收到accept请求后即接受这个请求。

这个过程在任何时候中断都可以保证正确性。例如如果一个proposer发现已经有其他proposers提出了编号更高的提案,则有必要中断这个过程。因此为了优化,在上述prepare过程中,如果一个acceptor发现存在一个更高编号的提案,则需要通知proposer,提醒其中断这次提案。

二、Paxos算法的实例描述

有A1, A2, A3, A4, A5 5位议员,就税率问题进行决议。议员A1决定将税率定为10%,因此它向所有人发出一个草案。这个草案的内容是:

现有的税率是什么?如果没有决定,则建议将其定为10%.时间:本届议会第3年3月15日;提案者:A1

在最简单的情况下,没有人与其竞争;信息能及时顺利地传达到其它议员处。
于是, A2-A5回应:

我已收到你的提案,等待最终批准

而A1在收到2份回复后就发布最终决议:

税率已定为10%,新的提案不得再讨论本问题。

这实际上退化为二阶段提交协议。

现在我们假设在A1提出提案的同时, A5决定将税率定为20%:

现有的税率是什么?如果没有决定,则建议将其定为20%.时间:本届议会第3年3月15日;提案者:A5

草案要通过侍从送到其它议员的案头。 A1的草案将由4位侍从送到A2-A5那里。现在,负责A2和A3的侍从将草案顺利送达,负责A4和A5的侍从则不上班. A5的草案则顺利的送至A2和A3手中。

现在, A1, A2, A3收到了A1的提案; A2, A3, A5收到了A5的提案。按照协议, A1, A2, A4, A5将接受他们收到的提案,侍从将拿着

我已收到你的提案,等待最终批准

的回复回到提案者那里。而A3的行为将决定批准哪一个。

情况一:

假设A1的提案先送到A3处,而A5的侍从决定放假一段时间。于是A3接受并派出了侍从. A1等到了两位侍从,加上它自己已经构成一个多数派,于是税率10%将成为决议. A1派出侍从将决议送到所有议员处:

税率已定为10%,新的提案不得再讨论本问题。

A3在很久以后收到了来自A5的提案。由于税率问题已经讨论完毕,他决定不再理会。但是他要抱怨一句:

税率已在之前的投票中定为10%,你不要再来烦我!

这个回复对A5可能有帮助,因为A5可能因为某种原因很久无法与与外界联系了。当然更可能对A5没有任何作用,因为A5可能已经从A1处获得了刚才的决议。

情况二:

依然假设A1的提案先送到A3处,但是这次A5的侍从不是放假了,只是中途耽搁了一会。这次, A3依然会将”接受”回复给A1.但是在决议成型之前它又收到了A5的提案。这时协议有两种处理方式:

1、如果A5的提案更早,按照传统应该由较早的提案者主持投票。现在看来两份提案的时间一样(本届议会第3年3月15日)。但是A5是个惹不起的大人物。于是A3回复:

我已收到您的提案,等待最终批准,但是您之前有人提出将税率定为10%,请明察。

于是, A1和A5都收到了足够的回复。这时关于税率问题就有两个提案在同时进行。但是A5知道之前有人提出税率为10%.于是A1和A5都会向全体议员广播:

税率已定为10%,新的提案不得再讨论本问题。

一致性得到了保证。

2.、A5是个无足轻重的小人物。这时A3不再理会他, A1不久后就会广播税率定为10%.

情况三:

在这个情况中,我们将看见,根据提案的时间及提案者的权势决定是否应答是有意义的。在这里,时间和提案者的权势就构成了给提案编号的依据。这样的编号符合”任何两个提案之间构成偏序”的要求。
A1和A5同样提出上述提案,这时A1可以正常联系A2和A3; A5也可以正常联系这两个人。这次A2先收到A1的提案; A3则先收到A5的提案. A5更有权势。

在这种情况下,已经回答A1的A2发现有比A1更有权势的A5提出了税率20%的新提案,于是回复A5说:

我已收到您的提案,等待最终批准。

而回复了A5的A3发现新的提案者A1是个小人物,不予理会。
A1没有达到多数,A5达到了,于是A5将主持投票,决议的内容是A5提出的税率20%。

如果A3决定平等地对待每一位议员,对A1做出”你之前有人提出将税率定为20%”的回复,则将造成混乱。这种情况下A1和A5都将试图主持投票,但是这次两份提案的内容不同。

这种情况下, A3若对A1进行回复,只能说:

有更大的人物关注此事,请等待他做出决定。

另外,在这种情况下, A4与外界失去了联系。等到他恢复联系,并需要得知税率情况时,他(在最简单的协议中)将提出一个提案:

现有的税率是什么?如果没有决定,则建议将其定为15%.时间:本届议会第3年4月1日;提案者:A4

这时,(在最简单的协议中)其他议员将会回复:

税率已在之前的投票中定为20%,你不要再来烦我!

本文转载自:Paxos算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值