事务的“一致性”和分布式“一致性”完全不是同一个概念!

标签: 分布式, 数据库

保留所有版权,请引用而不是转载本文(原文地址 https://yeecode.top/blog/112/ )。

在前面的文章中,我们已经讲了:分布式系统中所说的一致性(CAP一致性)和数据库事务中所说的一致性(ACID一致性)完全不是同一个概念。

CAP一致性是说:用户在分布式系统的某个节点上进行了变更操作,则在一定时间后,用户能从系统的任意节点上读取到这个变更结果。

ACID一致性是说:事务的执行不会破坏数据库的完整性约束,所谓的完整性约束包括数据关系的完整性和业务逻辑的完整性。因此,这里的“一致性”指的是完整性约束不会破坏。

哪有人会问,两者之间有没有什么关联呢?

如果真要找,也能找到。只发生在一些很特殊的场景下。

我们已经知道ACID一致性讨论的是事务,CAP一致性讨论的是分布式。那在分布式事务中,这两种一致性会存在交集。如图所示。

分布式事务示意图

假设存在一个支持事务操作的分布式数据库。

那作为数据库,它应该满足CAP一致性,否则数据库中的值没有意义。例如你从数据库的某个节点中读取到变量的值为1,而从数据库的另一个节点中读取到同一变量的值为3,则无法判断哪一个值是正确的。这样无论值1还是值3都没有意义。

又因为这个分布式数据库支持事务,则它应该满足ACID一致性。

这时候我们发现,CAP一致性是ACID一致性的基础。即如果CAP一致性不成立,则分布式数据库各个节点的数据不一致且没有意义,那么ACID一致性要求的完整性约束便断然无法满足。

除了上图所示的情况外,CAP一致性和ACID一致性少有交集。在平时的理论学习和工程实践中,区分好这两种一致性概念非常重要,否则很容易陷入疑惑和混沌。

所以,还是建议大家将这些概念理清楚,避免学的越多混的越乱……。推荐大家一本书:

分布式系统原理与工程实践

《分布式系统原理与工程实践》

书籍对常用的一致性进行了详细的介绍,包括分布式系统中的一致性级别,还介绍了一致性相关算法等。对大家体系化地掌握这些知识很有帮助。

书籍部分目录

这本书对分布式系统相关的理论、实践、工程知识均进行了详细的介绍,层层递进,有助于大家建立完整的分布式系统知识体系。当然,书中也对各种“一致性”进行了分析。并且本书备受好评,以至于还发行了繁体版


好了,我是程序员易哥。

这回就说这么多!

可以关注我!等我下回接着说!

可以访问个人知乎阅读更多文章:易哥(https://www.zhihu.com/people/yeecode),欢迎关注。

作者书籍推荐