CAP理论
什么是CAP理论
CAP是Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性)这三个单词首字母组合
- 一致性:所有节点访问同一份最新的数据副本
- 可用性:非故障的节点在合理的时间内返回合理的响应
- 分区容错性:分布式系统出现网络分区的时候,仍然能够对外提供服务
什么是网络分区
在分布式系统中,多个节点之前的网络本来是连通的,但是因为某些故障导致某些节点之间不连通,整个网络就分成了几块区域,这就称为网络分区
\
不是所谓的3选2
大部分人解释这一个定律时,常常表述为三者只能同时达到两个,不可能同时达到。其实这是一个有误导性的说法,CAP理论应该是说当发生网络分区时,如果我们要继续服务,那么强一致性和可用性只能二选一。也就是说当网络分区之后P是前提,决定了P之后才有C和A的选择,也就是说分区容错性是必须要实现的。(简而言之就是CAP理论中的分区容错性P是一定要满足的,在此基础上只能满足可用性或者一致性)
因此,分布式系统理论上不可能选择CA架构,只能选择CP或者AP架构
为什么无法同时拥有C和A?
如果系统出现分区,然后系统中的某个节点在进行写操作,为了保证C就必须禁止其他节点的读写操作,但是这就和A发生冲突了,如果为了保证A,其他节点读写正常的话,那就和C冲突了
所以选择的关键在于业务场景,像银行这种场景一般选择CP架构,保证钱信息一致性
CAP实际应用
以上的注册中心负责服务地址的注册与查询,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小,常见的注册中心组件有:Zookeeper、Eureka、Nacos等
- Zookeeper保证的是CP,任何时刻对Zookeeper的读请求都可以得到一致性的结果,但是zookeeper不能保证每次请求的可用性,比如在Leader选举过程中就可能有半数以上的机器不可使用
- Eureka保证的是AP,Eureka在设计时就是优先保证A,在Eureka中不存在Leader节点,每个节点都是平等的,因此Eureka不会有选举过程中的不可用情况。Eureka保证即使大部分节点挂掉也不会影响正常提供服务,只要有一个节点可以用就可以了,但是这个节点上的数据可能不是最新的
- Nacos支持CP也支持AP
BASE理论
\
什么BASE理论
BASE是Basically Available(基本可用)、Soft-state(软状态)和Eventually Consistent(最终一致性)三个短语的缩写。BASE理论是对CAP中一致性和可用性权衡的结果,其来源对大规模互联网系统分布式实践的总结,是基于CAP定理逐步演化而来,它大大降低了我们对系统的要求
BASE理论的核心思想
即使无法做到强一致性,但是每个应用都可以根据自身业务特点,采用合适的方式来使系统达到最终一致性。也就是牺牲数据的一致性来满足系统的高可用性,系统中一部分数据不可用或者不一致时,仍然需要保证系统整体的主要可用
BASE理论本质上是对CAP理论的延伸和补充,更具体的说是对AP的一个补充。因此AP方案只是在系统发生分区时放弃一致性,而不是永远放弃一致性,在分区故障恢复后系统应该达到最终一致性,这一点其实就是BASE理论延伸
BASE理论三要素
\
基本可用
基本可用是指分布式系统在出现不可预知故障时,允许损失部分可用性,但是这不等价于系统不可用
什么叫允许损失部分可用性
- 响应时间上的损失:正常情况下,处理用户请求需要0.5s,但是由于系统出现故障,处理时间变成3s
- 系统功能上的损失:正常情况下用户可以使用系统的全部功能,但是由于系统访问量突然剧增,系统的部分非核心功能无法使用
软状态
软状态指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程中存在延时
最终一致性
最终一致性强调的是系统中所有的数据副本,在经过一段时间的同步之后,最终能够达到一个一致的状态,因此,最终一致性的本质是需要系统保证数据最终能够达到一致,不需要实时保证系统数据的强一致性:
- 强一致性:系统写入什么,读出来就是什么
- 弱一致性:不一定可以读取到最新写入的值,也不保证多少时间之后读取到的数据是最新的,只是会尽量保证某个时刻达到数据一致的状态
- 最终一致性:弱一致性的升级,系统保证在一定时间内达到数据一致的状态