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

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

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

  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。

  

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

 

  

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

 

  可以看出,这两个系统都不是完美的强一致性,但是它们的模型都可以看做Sequential Consistency,因为通过如下变换,总是可以自圆其说,也就是可以找到符合定义的sequential order。

  

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

 

  

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

 

  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。

  

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

 

  而下图中,认为P2写入3和P1写入1不具有因果关系,则P4和P3可以以任意顺序观测到它们。这个系统仍然可以说具有Causal consistency,但是不具备Sequential Consistency。

上一篇:[转]详解Linux(centos7)下安装OpenSSL安装图文方法


下一篇:variant变异 | Epigenome表观基因组 | Disease-susceptible gene 疾病易感基因