CAP 原理
C:Consistency 一致性
A:Availability 可用性
P:Partition tolerance 分区耐受性
CAP 定理(CAP theorem)又被称作布鲁尔定理(Brewer's theorem),是加州大学伯克利分校的计算机科学家埃里克·布鲁尔(Eric Brewer)在 2000 年的 ACM PODC 上提出的一个猜想。2002 年,麻省理工学院的赛斯·吉尔伯特(Seth Gilbert)和南希·林奇(Nancy Lynch)发表了布鲁尔猜想的证明,使之成为分布式计算领域公认的一个定理。
定义:在一个分布式系统中,当涉及读写操作时,只能保证一致性(Consistence)、可用性(Availability)、分区容错性(Partition Tolerance)三者中的两个,另外一个必须被牺牲。
分析:CAP原理是针对分布式系统的,分布式系统的最大难点就是各个节点的状态同步问题。CAP对应了分布式系统的三个指标。
一致性是说,每次读取的数据都应该是最近写入的数据或者返回一个错误,而不是过期的数据,也就是说,数据是一致的。
可用性是说,每次请求都应该得到一个响应,而不昰返回一个错误或是失去响应,不过这个响应不需要保证数据是最近写入,也就是说系统需要一致都是可以正常使用的,不会引起调用者的异常,但是并不保证响应的数据是最新的。
分区耐受性说,即使因为网络原因,部分服务噐节点之间消息失去或者延迟了,系统依然应该是可以操作的。
当网络分区失效发生的时候,我们要么取消操作,这样数据就是一致的,但是系统却不可用;要么我们继续写入数据,但是数据的一致性就的不到保证。
对于一个分布式系统而言,网络失效一定会发生,也就是说,分布耐受性是必须要保证的,那么在可用性和一致性上就必须二选一。
当网络分布失效,也就是网络不可用的时候,如果选择了一致性,系统就可能返回一个错误码或是干脆超时,即系统不可用。如果选择了可用性,那么系统总是可以返回一个数据,但是并不能保证这个数据是最新的。
总结:所以,关于CAP原理,更准确的说法是,在分布式系统必须要满足分区耐受性的前提下,可用性和一致性无法同时满足。
备注:CAP是忽略网络延迟的,因为只要有网络延迟就不可能保证数据的一致性。CAP中的二选一并不是放弃一个就必然能满足另外两个的,有时候即使放弃了可用性,也不一定能保证一致性,所以架构师不仅要权衡可用性和一致性还要有针对性的设计。
BASE理论,是基本可用(Basically Aviailable),软状态(Soft State)、最终一致性(Eventual Consistency)的简写,是对CAP中的一致性和可用性权衡的结果,核心思想是,
无法做到强一致性,但是没一个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终的一致性。
基本可用指分布式系统在出现不可预知的故障的时候,允许损失部分可用性,保证核心服务的可用。包括性能的损失和功能的损失。
软状态指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不通节点的数据副本之间进行数据同步的过程中存在延时。
最终一致性强调的是系统中的所有数据副本,在通过一段时间的同步后,最终能够达到一个一致的状态。最终一致性需要保证数据最终能够一致而不需要保证数据实时的一致性。
备注:在没有发证故障的前提下,数据的一致性状态的时间延时,取决于网络延迟,系统负载,数据恢复策略等因素。
总结:BASE其实是对CAP的延伸和补充,在分布式系统中由于网络原因,是无法达到强一致性的,所以通过业务牺牲强一致性儿获得可用性,并允许数据在一段时间内是不一致的,但是最终达到一致性状态。
版权声明: 本文为 InfoQ 作者【Z冰红茶】的原创文章。
原文链接:【http://xie.infoq.cn/article/303962e4712f18bc4fb1a9178】。未经作者许可,禁止转载。
评论