Full-Stack-Notes/notes/CAP理论和BASE理论.md
2020-05-25 11:18:05 +08:00

82 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# CAP 理论 和 BASE 理论
## 一、CAP 理论
### 1.1 基本概念
#### 1. 一致性
在分布式环境中,一致性是指数据在多个节点之间能够保持一致的特性。如果在某个节点上执行变更操作后,用户可以立即从其他任意节点上读取到变更后的数据,那么就认为这样的系统具备强一致性。
#### 2. 可用性
可以性是指系统提供的服务必须一直处于可用状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果。它主要强调以下两点:
+ **有限的时间内**:对于用户的一个请求操作,系统必须要在指定的时间内返回处理结果,如果超过这个时间,那么系统就被认为是不可用的。
+ **返回结果**:不论成功或者失败,都需要明确地返回响应结果。
#### 3. 分区容错性
分区容错性指定是分布式系统在遇到网络分区时,仍需要能够对外提供一致性和可用性的服务,除非是整个网络环境都发生了故障。
这里的网络分区指的是:在分布式系统中,由于不同的节点会分布在不同子网中(不同机房或异地网络等),由于一些特殊的原因,可能会出现子网内部是正常的,但子网彼此之间却无法正常通信,从而导致整个系统的网络被切分成若干个独立的区域,这就是网络分区。
### 1.2 CAP 理论
CAP 理论强调一个分布式系统不可能同时满足一致性CConsistency、可用性AAvailability和分区容错性PPartition tolerance这三个需求最多只能同时满足其中的两个。这里我们来进行一下解释说明
首先对于一个分布式系统而言,网络分区是不可避免的,不可能永远不出现网络故障,所以分区容错性 P 必须要保证。假设一个分布式系统中出现了网络分区,如下:
<div align="center"> <img src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/cap_示例.png"/> </div>
假设用户 1 向节点 1 上增加了 10 个数据,但节点 1 和节点 2 之间因为网络分区而无法进行数据同步,碰巧用户 2 此时发起了查询请求,此时有两种处理方案:
+ **放弃 A保证 C**:即对于用户 2 的查询返回失败,直至节点 1 上的数据同步至节点 2两者的数据都变为 60 为止;
+ **放弃 C保证 A**:对于本次的查询直接返回原来的数据 50此时放弃了一致性但保证了可用性。待网络恢复后仍然需要将节点 1 上的数据同步至节点 2。
可以看到无论如何,都是无法既保证 A ,又保证 C 的。
### 1.3 选择策略
因为 CAP 理论不能将一致性、可用性和分区容错性都满足,所以需要根据不同系统的特性进行取舍,主要分为以下三种情况:
+ **保证 AC ,放弃 P**:这种情况下可以将所有数据(或者是与事务相关的数据)都放在一个分布式节点上,这样可以避免网络分区带来的影响,但同时也意味着放弃了系统的可扩展性,如单机版本的 MySQL、Oracle 等。
+ **保证 CP ,放弃 A**:这种情况下如果发生了网络分区故障,此时节点间的数据就无法同步。因此在故障修复前都需要放弃对外提供服务,直至网络恢复,数据到达一致为止。
+ **保证 AP ,放弃 C**:这种情况相当于放弃一致性。具体而言,是放弃数据的强一致性,但保证数据的最终一致性。因为不论是什么系统,数据最终都需要保持一致,否则整个系统就无法使用。在这种策略下,在某个短暂的时间窗口内会存在数据不一致的情况。
<div align="center"> <img src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/cap理论.jpg"/> </div>
## 二、BASE 理论
BASE是对基本可用Basically Available、软状态 Soft State、最终一致性 Eventually Consistent三个短语的简写它是对 CAP 理论中 AP 策略的延伸。其核心是即便无法做到强一致性,但每个系统应用都应该根据自身业务的特点,采取适当的方式来保证系统的最终一致性,而具体的方案就体现在这三个短语上:
#### 1. 基本可用
基本可用是指分布式系统在出现不可预知的故障时,允许损失部分可用性,例如:
+ 延长响应时间:比如原来的的查询只需要 0.5 秒,现在延长到 1 2 秒;
+ 服务降级:比如在商品秒杀时,部分用户会被引导到一个降级页面。
#### 2. 软状态
软状态也称为弱状态,是指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统整体的可用性,即允许不同节点间的数据同步存在延时。
#### 3. 最终一致性
最终一致性强调的是系统中所有的数据副本,在经过一段时间的同步后,最终需要达到一致的状态。
## 参考资料
主要摘录自:倪超 . 从 Paxos 到 Zookeeper——分布式一致性原理与实践 . 电子工业出版社 . 2015-02-01