深入浅析一致性模型之Linearizability

  在Sequential Consistency之后,Linearizability出现了,它具有更强的一致性。

  Linearizability的官方定义是来自于《Linearizability: A Correctness Condition for Concurrent Objects》,相比于Sequential Consistency定义的简洁,它的定义可是非常详细,我们一起简要的看一下吧。

  history

  一个并行系统的一个执行序列叫做一个history,由一系列的invocation和response事件组成。

  invocation事件一般写作

  

  x是操作对象,op表示操作,args*是参数列表,A是进程。

  Invocation的response写作

  

  term表示终止条件,res*是结果的列表。

  如果一个response和invocation的进程和操作对象一致,认为这个response match这个invocation。

  假设H是一个history,那么complete(H)是H只包含invocation和对应的match的response的最长子序列。

  sequential history

  sequential history的定义很简单:

  第一个事件是invocation

  如果一个invocation不是在最后,那么每个invocation后面都紧跟着match的response。每个response后面都紧跟着invocation。

  原文中的定义是

  Each invocation, except possibly the last, is immediately followed by a matching response. Each response is immediately followed by a matching invocation.

  我感觉有问题,因为response可以match invocation,而invocation怎么match response则没有定义。

  这里可以看出,sequential history中,操作没有互相覆盖,每个操作都认为是原子的,瞬时生效。

  

  legal sequential history

  对象x在history H的子历史是H中所有对象为x的子序列。写作

  H|x

  对象x应该定义一个sequential specification,表示它的行为属性,比如先进先出就是队列的行为属性。

  对一个sequential history H,如果每个对象的子历史都符合这个对象的sequential specification,就说明H是legal的。

  equivalent history

  进程P在history H中的子历史指的是H中所有进程为P的子序列。写作

  H|P

  对于历史H和H’来说,如果对每个进程P,都有H|P=H’|P,那么H和H’就是equivalent

  linearizable history

  对于一个history H,我们定义一个偏序关系h,如果操作a的response早于操作b的invocation,那么a p= b。注意这里的“早于”比较的是真实的物理时间(real-time)。=

  注意这是一个偏序关系而不是全序关系,因此在H中,有可能存在操作X和Y,既不存在Xh p= h= x,例如下图中a和b就不存在这种关系。= y=

  

  给定一个history H,我们可以在H结尾追加任意个数的response使之变成H’

  当H’满足以下条件时,认为H是linearizable:

  complete(H’)和某个legal sequential history S是equivalent的

  h p= s=

  我的理解是,linearizable history和一个保留了原来真实时间顺序的legal sequential history等效了。

  下面的执行历史可以认为是linearizable。

  

  因为可以找到某个符合条件的S。

  

  注意,W(1)h p= h= r(1),这两个关系必须要保留,但w(1)和w(3)则不存在先后关系。=

  Linearizability和Sequential Consistency

  Linearizability比Sequential Consistency要严格很多,实际上Sequential Consistency仅仅要求本地顺序得到保留,而Linearizability要求保留真实时间顺序。

  下面的系统可以认为Sequential Consistency,但不是Linearizability。

  

  Linearizability和Serializability

  Linearizability经常和Serializability混淆,实际上Serializability一般指的是数据库的隔离级别,两者描述的不是同一个领域的东西。

?

原文地址:https://www.cnblogs.com/qfjavabd/p/10938246.html

时间: 2024-10-14 08:30:07

深入浅析一致性模型之Linearizability的相关文章

分布式系统中的概念--第一篇 一致性协议、一致性模型、拜占庭问题、租约

1,一致性协议 两阶段提交协议与Raft协议.Paxos协议 ①两阶段提交协议 在分布式系统中,每个节点虽然可以知晓自己的操作时成功或者失败,却无法知道其他节点的操作的成功或失败.当一个事务跨越多个节点时,为了保持事务的ACID特性,需要引入一个作为协调者的组件来统一掌控所有节点(称作参与者)的操作结果并最终指示这些节点是否要把操作结果进行真正的提交(比如将更新后的数据写入磁盘等等).因此,二阶段提交的算法思路可以概括为: 参与者将操作成败通知协调者,再由协调者根据所有参与者的反馈情报决定各参与

内存一致性模型

