2.1.1 CAP理论和BASE理论
1.CAP理论
分布式数据库是分布式系统,所以必须遵循CAP理论。CAP理论又被称作布鲁尔定理,如图2-1所示,它指出一个分布式系统不可能同时满足以下3点。
● 一致性(consistency,C)。
● 可用性(availability,A)。
● 分区容错性(partition tolerance,P)。
图2-1 CAP理论
要理解CAP理论,理解“分区容错性”是关键。分布式系统里的网络异常是不可避免的,在异常发生以后网络分区就客观存在了,对分区是必须要容忍的。在这样的情况下,系统设计人员必须在一致性和可用性之间做出选择,也就是一致性和可用性(CA)不能兼顾。可以选择停掉系统,等网络节点恢复后修复数据库,这样就保证了一致性和分区容错性(CP);也可以选择继续提供服务,放弃强一致性的要求,这样就保证了可用性和分区容错性(AP)。换句话说,要么牺牲一致性,要么牺牲可用性。
CAP理论起源于美国加利福尼亚大学伯克利分校的计算机科学家埃里克·布鲁尔(Eric Brewer)在2000年的分布式计算原理研讨会上提出的一个猜想[1]。2002年,美国麻省理工学院的赛思·吉尔伯特(Seth Gilbert)和南希·林奇(Nancy Lynch)发表了布鲁尔猜想的证明论文,使之成为一个理论。
[1] GILBERT S, LYNCH N. Brewer’s conjecture and the feasibility of consistent, available, partition-tolerant web services[J]. ACM SIGACT News,2002,33(2): 51-59.
论文里面说明了C、A、P三者不能同时满足。但是如上文所述,P在分布式系统里客观存在,所以只要对C和A做正确的取舍即可。
2.BASE理论
BASE是指基本可用(basically available,BA)、软状态(soft state,S)、最终一致性(eventual consistency,E)。基于传统ACID(atomicity,原子性;consistency,一致性;isolation,隔离性;durability,持久性)方法论设计的关系数据库,会把一致性的实现作为首要考虑内容,但是基于BASE理论的方法论是弱一致性的策略。
BASE理论[2]最早在网络领域提出,为非关系型数据库而设计。BASE理论的一致性模型和ACID理论的相比是弱一致性模型,在KV数据库和文档数据库里面应用较多。
[2] Pritchett D. Base: an acid alternative: in partitioned databases, trading some consistency for availability can lead to dramatic improvements in scalability[J]. ACM Queue,2008, 6(3): 48-55.
BASE理论和ACID理论的对比这里就不详细介绍了,感兴趣的读者可以自行查阅文献。总体来说,BASE理论是CAP理论的补充,如果一致性在当前不能被满足,可以放宽约束条件,同时保证对外服务的可用性(BA)。系统里的所有数据副本在经过一段时间的同步后,最终实现一致性(E)。从最开始到最后实现一致性的过程中,存在软状态(S)。