问题描述
最终一致性:
- 我看了天气预报,得知明天要下雨。
- 我告诉你明天会下雨。
- 你的邻居告诉他的妻子明天会是晴天。
- 你告诉邻居明天要下雨。
最终,所有的服务员(你、我、你的邻居)都知道了真相(明天会下雨),但与此同时,客户(他的妻子)却以为天晴了,尽管她问了在一台或多台服务器(您和我)具有更新的值之后。
与 Strict Consistency / ACID 合规性相反:
- 您的银行存款余额为 50 美元。
- 你存入 100 美元。
- 从任何地方的任何 ATM 查询您的银行余额为 150 美元。
- 您的女儿用您的 ATM 卡提取了 40 美元。
- 从任何地方的任何 ATM 查询您的银行余额为 110 美元。
您的余额在任何时候都不能反映除您账户上所有交易的实际总和之外的任何内容。
如此多的 Nosql 系统具有最终一致性的 是,几乎所有的 Nosql 系统都被设计为分布式的,而对于完全分布式的系统,维持严格的一致性需要超线性的开销(这意味着你只能在事情开始变慢之前扩展这么多下降,当他们这样做时,您需要在问题上投入成倍增加的硬件以保持扩展)。
解决方法
我经常在关于 NoSQL、数据网格等的不同演讲中听到最终一致性。似乎最终一致性的定义在许多来源中有所不同(甚至可能取决于具体的数据存储)。
谁能简单解释一下最终一致性是什么,与任何具体的数据存储无关?