PAXOS算法读书笔记

一 概述

paxos 是一种提高分布式系统容错性的一致性算法。

二 算法理解

1 问题描述

假设一组可以提出提案的进程集合,对于一个一致性算法来说,需要满足以下几点:

  1. 在这些提出的提案中,只有一个会被选定
  2. 如果没有提案被提出,就不会有被选定的题案
  3. 如果一个提案被选定后,进程应该可以获取被选定的提案信息。

从整体上说,paxos算法的目标是保证最终会有一个提案被选定,当提案被选定以后,进程最终也能获得被选定的提案。
在该一致性算法中,有三种角色:Proposer,Accepter,Listener。

2 算法描述

在这里,我们使用一个全局性的编号来唯一标识每一个被Accepter批准的提案,因此此处的提案变成了一个由编号与Value组成的集合。为了保证系统的可用性,一般认为系统存在多个Accepter,当多数Accepter批准某个提案,我们就认为该提案的Value被选定。

我们希望在只有一个提案被提出的情况下,仍然可以选出一个提案,这暗示了下面的需求:
P1:一个Accepter必须批准它收到的第一个提案。

我们虽然允许多个提案被选定,但必须保证所有被选定的提案具有相同的value值。因此我们需要以下约定:
P2:如果编号为M0,Value值为V0的提案被选定,那么所有比编号M0更高的,且被选定的提案,它的Value值必须是V0.

我们可以通过以下条件来满足P2:
P2a:如果编号为M0,Value值为V0的提案被选定,那么所有比编号M0更高的,且被Accepter批准的提案,它的Value值必须是V0.

如果需要同时满足条件****P1和P2a,我们需要对P2a进行强化:
P2b:如果编号为M0,Value值为V0的提案被选定,那么之后产生的比编号M0更高的,被提出的提案,它的Value值必须是V0.

还有一个增强条件P2C,在证明里面我们会证明P2b与P2C的关系。
P2C: 对于任意的Mn和Vn,如果提案【Mn,Vn】提出,那么肯定存在一个由半数以上的Accepter组成的集合S,满足以下两个条件中的一个:
1. S中不存在任何批准过编号小于M0提案Accepter
2. 选取S 中批准过的所有编号小于Mn的提案,编号最大的那个提案的value值为Vn

2.1 说明P2b与P2C的关系

论证P2b的成立:
如果某个提案【M0,V0】被选定了,那么任何编号大于M0的提案,其Value值都是V0.

证明:
采用归纳假设法证明P2b,也就是需要证明:
假定编号在M0到M(n-1)之间的提案,其Value值是V0,证明编号为Mn的提案的编号也为V0.

因为某个编号为M0的提案被选定了,那么肯定存在一个由半数以上的Accepter组成的集合C,C中的每个Accepter都批准了该提案。再结合归纳假设,‘编号M0的提案被选定’意味着:
C中的每个Accepter都批准了一个编号在M0到M(n-1)范围内的提案,并且每个编号在M0到M(n-1)范围内被批准的提案,其Value值都是V0。

因为任何包含半数以上Accepter的集合S中至少包含了C中的一个成员,因此如果保持了P2C的不变性,那么编号为Mn的提案的value也为V0。

2.2 接下来采用数学归纳法,由P2c证明P2b

假定提案【M0,V0】被选定,我们需要证明在P2c的前提下,对于所有的被提出的提案【Mn,Vn】,Vn=V0,也就是证明了P2b。
(1)初始条件:如果编号为M0,Value值为V0的提案被选定,当Mn=M0+1时,根据P2c,它符合第二个条件项,所以Vn=V0;
(2)递推:根据归纳假设:‘’假定编号在M0到M(n-1)之间的提案,其Value值是V0‘’ ,肯定存在这样一个子集S,S中的Accepter已经批准了小于Mn的提案,那么编号为Mn的提案的Value值只能是S中小于Mn但为最大编号的那个提案的值,只能是V0.

三 proposer 生成提案

按照P2c的论述,提案生成方式:
(1)Proposer选择一个新的提案编号Mn, 然后向某个Acceptor集合的成员发送请求,要求改集合的Acceptor做出如下响应:

  1. 向Proposer承诺,保证不再批准任何小于Mn的编号的提案
  2. 如果Acceptor已经批准过任何提案,那么其就向Proposer反馈当前Acceptor已经批准过的编号小于Mn但为最大编号的那个提案的值

(2) 如果Proposer收到了来自半数以上的Acceptor的响应结果,那么它就可以产生编号为Mn,Value值为Vn的提案,这里的Vn是所有响应中编号最大的提案的Value的值。当然,如果半数以上的Acceptor没有批准过任何提案,即响应中不包含任何提案,那么此时Vn的值就可以由Proposer任意选择。

猜你喜欢

转载自blog.csdn.net/SECURE2/article/details/81604895