欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

深入浅析分布式系统的一致性模型

程序员文章站 2023-04-06 16:54:00
什么是一致性模型 一致性模型指的是分布式系统对外界承诺的一个契约,外界按照契约的规定与分布式系统发生交互,就能得到契约中承诺的观测结果。 ......
本文是系统性的学习分布式系统中,关于一致性模型的相关介绍。 什么是一致性模型 一致性模型指的是分布式系统对外界承诺的一个契约,外界按照契约的规定与分布式系统发生交互,就能得到契约中承诺的观测结果。 这么解释过于抽象,我们看几个实际的例子。 你给女朋友转账了一千块,然后你给她打电话:“亲爱的,我给你打了一千块”。女朋友一查余额,果然多了一千块,于是龙颜大悦。 女朋友自拍发了朋友圈,打电话命令你点赞,你打开朋友圈,发现什么也没有。花了五分钟哄好了发怒的女朋友,才看到那条姗姗来迟的朋友圈。 在女朋友的自拍下面,你看到你女朋友写到“咱们上次逛街的地方”,过了三秒,看到她闺蜜的评论“这是哪里啊?” 这些系统表现出来的行为,就是其一致性模型的体现。 在这里还是要推荐下我自己建的大数据学习交流群:606~859~705,这里面都是学大数据开发的,如果你正在学习大数据 ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有大数据软件开发相关的),包括我自己整理的一份最新的大数据进阶资料和高级开发教程,欢迎进阶中和进想深入大数据的小伙伴加入 一致性模型在分布式系统中很重要,最完美的一致性模型是所有的操作都是瞬间完成,并且按照真实客观的发生时间排序,这种模型是不存在的,因为一般的操作很难看做瞬时的,而且分布式系统中,很难保证所有节点都知道精确的物理时间。所以下面介绍几种常用的一致性模型。 sequential consistency 这种模型的精确定义来自于leslie lamport老哥(以后我们会多次提到他)。 他本来是定义了多cpu多进程之间的一致性模型,但是也可以推广到分布式系统中,实际上多核多线程程序也都可以当做分布式系统来研究。 模型的定义是 the result of any execution is the same as if the operations of all the processors were executed in some sequential order, and the operations of each individual processor appear in this sequence in the order specified by its program 放到分布式系统里,意思就是不管系统怎么运行,得到的结果就好像把所有节点的所有操作按照某个sequential order排序后运行,但是在这个sequential order顺序中,来自同一个节点的操作仍然保持着它们在节点中被指定的顺序。 leslie lamport老哥的说法一贯的佶屈聱牙,我们通过几个例子来看一下。图中从左向右表示物理时间,w(a)表示写入数据a,r(a)表示读出数据a。 例子1 例子2 可以看出,这两个系统都不是完美的强一致性,但是它们的模型都可以看做sequential consistency,因为通过如下变换,总是可以自圆其说,也就是可以找到符合定义的sequential order。 变换1 变换2 causal consistency causal consistency一般被叫做因果一致性。causal consistency被认为是比sequential consistency更弱的一致性,因为在causal consistency中,只对有因果关系的事件有顺序要求。 causal consistency在《causal memory: definitions, implementation, and programming》一文中被提出,讲的是共享内存,其实早期的分布式系统研究的都是基于共享内存的多cpu并行计算,但是可以很容易推广到基于网络的通信模型。 causal consistency要求如果两个事件有因果关系,那么在所有节点上必须观测到这个因果关系。 比如下图中,我们认为p2写入的3是基于它读出来的1计算出来的,它读出来的1又是由p1的写入产生的,因此认为p1写入1和p2写入3具有因果关系。p4没有观测到这个因果关系,所以这个系统不具备causal consistency。 causal consistency例子1 而下图中,认为p2写入3和p1写入1不具有因果关系,则p4和p3可以以任意顺序观测到它们。这个系统仍然可以说具有causal consistency,但是不具备sequential consistency。 causal consistency例子2