当我们讨论数据一致性时,容易想到CAP、BASE和ACID,那么它们分别是什么呢?有什么区别和联系吗?
1. CAP
CAP定理又被称为布鲁尔定理,是分布式计算领域一个公认的定理。
C — Consistency(一致性)
它的英文解释为:A read is guranteed to return the most recent write for a given client.
可以理解为,对于某个客户端来说,保证读操作能够返回最新的写操作的结果。
A — Availability(可用性)
英文解释:A non-failing node will return a reasonable response within a reasonable amount of time(no error or timeout).
翻译过来就是,非故障节点在合理的时间内返回合理的响应(非错误和超时响应)。
P — Partition Tolerance(分区容忍性)
英文解释:The system will continue to function when network partitions occur.
当网络出现分区后,系统能够继续履行职责。
在一个分布式系统中,当涉及读写操作时,只能保证一致性、可用性和分区容忍性三者中的两个。因为网络本身并非100%可靠,因此分布式环境中,P要素(分区容忍)是必须要被选择的。因此分布式系统只能是CP或者AP架构。
2. BASE
BASE是Basically Available(基本可用)、Soft State(软状态)和Eventual Consistency(最终一致性)三个单词的缩写,其核心思想是无法做到强一致性(CAP的一致性即为强一致性),但可以通过适合的方式达到最终一致性。
B — Basically Available(基本可用)
分布式系统在出现故障时,允许损失部分可用性,保证核心可用。
S — Soft State(软状态)
允许系统存在中间状态,而该中间状态不会影响系统整体可用性。这里说的中间状态可以理解为CAP理论中的数据不一致。
E — Eventual Consistency(最终一致性)
系统中所有的数据副本经过一定时间后,最终能够达到一致的状态。
BASE理论本质上是是对CAP的延伸和补充。因为CAP是忽略了延时的,但在实际的分布式应用中,延时是不可避免的。对于CP系统来说,完美的CP场景是不存在的,就算几毫秒的数据传输延迟,在这几毫秒的时间间隔内,系统是不符合CP要求的;而对于AP系统来说,一致性不是被彻底放弃,而是在系统发生网络分区期间,短暂放弃一致性。这就是BASE理论延伸的地方,分区期间放弃一致性,但分区故障恢复后,系统可以达到最终一致性。
3. ACID
ACID相对于CAP和BASE来说,关联性就相对弱了一些,CAP和BASE都是针对分布式系统架构提出的理论,而ACID是为了保证数据库管理系统中事务的正确性而提出来的一个理论。ACID是该理论中包含的4个约束的缩写,它们分别是:
A — Atomicity(原子性)
一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在某个中间状态。如果事务在执行过程中发生了错误,则回滚到执行之前的状态。
C — Consistency(一致性)
事务开始之前和事务结束之后,数据库完整性不被破坏。
I — Isolation(隔离性)
数据库允许多个并发事务对数据进行读写和修改的操作。隔离性可以防止多个事务并发时由于交叉执行导致的数据不一致性。事务隔离包括读未提交(Read uncommitted)、读提交(Read commited)、可重复读(Repeatable read)以及串行化(Serializable)四个级别。
D — Durability(持久性)
事务处理结束后,对数据的修改是永久的,即使系统故障也不能丢失。
综上:ACID的应用场景是数据库事务,而CAP和BASE关注的是分布式系统中数据的读写。
参考资料:李运华《从零开始学架构》