事物总是有两面性的,有了优点,那么缺点是什么呢?第一个缺点就是写入操作的效率降低,因为系统需要保证数据的所有副本都写成功之后才会对用户的写入操作返回成功应答。下面的图是HDFS 的写入流程图,可以明确地看到ACK 的返回点。

第二个缺点是系统的可用性降低,只要有一个数据副本所在的节点出现故障,这部分数据就是无法访问的状态。
然而在实际的应用中,工程师们发现在有些场景下并不需要时时刻刻都保持强一致性,这时,可以通过在某种程度上放松一致性的限制从而获得更好的性能和更高的系统可用。从而有了CAP之外的扩展理论,BASE便是之一。
BASE理论是由eBay的架构师Dan Pritchett源于对大规模分布式系统的实践总结,在ACM上发表文章提出BASE理论,BASE理论是对CAP理论的延伸,核心思想是即使无法做到强一致性(Strong Consistency,CAP的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)。

BASE理论的定义
BASE是指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency)。
- 基本可用(Basically Available)
基本可用是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。
电商大促时,为了应对访问量激增,部分用户可能会被引导到降级页面,服务层也可能只提供降级服务。这就是损失部分可用性的体现。
- 软状态( Soft State)
软状态是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。
分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。mysql replication的异步复制也是一种体现。
- 最终一致性( Eventual Consistency)
最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。
BASE 理论是通过权衡来获取希望得到的一致性与可用性的平衡或是倾向。让我不由自主地想起了四个字“等价交换”(钢炼,暴露年龄的信息)。
举两个BASE思想应用的例子:
1. Key-Value存储,如Amaze Dynamo等,可根据CAP三原则灵活选择不同倾向的数据库产品。
2. 领域模型 + 分布式缓存 + 存储 (Qi4j和NoSql运动),可根据CAP三原则结合自己项目定制灵活的分布式方案,难度高。
这里需要提到一点,有些地方将CAP,BASE,PAXOS,RAFT,2PC, 3PC 放在同一层级比较,这是不对的。CAP、BASE更像是基础的指导原则,而PAXOS,RAFT,2PC, 3PC等是具体的满足某种指导原则的实现层面的理论方法。
小知识点:
FLP不可能原理
现实生活中的系统往往都是异步系统。因为系统中各个节点之间的延时,是否宕机等等都是不确定的。那么,在最小化异步模型系统中,是否存在一个可以解决一致性问题的确定性共识算法?
由Fischer、Lynch和Patterson三位科学家于1985年发表的论文《Impossibility of Distributed Consensus with One Faulty Process》指出:在网络可靠,但允许节点失效(即便只有一个)的最小化异步模型系统中,不存在一个可以解决一致性问题的确定性共识算法(No completely asynchronous consensus protocol can tolerate even a single unannounced process death)。