PAXOS算法理解

最近在进行实时数据查询Server的方案设计过程中,遇到了数据一致性问题,googgle到paxos算法,对其进行学习,整理部分心得如下,如果理解有错误请各位不吝指正。
 

Paxos算法主要目的是解决多名参与者就一个问题达成统一的意见。

角色解释:

1.      proposer:为了对一个问题达成一致意见,不断提出更高编号的valuevalue选择是有约束的,Lamport主要是在加强这个约束。)

2.      acceptor:对不同编号的proposal进行accepted,对小于目前accepted的最大编号的请求返回不予接受的响应,并带回目前针对这个问题的最高编号proposalvalue

3.      learner:学习最终通过的决议。

4.   关键字:proposal

       Proposal翻译过来为提案,每个proposer需要提出提案,没有提案何来决议。

 

Lamport经过不断加强几个约束来达到这个目的。详细解释不多说了,直接分析其为了达到一致意见描述的约束:

 

P1. An acceptor must accept the first proposal that it receives.

       在理解这句话的时候自己纠结了很久,这条原则并不是什么约束条件,而是前提条件acceptor必须accept他接收到的第一个proposal,不接受proposal如何达成一致意见。

  

如果每个acceptoraccept了不同的提案,那是不可能达到一致意见的,而不能达成多数派,于是乎,Lamport又引入一个概念:加了编号的proposal。目的就是解决该问题。

 

为了达成一个决议(比如:在proposerAproposerBproposerC中选举leaderproposerA可以提出提案proposal(1)proposal(2),带了编号以后这两个提案不再是一个提案了,是有区别的提案,假如proposal(1):选举ALEADERproposal(2):选举ALEADER,即使这两个提案无论从内容还是为了达到的决议(选举一个leader)都是完全一样的,也会因为编号的不同,被区分为不同的提案。(补充一句:也就是说,为了就一个问题达成一致决议,每个proposer会提出很多不同编号的proposal,其目的就是为了满足P1前提条件,因为proposal(2)proposal(1)不同,所以acceptor即使接受了proposal1),也可以继续接受proposal(2)

 

P2. If a proposal with value v is chosen, then every higher-numbered proposal that is chosen has value v.

       这里才是真正的约束条件了,我们先理解chosen(很关键)

       引用原文:a value is chosen when a single proposal with that value has been accepted by

a majority of the acceptors. In that case, we say that the proposal (as well as its value) has been chosen.

       这里面有几个重要部分:

a single proposal

been accepted by a majority of the acceptors

这里面的value v 可以认为是一个为了达到一个决议而提出的不同编号proposal的一个全局概念。如果针对同一个问题(这个概念我已经提了好几遍了)一个带有编号nproposer 提出的带有valueproposalchosen,那更大编号的被chosen提案的value必须也是这个value

 

详细解释如下:如果Proposal(1)Proposal(2) Proposal(3),Proposal(4),这些proposal是为了达到同一目的而进行的提案,那他们中的包含的v,就是上面约束中这个v。例如:针对选择leader这一问题的提案假如有一个proposal(2),其value是:选择A机为leader,已经被多数acceptor accepted了,那么以后其他proposer提出的提案(当然编号会增大)如果被chosen,必须也是同样是选择A机为leader,满足这个约束,当然,一定,必然可以带来最后统一的决议。

 

这个约束是针对acceptor角色共同行为的(多数派达成统一意见),但实现起来很复杂,很麻烦(几乎无法实现)

 

 

好,接下来我们加强约束,直到可以容易实现:

P2a. If a proposal with value v is chosen, then every higher-numbered proposal accepted by any acceptor has value v.      

如果针对同一个问题(这个概念我已经提了好几遍了)一个带有编号nproposer 提出的带有valueproposal被某个acceptor进行accepted,那其value必须也是这个value

满足这个约束,当然,一定,必然可以带来最后统一的决议(因为其对P2进行了加强)

这个约束是针对acceptor角色单个行为的,但实现起来很复杂,很麻烦(几乎无法实现)

 

 

于是,继续加强约束:

 

P2b . If a proposal with value v is chosen, then every higher-numbered proposal issued by any proposer has value v.

如果针对同一个问题(这个概念我已经提了好几遍了)一个带有编号nproposer 提出的带有valueproposalchosen,那如果proposer提出更大编号的提案,其value必须也是这个value

这个约束是针对proposer角色单个行为的(多数派达成统一意见),但实现起来很复杂,很麻烦(几乎无法实现)

 

 

at last 最终:一个更加加强的约束被提出来,并且容易实现:

 

P2c. For any v and n, if a proposal with value v and number n is issued,then there is a set S consisting of a majority of acceptors such that either (a) no acceptor in S has accepted any proposal numbered less than n, or (b) v is the value of the highest-numbered proposal among all proposals numbered less than n accepted by the acceptors in S.

 

如果一个proposer需要提出valuev编号是n的提案(目的就是指导如何提出一个提案,其编号和value该怎么选择),那么必须满足两个约束:

1.              存在一个多数派,这个多数派中的acceptor从来没有accepted任何小于n编号的proposal(针对同一个问题)

2.              存在一个多数派,这个多数派中的acceptor,其本身accepted的小于编号n的最高编号proposalvalue就等于v

 

满足这个约束也就满足了p2b,但是其利用数学归纳法的证明过程,sorry,实在没看懂,感叹自己数学水平严重后退。

 

       也就是说就一个问题在proposal提出一个proposal之前,需要有一个prepare的过程,判断acceptor在针对这个问题的proposalaccepted的最大的编号是什么,通过的value又是什么,用以确定自己提出的proposal编号和value。

你可能感兴趣的:(PAXOS算法理解)