简单英语的最终一致性

Rom*_*man 112 computer-science data-storage eventual-consistency nosql

我经常听到关于NoSQL,数据网格等不同演讲的最终一致性.似乎最终一致性的定义在许多来源中有所不同(甚至可能取决于具体的数据存储).

任何人都可以简单解释一般情况下的最终一致性,与任何具体的数据存储无关吗?

Chr*_*ain 201

最终的一致性:

  1. 我看天气预报,明白明天会下雨.
  2. 我告诉你,明天会下雨.
  3. 你的邻居告诉他的妻子明天会晴天.
  4. 你告诉你的邻居明天会下雨.

最终,所有的服务器(你,我,你的邻居)都知道真相(明天会下雨),但与此同时,客户(他的妻子)认为它会变得晴朗,即使她问在一个或多个服务器(您和我)拥有更新的值之后.

与严格一致性/ ACID合规性相反:

  1. 您的银行余额为50美元.
  2. 你存100美元.
  3. 您在任何地方从任何ATM查询的银行余额为150美元.
  4. 你的女儿用你的ATM卡取了40美元.
  5. 您在任何地方从任何ATM查询的银行余额为110美元.

您的余额在任何时候都不能反映除您帐户中所有交易的实际总和之外的任何其他内容.

原因,为什么如此多的NoSQL系统具有最终一致性是,几乎所有的人都被设计成分布,并与全分布式系统有保持严格的一致性超线性开销(这意味着你只能这么远以前的事情开始放缓规模当他们这样做时,你需要在问题上投入指数级更多的硬件以保持缩放).

  • @noblerare对于不同程度的不良情况是“不好的”。如果我的ATM余额过期,那将是非常糟糕的。如果我的日志记录数据库还没有完全赶上,或者我的Facebook提要落后了几秒钟,情况也就不那么糟糕了。数据复制和持久性机制千差万别,并且取决于特定的平台。对于Cassandra(作为示例),编写者可以决定某个特定写入是否成功,是否需要在一个,所有或法定(多数)节点上进行提交。HBase采用不同的方法,其中特定节点是每一行数据的“主”。 (4认同)
  • N个严格一致的节点的系统的通信开销的增长通常被理解为超线性的(即,大于线性的).可能是指数的,可能是立方的......取决于通信协议等. (3认同)
  • 好答案。一些后续问题:对服务器的请求可能会让您获得错误/过时的信息,这不是“坏事”吗?人们对此是否满意,或者是否有解决方案?此外,数据最终如何跨不同服务器复制?如果其中一台服务器出现故障,并且数据正在跨服务器复制,如果该服务器恢复正常,那么它如何更新其数据? (2认同)

Ezr*_*och 97

最终的一致性:

  1. 您的数据将复制到多个服务器上
  2. 您的客户可以访问任何服务器以检索数据
  3. 有人将一段数据写入其中一台服务器,但尚未复制到其他服务器
  4. 客户端使用数据访问服务器,并获取最新的副本
  5. 不同的客户端(甚至是同一个客户端)访问不同的服务器(尚未获得新副本的服务器),并获取旧副本

基本上,因为跨多个服务器复制数据需要时间,所以读取数据的请求可能会转到带有新副本的服务器,然后转到带有旧副本的服务器.术语"最终"意味着最终数据将被复制到所有服务器,因此它们都将具有最新的副本.

如果您想要低延迟读取,则必须具有最终一致性,因为响应服务器必须返回其自己的数据副本,并且没有时间咨询其他服务器并就数据内容达成共识.我写了一篇博文,更详细地解释了这一点.

  • 不错的博客文章。值得一读的人对最终一致性的新概念值得一读。如果将其重写以解释博客文章中的更多内容,则此答案会更好。 (2认同)

wth*_*ira 12

认为你有一个应用程序及其副本.然后,您必须将新数据项添加到应用程序.

在此输入图像描述

然后应用程序将数据同步到下面的其他副本显示

在此输入图像描述

与此同时,新客户将从一个尚未更新的副本获取数据.在那种情况下,他无法获得正确的日期数据.因为同步需要一些时间.在那种情况下,它最终没有一致性

问题是我们怎样才能最终保持一致

为此,我们使用mediator应用程序来更新/创建/删除数据并使用直接查询来读取数据.这有助于最终实现一致性

在此输入图像描述 在此输入图像描述