什么是CAP定理和Base理论?
CAP
在计算机科学中,我们只要碰到分布式系统就逃不开我们的CAP定理,它是我们分布式系统中的基石。那我们就来一步步揭开它的神秘面纱。
起源是美国一所高校的教授在2000年在ACM研讨会上提出了猜想,到02年的时候MIT的两名学生就证明了猜想就成为了定理。
CAP定理是由三次单词组成:
- 一致性(等同于所有节点访问同一份最新的数据副本)
- 可用性 (每次请求都能获取到非错的响应——但是不保证获取的数据为最新数据)
- 分区容错性 (以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况, 必须就当前操作在C和A之间作出选择)
定理指出对于一个分布式系统来说不可能同时满足以上三种特性。在理解CAP理论的最简单方式是想象两个节点分处分区两侧。 允许至少一个节点更新状态会导致数据不一致, 即丧失了C性质。如果为了保证数据一致性,将分区一侧的节点设置为不可用, 那么又丧失了A性质。 除非两个节点可以互相通信, 才能既保证C又保证A,这又导致丧失了P性质。 也就是说,如图所示的三者交叉的位置,是不可能实现的。
既然CAP三者同时满足的条件是不可能的, 所以在系统设计的时候就需要作出取舍,比如弱化某些特性来支持其他两者。
弱化一致性 对结果不敏感的应用, 可以允许在新版本上线后过一段时间才能更新成功,不保证强一致性,保持最终状态的一致性。 典型的如,静态网站。
弱化可用性 对结果一致性很敏感的应用,如银行取款机,当系统发生故障时停止服务。 如清结算,转账等。 目前的paxos、raft等算法都是为保证强一致而设计的。这些系统会在 内部异常时拒绝或者阻塞客户端请求。
弱化分区容错性 现实中, 网络分区出现概率较小, 但难以避免。实践中,网络通信通过双通道等机制增强可靠性,达到高稳定的网络通信。
BASE理论
那我们再来看看Base理论(Basically Available(基本可用)、Soft state(软状态)、Eventually consistent(最终一致性)的缩写);它基于CAP定理逐步演化来的,它是CAP中一致性和可用性权衡的结果,其核心思想是即使系统无法达到强一致性,可以根据应用自身的业务特点,采用适当的方式来使系统达到最终一致性。
基本可用是指当分布式系统发生故障的时候,允许损失部分可用性。常见的有以下几种情况:
- 响应时间上的损失:正常情况下,一个在线搜索引擎需要再0.5秒之内返回给用户响应的查询结果,但由于出现故障,查询结果的响应时间增加到了1~2秒。
- 功能上的损失:通常的做法是降级服务,如对于展示一些有序元素的页面,但部分组件出现故障时,这个时候可不展示有序元素,降级为无序元素列表。
软状态是指允许系统中的数据存在中间状态,并认为该中间状态的存在不影响系统的整体可用性,即允许系统不同节点的数据副本之间进行数据同步的过程中存在延时。
最终一致性强调的是系统所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要试试保证系统数据的强一致性。
![](/images/780-200-2.jpg)