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

本文系统性介绍分布式系统中的一致性模型。最完美的一致性模型不存在,随后介绍了几种常用模型,如Sequential Consistency,其结果如同所有操作按顺序执行;还有Causal Consistency,即因果一致性,只对有因果关系的事件有顺序要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  本文是系统性的学习分布式系统中,关于一致性模型的相关介绍。

  一致性模型在分布式系统中很重要,最完美的一致性模型是所有的操作都是瞬间完成,并且按照真实客观的发生时间排序,这种模型是不存在的,因为一般的操作很难看做瞬时的,而且分布式系统中,很难保证所有节点都知道精确的物理时间。所以下面介绍几种常用的一致性模型。

  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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值