2017-08-16 62 views
0

我对“一致性”一词感到困惑。它已被用于许多不同的环境中,即分布式系统,内存模型和数据库。 People/Wikipedia在同一页面中总结了所有不同的一致性模型。但我并不认为他们习惯于描述同样的问题。例如,序列/放松/弱/严格/处理器一致性等在内存模型中是有意义的(由现代架构&现代语言编译器提供)。另一方面,顺序/最终一致性在分布式系统中有意义(当您尝试构建复制状态机时)。像共识算法一样的Paxos/raft可以帮助您构建SC模型,DynamoDB是EC模型的一个示例。不同环境下的一致性(分布式系统vs内存模型vs数据库)

但是,当您构建复制日志以及谈论内存模型中的最终一致性时,谈论发布/弱一致性是没有意义的。

就传统的关系数据库而言,它使我更加困惑。由于在ACID模型中,一致性似乎意味着不同的概念。它只需要在事务之后,数据库应该处于有效/一致的状态。但是,ACID的隔离部分听起来更像一致性模型,特别是顺序一致性模型。

我在这里误解了什么吗?或电脑的人只是喜欢滥用术语和混乱的人...

如果我错了,请纠正我,即使它只是非常小的细节。我真的很想正确理解这些概念。谢谢你:)

+0

不要混淆Dynamo和DynamoDB,前者是EC模型的示例(请参阅“Dynamo:Amazon的高可用性关键值存储”论文),后者是使用类似名称的SC解决方案。 – rystsov

+0

@rystsov感谢您指出 –

回答

0

在所有三个阶段中,一致性实际上归结为内存可见性。

处理器和编译器只能对内存重新排序,以至于内存模型规定它必须保证内存在程序中定义的点处对全局可见。

在分布式系统中,每次读取都应该接收到最近的写入才能被认为是一致的。即写入必须对随后的读取可见。

数据库必须能够在要执行的操作之前查看所有的内存效果以进行有效的状态转换。