顺序一致性和最终一致性有什么区别?

Ser*_*gey 6 consistency distributed-computing distributed-system eventual-consistency

我在网上找到了两个定义:

顺序一致性——任何执行的结果都是一样的,就好像所有处理器的操作都是按某种顺序执行的,每个处理器的操作都按照其程序指定的顺序出现在这个序列中。

最终一致性——如果没有对给定数据项进行新的更新,最终对该项目的所有访问都将返回最后更新的值。

这些定义对我来说很清楚。但是,当最终一致性不是连续的时,我不明白。一个例子:mem 中的初始值是 0。横轴是时间。

P1:      write 1             (x)
P2:  read 0    read 0 read 0     read 1   read 1    read 1
Run Code Online (Sandbox Code Playgroud)

因此,有一些顺序顺序,如果我们在 (x) 槽中放置“写入 1”,这就是顺序一致性的定义。我哪里错了?

rys*_*sov 4

顺序一致性和最终一致性之间的区别在于它们提供的保证。

最终一致性没有指定:

  • 如果寄存器有并发更新会发生什么
  • 不一致的时期持续多久

因此,即使是单个客户端也可能会遇到这样的情况:她修改了寄存器,但后续读取返回了过时的数据。

根据定义,相同的情况不可能具有顺序一致性(整体顺序尊重子处理器的顺序)。

此外,如果程序不做出时间敏感的假设,并且所有客户端(处理器)都不在系统外部进行通信,那么顺序一致性与线性化就没有区别。相反,最终一致性更接近于缺乏一致性,而不是线性化。