FLP不可能性(FLP impossibility)

FLP不可能性(FLP impossibility)

FLP impossibility是一个定理,它证明了在分布式情景下,无论任何算法,即使是只有一个进程挂掉,对于其他非失败进程,都存在着无法达成一致的可能。

FLP是Fischer, Lynch,Patterson三位作者名字组合的简写,表明这定理是由它们三位发明的。

简化模型

FLP基于如下几点假设:

仅可修改一次

每个进程初始时都记录一个值(0或1)。进程可以接收消息、改动该值、并发送消息,当进程进入decide state时,其值就不再变化。所有非失败进程都进入decided state时,协议成功结束。这里放宽到有一部分进程进入decided state就算协议成功。

异步通信

与同步通信的最大区别是没有时钟、不能时间同步、不能使用超时、不能探测失败、消息可任意延迟、消息可乱序。

通信健壮

只要进程非失败,消息虽会被无限延迟,但最终会被送达;并且消息仅会被送达一次(无重复)。

fail-stop模型

进程失败如同宕机,不再处理任何消息。相对Byzantine模型,不会产生错误消息。

失败进程数量

最多一个进程失败。

这几点假设并不是单独而抽象的,在实际生产的应用中我们很有可能遇到的就是上述情况。

证明过程

定义

消息队列

假定存在一个全局的消息队列,进程可以发送消息,也可以在其上接收消息。send(p,m)表示向进程p发送消息m;receive(p,m)表示进程p收到了消息m。

Configuration

所有进程的状态集,进程的状态包括初始值、决议值、消息队列的内容。初始Configuration表示各个进程的初始值是随机的,同时消息队列为空,决议值为空。

事件

事件代表给某个进程发送消息,并且消息已送达,可用event(p,m)表示。根据消息队列的定义可以知道,event(p,m)即send(p,m)与receive(p,m)的交。由于某个事件,某个Configuration可以转化为另一个Configuration。

事件序列

一连串顺序执行的事件序列,记为run,即runn=[event1(p1,m1), event2(p2,m2),…?,eventn(pn,mn)]。

可达Configuration

在对某个Configuration A应用了某个run事件序列之后,得到Configuration B,则称B从A可达——可记为B?A。

引理1:连通性

把所有的进程P分成两个不相交的集合P1,P2,有两个run R1,R2,如果先给P1应用R1,再给P2应用R2与先给P2应用R2,再给P1应用R1,对P的Configuration C来说得到的结果是一致的。

Figure 1. 连通性

结果显而易见,不再罗列证明。

引理2:初始Configuration不确定性
初始Configuration不确定性

对任何算法P,都存在至少一个不确定性的初始Configuration。

可以用反证法证明此引理。

因为候选的决议值必须大于1个才需要保证决议的一致性,这里选取了最简单的两个候选值的情况,候选值分别是value1和value2。而多候选值情形可以根据归纳法证明。

这里再做一个定义:

Configuration相邻

若两个Configuration间,仅有一个进程的状态存在差别,那么称为Configuration相邻。

假设所有初始Configuration都是确定的,那么对于任意一个非空进程集P,必然至少存在一对相邻的Configuration 1(C1)和Configuration 2(C2),二者的决议分别是value1和value2,其连接进程是P0。

假设连接进程突然间掉线了,那么C1和C2剩余进程的状态必然是完全一致的。那么此时,我们就无法从剩余进程中知道当前Configuration的确切的决议值。

引理3:不可终止性(传播性)
不可终止性

设C是一个不确定Configuration,event(p,m)是可以应用到C的事件。设X是从C可达并且未应用过event的Configuartion的集合,并构造Y = e(X) = {e(E) | E∈X a并且 e应用于E}。那么,Y一定包含不确定的configuration。

简而言之:不确定性是可以传播的。

根据上文中的设定,我们可以得到如下示意图:

Figure 2. 不可终止性定义示意图

同样使用反证法证明:设Y中的Configuration都是确定的。

因为C是不确定的,因此必然从C可达一个确定的0-value Configuration(C0),同时可达一个确定的1-value Configuration(C1)。

由于C0是0-value,无论是D0从C0可达,或是C0从D0可达,都可以推导出D0是0-value。同理,也可以推导出Y中存在一个D1是1-value。

由于0-value和1-value的C都必然存在,因此我们可以很容易得出下图:

我们无须关心该图中C0或者C1的具体值,只需知道必然存在一个C1,C1从C0可达。

虚线部分如下:

假设e和f操作的进程分别是pe和pf,那么分为两种情况:

pe!=pf

根据引理1(连通性)很容易得到下图:

Figure 3. pe!=pf

显然,D0和D1应该是不同的值,因此导出一个矛盾:Y中有两个值,因此是不确定的。

pe==pf

Figure 4. pe!==pf

由于C0已确定,因此经过σ,得到的应该是一个确定的F。 经过eσ,得到的是一个确定的E0(D0已确定)。 经过feσ,得到的是一个确定的E1(D1已确定),并且E1!=E0。

同时,由于σ和e/f操作的是不同的进程,所以可以应用引理1(连通性)。 因此可以导出σe等价于eσ,σfe等价于feσ,所以,根据上图,F可以分别导出两个不同的结果E0和E1——这和之前的推导是相互矛盾的。

综上所述,Y中可能会包含一个不确定的Configuration。

结论

尽管FLP impossible原理是基于简单的系统模型假设,但我们可以根据归纳法得出,在更复杂的系统模型下,我们仍然没有任何算法能够完全保证分布式系统下的一致性。

但我们不必绝望,此结论只是说明了100%保证一致性是不可能的,这并不影响我们对分布一致性的探索(99%以上的一致性还是完全有可能做到的)。

