一致性算法中的节点下限

在众多的分布式一致性算法中,经常需要通过节点的数量满足某种规则来保证算法的正确性。比如Paxos算法,依赖一个“多数派(majority)”节点的存活。这类算法的共同目标是:容许尽量多的节点失败但又不影响算法的正确性。

这类问题本质上都抽象为数学上集合之间的逻辑关系,下面我们便从集合的性质入手讨论,为此先引入两个问题:

假设N为一非空结合,n为集合的元素个数,M1,M2,…,Mm为N的m个子集,其元素个数分别为n1,n2,…,nm,则:

  • 求得M1∩M2∩…∩Mn≠Φ的条件
  • 求得M1∩M2∩…∩Mn交集的最小个数

1. 两个元素

为此,我们先从M的两个子集A、B(元素个数分别为a、b)开始,假如A、B有交集则必须a+b>n,若a+b=n,则恰好能将N划分为两个完全划分(不相交的子集),因此大于n一定能保证相交。此时:a+b-n即为交集的最小个数,原因是不妨设(a-i)+b=n,(a-i)和b恰为N的两个完全划分,则i即为A与B重合的元素个数,i=a+b-n。综上:

  • A∩B≠Φ的条件:a+b>n
  • A∩B交集的最小个数:i=a+b-n

2. 三个元素

三个集合有交集的条件是什么?假如I=A∩B,则第三个集合只要与I有交集即可,这就把三个集合的问题转化为2个集合,因为两个集合的最小交集为a+b-n,因此,C的元素个数c必须满足c+(a+b-n)>n即a+b+c>2n才能保证有交集。同理,综上:

  • A∩B∩C≠Φ的条件:a+b+c>2n
  • A∩B∩C交集的最小个数:i=a+b+c-2n

3.归纳证明

通过:
两个集合的交集条件:a+b>n
两个集合的交集个数:a+b-n
三个集合的交集条件:a+b+c>2n
三个集合的交集个数:a+b+c-2n

推测:
m个集合的交集条件:n1+n2+…+nm>(m-1)*n
m个集合的交集和数:n1+n2+…+nm-(m-1)*n

不妨令t个集合时上述条件成立:
t个集合的交集条件:n1+n2+…+nt>(t-1)*n
t个集合的交集和数:n1+n2+…+nt-(t-1)*n

当t+1个集合与前面t个集合有交集时,必有n1+n2+…+nt-(t-1)*n+nt+1>n,整理即得:
t+1个集合的交集条件:n1+n2+…+nt+nt+1>t*n
t+1个集合的交集和数:n1+n2+…+nt+nt+1-t*n

特别的,当m个集合元素数相同时,比如都为a,则相交条件为:ma>(m-1)n=>a>(1-1/m)n,只要m稍微大点,a与n会非常接近。

4. Paxos算法中的Quorum

在Paxos算法中能保证算法正确运行的节点数为Quorum,Qc、Qf分别为Classic Paxos与Fast Paxos的Quorum。

1) 在Classic Paxos算法中,只要两个子集有交集即可,也即m=2,则a>n/2 <=> |Qc| ≥[n/2]+1

2) 在Fast Paxos算法中,引入了三个集合:

  • 一个classic round的Quorum Qc
  • 两个fast round的Quorum Qf1,Qf2

要求:

Qc∩Qc≠Φ ——— (a)
Qc∩Qf∩Qf≠Φ —– (b)
即三个集合有交集。但在Fast Paxos中描述问题的形式稍微有点改变:

F是Classic Round允许的最大失败数,E是Fast Round允许的最大失败数,E<=F,则上面式子等价于:
(a): m=2, N-F>N/2 => N>2F
(b): m=3, (N-F)+(N-E)+(N-E)>2N => N>2E+F, 又E<=F, 故N>2E+F>3E

如果E取上限E=F,则N>3F <=> F< N/3 <=> F≤⌈N/3⌉ -1,因此:
|Qc| = |Qf| ≥ N-⌈N/3⌉+1 ≥ ⌊2N/3⌋+1 ——— (1)

如果F取得上限,由(a)式的N>2F <=> F≤⌈N/2⌉ -1,F=⌈N/2⌉ -1为上限,根据N>2E+F <=> N>2E+⌈N/2⌉ -1 <=> E≤⌈N/4⌉,因此:
|Qc| ≥ N-(⌈N/2⌉-1) = ⌈N/2⌉+1
|Qf| ≥ N-⌈N/4⌉ ≥ ⌈3N/4⌉ ——— (2)

上述(1)、(2)都为可行性结果,统称为保证一致性算法的节点下限。
但在实际中因为(1)保证|Qc| = |Qf |,编程更简单、清晰,所以使用得更多。

根据这个结论,会得出Classic Paxos与Fast Paxos所需的最小节点数:
Classic Paxos:N > 2F ≥ 2F+1 ≥ 3
Fast Paxos:N > 2E+F ≥ 3E+1 ≥ 4
即在允许一个节点失败的情况下,Classic Paxos至少需要3个节点,而Fast Paxos则需要4个。

很明显,通过集合工具能极大地简化一致性算法的共性问题的研究。

5. 参考资料

  • 《On the Coordinator’s Rule for Fast Paxos》
  • 《Fast Paxos》

你可能感兴趣的:(D_分布式,从零开始的分布式)