你好,我是王磊,你也可以叫我 Ivan。
我们经常会听到说,分布式数据库的一个优势在于,它能够支持 NoSQL 做不到的强一致性。你怎么看待这件事儿呢?
显然,要来分析这个问题,我们首先得明白“强一致性”意味着什么。
我也问过很多身边的朋友,他们的答案都不太一样。有人说,只要使用了 Paxos 或者 Raft 算法,就可以实现强一致性;也有人说,根据 CAP 原理只能三选二,分区容忍性和高可用性又是必不可少的,所以分布式数据库是做不到强一致性的。可是,这些观点或多或少都是有问题的。
那么,今天我们就来讲讲什么是“强一致性”。
一直以来,在“分布式系统”和“数据库”这两个学科中,一致性(Consistency)都是重要概念,但它表达的内容却并不相同。
对于分布式系统而言,一致性是在探讨当系统内的一份逻辑数据存在多个物理的数据副本时,对其执行读写操作会产生什么样的结果,这也符合 CAP 理论对一致性的表述。
而在数据库领域,“一致性”与事务密切相关,又进一步细化到 ACID 四个方面。其中,I 所代表的隔离性(Isolation),是“一致性”的核心内容,研究的就是如何协调事务之间的冲突。
因此,当我们谈论分布式数据库的一致性时,实质上是在谈论数据一致性和事务一致性两个方面。这一点,从 Google Spanner 对其外部一致性(External Consistency)的论述中也可以得到佐证。