参考文献

Blogs

时间: 2024-10-12 15:18:58

FLP不可能性(FLP impossibility)的相关文章

FLP impossibility

FLP Impossibility(FLP不可能性)是分布式领域中一个非常著名的结果,该结果在专业领域被称为“定理”,其地位之高可见一斑.该定理的论文是由Fischer, Lynch and Patterson三位作者于1985年发表,之后该论文毫无疑问得获得了Dijkstra奖. 顺便要提一句的是,Lynch是一位非常著名的分布式领域的女性科学家,研究遍布分布式的方方面面,对分布式领域有着极其卓越的贡献,其著有<<Distributed Algorithms>>一书,书中有非常严

分布式系统概要

分布式系统是一个庞大的议题,每个子领域都有大量的研究.学习分布式系统知识,如果不分主次地随看随学,效果不会好.本文介绍了分布式系统的主要概念,适合作为分布式系统的入门指南. 我一直在学习有关分布式系统的知识,学习时间不算短了.老实说,只要你开始钻研分布式系统,知识点好像学不完似的,一个接一个.分布式系统领域的文献太多了,包括许多大学发表的论文,还有很多书籍可选.像我这样的绝对新手,很难决定应该阅读哪些论文或者购买哪些书籍. 同时,我还发现了几个博客作者,他们在博客中推荐这篇或者那篇论文,声称这是

区块链快速入门(二)——分布式系统核心技术

区块链快速入门(二)--分布式系统核心技术 一.分布式系统的一致性问题 1.分布式系统的一致性问题 随着摩尔定律碰到瓶颈,越来越多情况下要依靠可扩展的分布式架构来实现海量处理能力.单点结构演变到分布式结构,首要解决的问题就是数据的一致性.如果分布式集群中多个节点不能保证处理结果的一致性,建立在其上的业务系统将无法正常工作.区块链系统是一个典型的分布式系统,在设计上必然也要考虑一致性问题.在面向大规模复杂任务场景时,单点的服务往往难以解决可扩展(Scalability)和容错(Fault-tole

后台架构设计—数据存储层

数据存储重要性: ????数据是企业最重要的财产: ????数据可靠性是企业的命根,一定要保证. ? 单机存储原理: ????存储引擎:存储系统的发动机,它决定存储系统的功能和性能: ????引擎类型:哈希存储引擎.B树存储引擎.LSM存储引擎 哈希存储引擎:基于哈希表结构 :数组+链表:支持Create\Update\Delete\随机Read B树存储引擎:基于B Tree实现,支持单条记录的CURD,支持顺序查找.RDBMS使用较多. LSM树存储引擎:对数据的修改增量保存在内存,达到一定

从分布式一致性到共识机制(三)拜占庭问题

分布式一致性问题,区块链里体现就是共识问题.共识机制就是在一个群体中的个体通过某种方式达成一致性的一种机制,比如在一个团队.或者一个公司里的个体意见不一致时,就需要有一个领导,由领导来做决定,保证团队达成共识. 目前的共识算法,主要有基于算力的POW,基于股权的POS和基于投票的DPOS算法,以及著名的拜占庭容错算法. 一.共识机制 团队里的共识机制延伸到普通的分布式系统里面,就是系统需要有一个master,系统的所有决定都由master来达成共识,在分布式系统里面master的选举其实就是基于

C# ToolStripProgressBar

ToolStripProgressBar 将所有 ToolStrip控件的移动和渲染功能和其典型的进程跟踪功能结合在一起.ToolStripProgressBar通常放在StatusStrip中,偶尔放在ToolStrip中. ToolStripProgressBar通常在执行复制文件或打印文件等任务时使用,由于执行任务的时间较长,如果没有视觉提示,用户可能会任务应用程序没有响应. ToolStripProgressBar的重要成员如下: 名称 说明 MarqueeAnimationSpeed

机器什么时候可以学习(4) --- 学习的可能性(feasibility of learning)

1.课程主要内容 上节课中将到了各式各样的的机器学习种类, 这节课主要说明一下学习为什么是可行的: (1).在不加限制的数据集上学习是无法完成的 (2).来自于同一分布的数据集的估计可以通过抽样法来进行估计,成立的原理就是霍夫曼不等式 (3).单个固定的hypothesis情况下的霍夫曼不等式 (4).多个且有限的hypothesis情况下的霍夫曼不等式 (5).PAC准则 2.学习看似是不可能的 用已知的数据之间的规则去评价未知数据的结果,是无法获得到正确的学习结果,在不加限制的条件下,即使每

SQL SERVER Undelete 可能性探索(一)Clustered Table

SQLSERVER中,如果数据被误删了,依照官方的说法,SQLSERVER是没有undelete的.要想救回被删除的数据,最典型的方法就是透过将备份档还原成另一DB,将数据从另一DB找回来后,再新增回正式的DB. 不过,如果对于SQLSERVER的transaction log结构了解的人,只要交易纪录还在,就可以透过解析交易纪录来取得被删除的数据,再将数据Insert回DB.只是transaction log的解析有点复杂.这也是个值得探讨且有趣的主题.如果可以,或许可以找时间来谈谈这个. 其

牙膏5元,牙刷2元,肥皂3元,100元买这三种恰好花光,请问有多少种可能性

Console.WriteLine("牙膏5元,牙刷2元,肥皂3元,100元买这三种恰好花光"); int a1 = 0, b1 = 0, c1 = 0, sum = 0; for (int a = 0; a <= 20; a++) { a1 = 5 * a; for (int b = 0; b <= 50; b++) { b1 = 2 * b; for (int c = 0; c < 33; c++) { c1 = 3 * c; if (a1 + b1 + c1 =