本文分类:
软件理论与软件工程

CAP定理

CAP定理指出,在分布式数据存储中,强一致性、可用性和分区容错性不可能同时满足。CAP的含义如下:

C:Consistency,强一致性,指写后面的读一定能读到前面写的内容,所有的读写请求都好像被全局排序。

A:Availability,可用性,对任何非失败节点的请求都应该在有限的时间内给出响应。

P:Partition tolerance,分区容错性,即允许节点间丢失任意多的消息,允许网络分区发生。

直观上理解,由于分布式系统必然存在丢失消息的可能,那么某个节点上就可能存在过期数据。当访问这个节点时,系统有两种选择:为满足强一致性,该节点需一直同步,直到取得最新数据为止,但由于通信可能失败,这个同步时间无法保证,甚至永远无法获取到最新的数据。 如果要保证在有限的时间内返回结果,那么就无法保证每个节点都返回最新的数据。

实际上,CAP定理无处不在,只要涉及多个副本之间的一致性问题时,都需要考虑CAP定理。比如 DNS 采用放弃一致性,追求高可用的策略。悲观锁则采用放弃可用性,追求强一致性的策略。

系统级放弃可用性是不存在的。放弃可用性,追求强一致性和分区容错性,意味着一旦出现网络问题,在系统达到同步前就直接让整个系统不可用,实际情况中不会作出这样的选择。

ACID与强一致性

如果不要 CAP 中的P,实际上就是在一个单机系统内,C 和 A 可以同时满足,如关系型数据库通过事务来保证强一致性。事务具有原子性、一致性、隔离性和持久性四个特性,这四个特性如下:

A: Atomicity,原子性,指事务必须是一个原子的操作序列,要么全部执行成功,否则任何一项操作失败都将导致事务失败,其他已执行操作回滚,系统恢复到事务执行前的状态。

C:Consistency,一致性,注意,ACID中的一致性和CAP中的一致性概念不同,这里的一致性指的是系统中的各种约束在事务执行前后都是满足的。

I:Isolation,隔离性,指并发的事务互不影响。实际上,完全互不影响的事务性能较差,实践中通过隔离级别来控制事务之间的影响程度。

D:Durability,持久性,指已提交的事务被永久保存。

BASE理论与最终一致性

在分布式系统中,既然P是不可避免的,那么实际应用中都是在 C 和 A 之间进行权衡,主要是同步时间和响应时间的权衡。大部分系统对可用性 A 的要求比较高,所以,实践中通常会降低对强一致性 C 的要求,来提高系统的可用性。鉴于此,BASE 理论提出了最终一致性的概念。BASE 理论是对 CAP 定理中强一致性和可用性权衡的结果。BASE 是基本可用、软状态和最终一致性的简写。实际上,基本可用、软状态和最终一致性本质上是一回事。BASE的含义如下:

BA:Basically Available,基本可用,是指分布式系统在出现不可预知的故障的时候,允许损失部分可用性,比如允许响应时间延长,允许部分非核心功能不可用,或部分请求响应失败。

S:Soft state,软状态,指允许系统中的数据存在中间状态,并认为中间状态的存在不影响系统的整体可用性,这些中间状态是节点间数据同步延时造成的。

E:Eventually consistent,最终一致性,指不需要保证数据的强一致性,但不同节点上的数据总是在向一致的方向发展,可简单理解为系统中的所有数据在经过一段时间的同步后最终能够达到一致的状态。

本文来自 [时光记 - 王智超的个人空间](www.hiwzc.com),转载请注明出处。