事务的“一致性”和分布式“一致性”完全不是同一个概念!
保留所有版权,请引用而不是转载本文(原文地址 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),欢迎关注。