回答我自己的问题:
一致性模型过于正式和严谨,无法向普通观众解释。幸运的是(或许不幸的是),大多数人都有数据不一致的经历。数据不一致通常对用户来说意味着奇怪的行为。基本上,一致性模型指定了哪些行为是允许的,哪些是不允许的。这里的重点是存在不同级别的各种一致性模型。一致性模型越强,用户得到的惊喜就越少。用户和开发人员都需要高度的一致性:用户对他们的数据感觉更好,开发人员发现更容易编程。
典型的一致性条件包括(但不限于)最终一致性、因果一致性、顺序一致性和原子性,从弱到强。
最终一致性在今天的分布式存储系统中很普遍,以亚马逊的 Dynamo 为代表。最终一致性非常弱(理论上),因为它几乎没有做出任何承诺。考虑以下场景(如图所示):
数据不一致最终博客 http://i1.tietuku.com/48f5bfa9d6d925e0s.png
你刚刚完成了你的博客,迫不及待地想要发布它。您按下“发布”按钮并立即刷新页面,却发现您的博客不存在!当您将博客发布到副本节点并在另一个节点上刷新时,确实会发生这种情况。别紧张。刷新,刷新,刷新,最终会出现。
因果一致性比最终一致性更强,因为它保证所有用户按照因果顺序观察到两个因果相关的事件。考虑以下在社交网站上创造的对话(如图所示),摘自一篇论文:

- 这位母亲找不到她的儿子并向她的朋友发布了一个状态:“我认为儿子失踪了!”。
- 儿子回复他的母亲,让她知道他只是在玩。
- 一位朋友观察了这个小对话并发布了一个状态作为回应:“真幸运!”。
如果不尊重因果关系,第三个用户可能会先于原因感知结果。如右图所示,她可能会认为朋友很高兴听到儿子的失踪!
任务关键型应用程序通常需要更强大的数据一致性,例如事务。
[未完待续]