一致性算法中的节点下限(转)

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

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

假设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,为N的两个完全划分,则为i即为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-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+1个集合的交集条件:n1+n2+...+nt+nt+1>t*n
  • t+1个集合的交集和数:n1+n2+...+nt+nt+1-t*n

当t+1个集合与前面t个集合有交集时,必有

n1+n2+...+nt-t*n+nt+1-n>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

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

在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-F>N/2 =>N>2F
  • (b),即m=3,N-F+N-E+N-E>2N =>N>2E+F>3E

如果E取上限E=F,则N>3F<=>F<N/3 <=> F≤⌈N/3⌉ -1,因此:(Qc、Qf 分别为Classic Round与Fast Round的Quorum)

|Qc| = |Qf | ≥ N − ⌈N/3⌉ + 1 ≥ ⌊2N/3⌋ + 1-----------(1)

如果F取得上限N>2F <=> F≤⌈N/2⌉ -1,根据N>2E+F <=> N >2E+⌈N/2⌉ -1 <=> 2E ≤N-⌈N/2⌉ <=> 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个。

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

转自:http://blog.csdn.net/chen77716/article/details/7295728

5. 参考资料

    • On the Coordinator’s Rule for Fast Paxos
    • Fast Paxos
时间: 2024-10-22 04:35:36

一致性算法中的节点下限(转)的相关文章

Raft一致性算法

转自 http://blog.csdn.net/cszhouwei/article/details/38374603 Why Not Paxos Paxos算法是莱斯利·兰伯特(LeslieLamport,就是 LaTeX 中的”La”,此人现在在微软研究院)于1990年提出的一种基于消息传递的一致性算法.由于算法难以理解起初并没有引起人们的重视,使Lamport在八年后1998年重新发表到ACM Transactions on Computer Systems上(The Part-TimePa

分布式一致性算法:Raft 算法

Raft 算法是可以用来替代 Paxos 算法的分布式一致性算法,而且 raft 算法比 Paxos 算法更易懂且更容易实现.本文对 raft 论文进行翻译,希望能有助于读者更方便地理解 raft 的思想.如果对 Paxos 算法感兴趣,可以看我的另一篇文章:分布式系列文章--Paxos算法原理与推导 摘要Raft 是用来管理复制日志(replicated log)的一致性协议.它跟 multi-Paxos 作用相同,效率也相当,但是它的组织结构跟 Paxos 不同.这使得 Raft 比 Pax

分布式中的一致性算法之Raft算法

在实际应用中,对于分布式系统而言,遇到一致性问题,业界产生了许多经典的分布式一致性算法,以前项目中常的分布式一致性算法是2PC和Paxos,对于Raft算法只知其名,从未仔细理解过,直到今天和同事聊天时,突然被问到,Paxos与Raft的区别在哪?为什么我们项目中应用Paxos产生这么多问题,当初是否考虑过采用Raft算法?这一问,我的确没有回答上来,因为我从来没有思考过Raft在分布式数据库存储系统应该怎样应用.Raft算法虽然是在2013年才发表的,但目前应用非常广泛,甚至成为分布式一致性算

C++算法之 求二叉树中叶子节点的个数 与 判断两棵二叉树是否结构相同

//叶子节点的个数 /* (1)如果二叉树为空,返回0 (2)如果二叉树不为空且左右子树为空,返回1 (3)如果二叉树不为空,且左右子树不同时为空,返回左子树中叶子节点个数加上右子树中叶子节点个数 */ int GetLeafNodeNum(BTree* root) { if(root == NULL) return 0; if(root->m_pLeft == NULL && root->m_pRight == NULL) return 1; int LeafNumOfLef

一致性算法--Paxos

分布式一致性算法--Paxos Paxos算法是莱斯利·兰伯特(Leslie Lamport)1990年提出的一种基于消息传递的一致性算法.Paxos算法解决的问题是一个分布式系统如何就某个值(决议)达成一致.在工程实践意义上来说,就是可以通过Paxos实现多副本一致性,分布式锁,名字管理,序列号分配等.比如,在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点执行相同的操作序列,那么他们最后能得到一个一致的状态.为保证每个节点执行相同的命令序列,需要在每一条指令上执行一个“一致性算法”

一致性算法--Raft

分布式一致性算法--Raft 前面一篇文章讲了Paxos协议,这篇文章讲它的姊妹篇Raft协议,相对于Paxos协议,Raft协议更为简单,也更容易工程实现.有关Raft协议和工程实现可以参考这个链接https://raft.github.io/,里面包含了大量的论文,视屏已经动画演示,非常有助于理解协议.概念与术语leader:领导者,提供客户提供服务(生成写日志)的节点,任何时候raft系统中只能有一个leader.follower:跟随者,被动接受请求的节点,不会发送任何请求,只会响应来自

hash一致性算法

转自:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用. 一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义: 1.平衡性(Balance)

分布式一致性算法--Paxos

Paxos算法是莱斯利·兰伯特(Leslie Lamport)1990年提出的一种基于消息传递的一致性算法.Paxos算法解决的问题是一个分布式系统如何就某个值(决议)达成一致.在工程实践意义上来说,就是可以通过Paxos实现多副本一致性,分布式锁,名字管理,序列号分配等.比如,在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点执行相同的操作序列,那么他们最后能得到一个一致的状态.为保证每个节点执行相同的命令序列,需要在每一条指令上执行一个“一致性算法”以保证每个节点看到的指令一致.本

分布式一致性算法——paxos

一.什么是paxos算法 Paxos 算法是分布式一致性算法用来解决一个分布式系统如何就某个值(决议)达成一致的问题. 人们在理解paxos算法是会遇到一些困境,那么接下来,我们带着以下几个问题来学习paxos算法: 1.paxos到底在解决什么问题? 2.paxos到底如何在分布式存储系统中应用? 3.paxos的核心思想是什么? 二.paxos解决了什么问题 分布式的一致性问题其实主要是指分布式系统中的数据一致性问题.所以,为了保证分布式系统的一致性,就要保证分布式系统中的数据是一致的. 在