Cache coherence 本文主要讨论的是内存一致性问题(memory consistency),和缓存一致性(cache coherence)是不同的.在<计算机体系结构:量化方法研究>第五章中,memory consistency是由cache coherence引出的,所以我们就先来说说cache coherence吧.考虑下图: 如图,A和B读取X到缓存后,A直写(write through)X的值为0,但此时B缓存中存储的X的值仍然是1.即如果此时B读取X,将会收到数值1! 通

存储一致性模型研究——Research of Memory Consistency Model

一致性模型: 所谓存储一致性模型(Memory Consistency Model),实际上是系统设计者与应用程序员之间的一种约定.如果应用软件遵从一定的规则访问虚内存系统,则应用软件可获得正确的存储访问结果:反之,若破坏约定的规则,则存储访问的正确性不受保证. 从某种意义上来讲,存储一致性模型对共享存储系统中多处理机的访存次序作了限制,从而对性能有影响.分布式共享存储系统(DSM)的一个根本目标就是让一个通过局域网连接起来的工作站集群,共享单一的分页虚地址空间,使在工作站集群之上运行程序的效果

一致性模型(consistency model)

比如下面的例子: 一行X值在节点M和节点N上有副本 客户端A在节点M上写入行X的值 一段时间后,客户端B在节点N上读取行X的值 一致性模型所要做的就是决定客户端B能否看到客户端A写的值.一致性模型分为一下几种模型: 随意一致性(causal consistency) delta一致性(delta consistency) entry一致性(entry consistency) 最终一致性(eventual consistency) 创建一致性(fork consistency) 原子一致性(at

Hadoop之HDFS之一致性模型

HDFS某些地方为了性能可能会不符合POSIX(是的,你没有看错,POSIX不仅仅只适用于linux/unix,Hadoop 使用了POSIX的设计来实现对文件系统文件流的读取),所以它看起来可能与你所期望的不同,要注意.     创建了一个文件以后,它是可以在命名空间(namespace)中可以看到的: Path p = new Path("p"); fs.create(p); assertThat(fs.exists(p), is(true)); 但是任何向此文件中写入的数据并不能

内存一致性模型(Memory Consistency Models)

译注:计算机早已进入了多核时代,多核时代要求程序员能够编写并行的程序来充分发挥多处理器的功效.而编写并行/并发程序必须要对内存模型有所了解.因此本人特翻译了一篇有关内存模型综述性质的文章.初次翻译文章,错误在所难免,还望指教.原文地址:http://www.cs.nmsu.edu/~pfeiffer/classes/573/notes/consistency.html 注:有一个很好的关于内存一致性模型的教程在 ftp://gatekeeper.dec.com/pub/DEC/WRL/resea

流处理(五)- 状态与一致性模型

状态(State)与一致性模型 接下来我们转向另一个在流处理中十分重要的点:状态(state).状态在数据处理中是无处不在的.为了产生一个结果,函数一般会聚合某个时间段内(或是一定数量的)events的状态信息(例如计算聚合值,或是发现一个模式),有状态的 operators使用流的输入事件以及内部状态,计算出它们的输出.例如,一个滚动聚合operator输出当前它读入的所有的events的总和.Operator 持有当前sum的值作为它的内部状态,并在每次读入新值时对它做更新.类似,考虑一个o

一致性模型之Sequential Consistency

Sequential Consistency的定义 Sequential Consistency的精确定义来自于Leslie Lamport老哥(以后我们会多次提到他). 他本来是定义了基于共享内存的多CPU并行计算的一致性模型,但是也可以推广到分布式系统中,实际上多CPU并行计算也都可以认为是分布式系统. 模型的定义是 the result of any execution is the same as if the operations of all the processors were

一致性模型对系统设计的重要性,数据的备份

文件系统的一致性和应用程序的方法有关,如果不调用sync(),就需要做好因为客户端异常或者服务端故障而缺失部分数据.缺失数据这对应用来说是不可接受的.所以需要在合适的地方调用sync(),比如在写入一定量的数据后,尽管sync()用来最大限度的减轻hdfs的负担,但是他仍有不可忽视的开销.所以你需要在数据的健壮性和吞吐量之间做好权衡,其中一个好的平衡点:通过测试应用程序来选择sync频率间性能的平衡点 hadoop的设计目标之一就是能够在可靠的分布式集群上数据存储,hdfs允许数据丢失,所以数据