当前位置: 首页 > 知识库问答 >
问题:

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

令狐高洁
2023-03-14

我在网上找到两个定义:

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

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

定义对我来说很清楚。但是,当最终一致性不是顺序时,我没有得到。例如:mem 中的初始值为 0。水平轴是时间。

P1:      write 1             (x)
P2:  read 0    read 0 read 0     read 1   read 1    read 1

因此,有一些顺序,如果我们在 (x) 插槽中输入“write 1”,根据定义,这就是顺序一致性。我错在哪里?

共有1个答案

卢伟志
2023-03-14

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

最终一致性未指定:

  • 如果寄存器有并发更新,会发生什么情况
  • 不一致的期限持续多长时间

因此,即使是单个客户端也可能会遇到修改寄存器但后续读取返回陈旧数据的情况。

根据定义,顺序一致性不可能出现同样的情况(整体顺序遵循子处理器的顺序)。

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

 类似资料:
  • 使用CQRS和事件存储,微服务之间的编排提供了最终的一致性,其中一个微服务中的更改需要一点时间传播到其他相关的下游系统(本质上是其他微服务)。如果数据非常关键,以至于两个微服务都应该具有很强的数据一致性,那么有什么选择呢?我能想到的一个选择是像数据网格那样的直写缓存,但这非常脆弱,特别是在分布式系统中。

  • 我正在看java jpoint会议的视频。 我对以下Alexey Shipilev报告幻灯片有疑问: 请原谅幻灯片上的非英语。实际上作者说变量集是不可能的 附注。 如果我理解Alexey符号正确,它尊重以下代码:

  • 我经常在关于NoSQL,数据网格等的不同演讲中听到最终一致性。似乎最终一致性的定义在许多来源中有所不同(甚至可能取决于具体的数据存储)。 谁能简单解释一下最终一致性是什么,与任何具体的数据存储无关?

  • 问题内容: 对于“属性”和“属性”之间的区别,我通常感到困惑,并且找不到很好的资源来简洁地详细说明这些区别。 问题答案: 属性是一种特殊的属性。基本上,当Python遇到以下代码时: 它查找中,然后检查,看它是否有一个,或方法- 如果这样做,这是一个性质。如果它 是 一个属性,则不仅会返回该对象(就像对其他任何属性一样),还会调用该方法(因为我们一直在进行查找),并返回该方法返回的内容。 有关Py

  • 问题内容: 和之间有什么区别? 是什么导致它们被抛出?如何解决? 在修改现有代码以包含新的jar文件时,我经常遇到这些throwables。我在客户端和服务器端都通过Webstart分发了一个Java应用程序。 我遇到的可能原因: 代码客户端未包含的软件包 我们正在使用的新jar缺少运行时类路径 版本与先前的jar冲突 今天,当我遇到这些问题时,我会采取一种犯错的方法来使事情正常进行。我需要更多的