分布式系统不可能同时知足一致性(C:Consistence),可用性(A:Avaliability)和分区容忍性(P:Partition Tolerance),最多只能同时知足其中的两项。数据库
一致性是指多个数据副本是否能保持一致的特性,在一致性的条件下,系统在执行数据更新操做以后可以从一致性状态转移到另外一个一致性状态。网络
对系统的一个数据更新成功以后,若是全部的用户都可以读取到最新的值,该系统就被认为具备较强的一致性。分布式
可用性指分布式系统在面对各类异常时能够正常提供服务的能力,能够用系统可用时间占总时间的比值来衡量,4个9的可用性表示系统99.99%的时间是可用的。blog
在可用性条件下,要求系统提供的服务一直处于可用的状态,对于用户的每个操做请求总可以在有限的时间内返回结果。同步
网络分区指分布式系统中的节点被划分为多个区域,每一个区域内部能够通讯,可是区域之间没法通讯。it
在分区容忍性条件下,分布式系统在遇到任何网络分区故障的时候,仍然须要能对外提供一致性和可用性的服务,除非是整个网络环境都发生了故障。io
在分布式系统中,分区容忍性必不可少,由于须要老是假设网络是不可靠的,所以,CAP理论其实是要在可用性和一致性之间作权衡。event
可用性和一致性每每是冲突的,很难使它们同时知足。在对个节点之间进行数据同步时,请求
BASE是基本可用(Basically Available),软状态(Soft State),和最终一致性(eventually Consistent)三个短语的缩写。im
BASE理论是对CAP中一致性和可用性权衡的结果,它的核心思想是:即便没法作到强一致性,但每一个应用均可以根据自身的业务特色,采用适当的方式来让系统达到最终一致。
指分布式系统在出现故障的时候,保证核心可用,容许损失部分可用性。
指容许系统中的数据存在中间状态,并认为该中间状态不会影响系统总体可用性,即容许系统不一样节点中的数据副本之间同步的过程存在延迟。
最终一致性强调的是系统中全部的数据副本,在通过一段时间的同步后,最终能达到一致的状态。
ACID要求强一致性,一般运用在传统的数据库上,而BASE要求最终一致性,经过牺牲强一致性来达到可用性,适合运行在大型分布式系统中。
在
在实际的分布式场景中,不一样业务单元和组件对一致性的要求不一样,所以ACID和BASE每每会结合在一块儿使用。