CAP 和 BASE 理论笔记

发布 : 2020-09-17

CAP原理和BASE理论笔记

CAP 原理

CAP 是什么?

CAP 三个字母对应着三个属性,分别是:

  • C:Consistency 一致性
  • A:Availability 可用性
  • P:Partition tolerance 分区容错性

CAP 原理又是什么?

CAP 原理,注意多了原理两个字,代表着上述3点,一个分布式系统最多只能同时做到两点,而没办法同时做到三点。

CAP 内容

一致性

  • 强一致性,也称为原子一致性。任何时间下,所有节点的数据是一样的。举个例子,分布式数据库的串行化。比如说对订单的管理和生成。为了方便记忆,可以说的上是原子一致性。
  • 弱一致性,并不要求实时的提供一致性,。比如说论坛的点赞,赞的数量错误,也并不会有太大的影响。
    • 最终一致性,经过一段时间之后,可以访问到更新后的数据。

可用性

能否良好的为用户进行服务。

分区容错性

分布式系统在遇得到节点或者网络分区故障的时候,仍然能够对外提供满足一致性或者可用性服务。

CAP 定理证明

人们总是说分布式系统难以满足CAP三个条件,这样说法并不直观,因为很少提到设计思路,分布式系统中可能出现机器问题。考虑发生服务器连通的错误的状态下,CAP难以同时满足。

故障和CAP

image-20200918162636239

假如 Server A 和 B 之间无法连通,当 Client A 更新Server A数据的时候。有下列几种考虑方式。

  1. 满足一致性分区容错性,禁止 Client A更新数据。但是这样会牺牲可用性。

  2. 满足可用性分区容错性,允许 Client A更新数据。但是这样会牺牲一致性。

  3. 满足可用性和一致性,让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 许可协议。转载请注明出处!

博客已萌萌哒运行(●'◡'●)ノ♥
Theme - BMW | Made With 💗 | Powered by GodBMW