1

数据一致性是分布式存储系统中的一个重要问题,如Amazon DynamoDBCassandraRiakWindows Azure等。它带有用于提供高性能、容错性和可扩展性的复制技术。

数据一致性模型作为表征数据一致性问题的一种形式化方法。然而,向没有分布式存储系统背景的观众解释往往过于正式,更不用说最终一致性、因果一致性、顺序一致性等概念了。

因此,非正式的解释会更好。此外,一个合格的解释最好涵盖以下三个关键点:

  1. 简单的示例、漂亮的数字和简洁的说明来说明数据(不)一致性问题。
  2. 传达同时存在弱(不)一致性和强(不)一致性的想法。
  3. 显示数据(不)一致性对用户或应用程序程序员的影响。
4

1 回答 1

1

回答我自己的问题:

一致性模型过于正式和严谨,无法向普通观众解释。幸运的是(或许不幸的是),大多数人都有数据不一致的经历。数据不一致通常对用户来说意味着奇怪的行为。基本上,一致性模型指定了哪些行为是允许的,哪些是不允许的。这里的重点是存在不同级别的各种一致性模型。一致性模型越强,用户得到的惊喜就越少。用户和开发人员都需要高度的一致性:用户对他们的数据感觉更好,开发人员发现更容易编程。

典型的一致性条件包括(但不限于)最终一致性、因果一致性、顺序一致性和原子性,从弱到强。

最终一致性在今天的分布式存储系统中很普遍,以亚马逊的 Dynamo 为代表。最终一致性非常弱(理论上),因为它几乎没有做出任何承诺。考虑以下场景(如图所示):

数据不一致最终博客 http://i1.tietuku.com/48f5bfa9d6d925e0s.png

你刚刚完成了你的博客,迫不及待地想要发布它。您按下“发布”按钮并立即刷新页面,却发现您的博客不存在!当您将博客发布到副本节点并在另一个节点上刷新时,确实会发生这种情况。别紧张。刷新,刷新,刷新,最终会出现。

因果一致性比最终一致性更强,因为它保证所有用户按照因果顺序观察到两个因果相关的事件。考虑以下在社交网站上创造的对话(如图所示),摘自一篇论文

数据不一致因果对话

  1. 这位母亲找不到她的儿子并向她的朋友发布了一个状态:“我认为儿子失踪了!”。
  2. 儿子回复他的母亲,让她知道他只是在玩。
  3. 一位朋友观察了这个小对话并发布了一个状态作为回应:“真幸运!”。

如果尊重因果关系,第三个用户可能会先于原因感知结果。如右图所示,她可能会认为朋友很高兴听到儿子的失踪!

任务关键型应用程序通常需要更强大的数据一致性,例如事务。

[未完待续]

于 2014-07-30T15:06:15.227 回答