资料参考来源拉钩Java高薪训练营
前言
2000 年7月的时候,加州大学伯克利分校的Eric Brewer 教授提出了 CAP 猜想,2年后,被 来自于麻省理工的Seth Gilbert 和 Nancy Lynch 从理论上证明了猜想的可能性,从此,CAP 定理正式在学术上成为了分布式计算领域的公认定理。并深深的影响了分布式计算的发展。
一、CAP定理
- C 一致性
一致性是指在分布式环境下,所有节点的数据都是一致的。 - A 可用性
系统必须保证一直可用,服务一直保持正常。 - P 分区容错性
在某些节点或者网络分区故障时,任然能提供满足一致性和可用性的服务
二、CPA只能3选2
假如现在有两个数据库N1、N2,里面存在一个值V0。现在一个请求发送到N1数据库,需要把V0修改为V1,由于网络原因,N2没有同步到N1的数据,这个时候又来一个请求到数据库N2里面查询结果,返回情况有两种:
- 由于N2数据库还没同步到数据,所以直接返回V0。牺牲了一致性。
- 一直阻塞等待,等到网络正常,N2数据库同步完成,再返回最新值V1。牺牲了可用性。
从上面这个例子可以看出,一致性和可用性是互斥的,所以CAP三个特性无法全部满足,必须要舍弃一个,那么久有三种情况:
- 舍弃A,保留CP
一个系统保证了一致性和分区容错性,舍弃可用性。也就是说在极端情况下,允许出现系统无法访问的情况出现,这个时候往往会牺牲用户体验,让用户保持等待,一直到系统数据一致了之后,再恢复服务。 - 舍弃C,保留AP
大部分分布式系统的设计,舍弃一致性,保证可用性和分区容错性。 - 舍弃P,保留AC
如果舍弃P,那么代表要舍弃分布式系统,CPA就无用了。可以说P是分布式系统的前提。
三、BASE理论
全称:Basically Available(基本可用),Soft state(软状态),和 Eventually consistent(最终一致性)三个短语的缩写,来自 ebay 的架构师提出。
BASE是对CAP中一致性和可用性权衡的结果,BASE理论的核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。
- Basically Available(基本可用)
基本可用是指分布式系统在出现不可预知故障的时候,允许损失部分可用性。不过这里需要注意的是,这绝不等价于系统不可用。- 响应时间上的损失:可能接口响应时间增加。
- 功能上的损失:比如电商网站高峰期,可能部分用户被引导到一个降级页面。
- Soft state(软状态)
允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性,即允许系统在多个不同节点的数据副本之间进行数据同步的过程中存在延迟。 - Eventually consistent(最终一致性)
最终一致性强调的是系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。因此最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性。