CAP 和 BASE 理论笔记
CAP原理和BASE理论笔记
CAP 原理
CAP 是什么?
CAP 三个字母对应着三个属性,分别是:
- C:Consistency 一致性
- A:Availability 可用性
- P:Partition tolerance 分区容错性
CAP 原理又是什么?
CAP 原理,注意多了原理两个字,代表着上述3点,一个分布式系统最多只能同时做到两点,而没办法同时做到三点。
CAP 内容
一致性
- 强一致性,也称为原子一致性。任何时间下,所有节点的数据是一样的。举个例子,分布式数据库的串行化。比如说对订单的管理和生成。为了方便记忆,可以说的上是原子一致性。
- 弱一致性,并不要求实时的提供一致性,。比如说论坛的点赞,赞的数量错误,也并不会有太大的影响。
- 最终一致性,经过一段时间之后,可以访问到更新后的数据。
可用性
能否良好的为用户进行服务。
分区容错性
分布式系统在遇得到节点或者网络分区故障的时候,仍然能够对外提供满足一致性或者可用性服务。
CAP 定理证明
人们总是说分布式系统难以满足CAP三个条件,这样说法并不直观,因为很少提到设计思路,分布式系统中可能出现机器问题。考虑发生服务器连通的错误的状态下,CAP难以同时满足。
故障和CAP
假如 Server A 和 B 之间无法连通,当 Client A 更新Server A数据的时候。有下列几种考虑方式。
满足一致性分区容错性,禁止 Client A更新数据。但是这样会牺牲可用性。
满足可用性分区容错性,允许 Client A更新数据。但是这样会牺牲一致性。
满足可用性和一致性,让Server A 和 Server B的数据相互独立。但是牺牲了分区容错性,也就是A,B之间不交互数据。换句话说只要没有分区容错性,就不是一个分布式系统。
是不是叫CP&AP不兼容定理,会更好一些。
CAP理论的样例分析
基于 CP 一致性容错性的设计
- Zookeeper 如果 master 挂掉,那么就不会在重新选举期间不提供服务,换言之重新选举期间会放弃可用性。
基于 AP 可用性容错性的设计
- Eureka 所有节点之间是平等的。换言之任意节点存储的数据相同。若节点挂掉会自动切换到新节点。换言之,实际上最大限度了保证了可用性。Eureka 诸如注册网关这样的功能。
BASE 理论
BASE是下列三个单词的缩写,是互联网的实践。
- Basically Available(基本可用)
- Soft-state(软状态)
- Eventually Consistent(最终一致性)
与CAP不同的是,BASE 理论强调的是可以达到的状态。换言之,在可用上保证基本可用,利用软状态来达到最终一致性。
例:论坛中利用 Redis 来记录点赞数,然后将点赞的消息发送到kafka中,最后记录到MySQL中谁点过谁的赞。
- 基本可用:用Redis来存储已经点过赞了。
- 软状态:利用Redis和Kafka来存储中间的装填。
最终一致性:被写入数据库。之后在人搜索历史数据的时候保证不会有问题。
参考
本文作者 : Rothleer
原文链接 : https://rothleer.github.io/2020/09/17/CAP%20%E5%92%8C%20BASE%20%E7%90%86%E8%AE%BA%E7%AC%94%E8%AE%B0/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!