JavaGuide知识点整理——CAP 理论和BASE理论解读

这两个理论都是对于分布式系统设计而言的。
CAP:Consistency(一致性),Availability(可用性),Partition Tolerance(分区容错)。这三个的单词的首字母组合。
BASE:Basically Available(基本可用),Soft-state(软状态),Eventually Consistent(最终一致性)三个短语的缩写。BASE理论是对CAP中一致性和可用性权衡的结果。其来源对于大规模互联网系统分布式实践的总结。是基于CAP定理逐渐演化而来的。它大大降低了我们对系统的要求。

CAP理论

CAP理论起源于2000年。是布鲁尔提出的。因此又被称为布鲁尔理论。

简介

CAP也就是Consistency(一致性),Availability(可用性),Partition Tolerance(分区容错性)这三个单词首字母组合。


CAP

其实最开始提出CAP猜想的时候,并没有详细定义三个单词的明确定义。所以这个解读有多种,下面是一种比较常见的解读:

  • 一致性:所有节点访问同一份最新的数据副本
  • 可用性:非故障的节点在合理的时间内返回合理的响应(不是错误或超时的响应)
  • 分区容错性:分布式系统出现网络分区的时候,仍然能够对外提供服务。

什么是网络分区?
分布式系统中,多个节点之间的网络本来是可以连通的,但是因为某些故障(比如部分节点网络出现问题)某些节点不连通了,整个网络就分成几块区域,这就叫网络分区。

不是所谓的三选二

其实cap不是只能实现三个中的两个。而是分区容错是基础,而C,A是二选一的。因为我们任何情况下都不能去实现客观的不可能。比如服务器爆炸,服务器被摒弃网络信号,服务器着火种种,这些是没办法去控制的。所以网络分区之后,P是前提。一致性和可用性只能二选一。

因此分布式系统理论上不可能选择CA架构,只能选择CP或者AP架构。
比如zookeeper,hbase就是CP架构,C阿萨Sandra,Eureka就是AP架构。Nacos不仅支持CP架构也支持AP架构。
为啥不能选择CA架构呢?举个例子:若系统出现分区,某个节点正在进行写操作。为了保证一致性,必须禁止其他节点的读写操作。但是这就和可用性冲突了。如果为了保证可用性,其他节点正常读写的话,又和一致性冲突了。’
选择CP还是AP的关键在于业务场景,没有定论。对于需要确保强一致性的场景,比如银行一般会保证CP。
另外其实如果网络分区正常的话,也就是P没有出现问题,那么A和C是可以同时保证的。

CAP实际应用案例

注册中心负责服务地址的注册与查找。相当于目录服务。服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小。


注册中心

常见的可以作为注册中心的组件有:zookeeper,euraka,nacos。

  1. ZooKeeper:保证的是CP。任何时刻对zookeeper的读请求都能得到一致性的结果。但是zookeeper不保证每次请求的可用性。比如在leader选举过程中或者半数以上机器不可用的时候服务就是不可用的。
  2. Eureka保证的是AP。Eureka在设计的时候就是优先保证可用性。在Eureka中不存在什么Leader节点。每个节点都是一样的,平等的。因此Eureka不会像zookeeper那样出现选举过程中或者半数以上机器不可用的时候服务就不可用。Eureka保证即使大部分节点挂掉也不会影响正常提供服务,只要有一个节点可用就行,但是这个节点上的数据可能不是最新的。
  3. Nacos不仅支持CP也支持AP。

总结

其实在分布式系统设计和开发的时候,我们不应该仅仅局限于CAP的问题,还要关注系统的扩展性,可用性等。
在系统发生网络分区的情况下,CAP理论只能满足CP或者AP。但是如果没有发生网络分区,其实C,A是可以同时保证的。
所以说,如果发生网络分区,我们要考虑CP还是AP。如果没有网络分区,我们要考虑如何保证CA。
其实这个CAP我觉得可以认为是一个选择题。用生活中一个比喻来说:对一个小孩子来说,如果父母离婚,是跟爸爸还是跟妈妈。
首先前提要父母离婚,所以才会有接下来的选择(CAP中前提出现了网络分区,才会有一致性和可用性的选择)
然后跟妈妈还是爸爸只能是二选一的(出现P以后,A和C只能选一个)
至于到底跟谁,其实都要根据实际情况来看。而我们到底选择哪个自然也要看我们更在意什么。
比如银行转账,如果出现了P,保证可用性而放弃一致性的话。A转给B100元钱。A这边少100.但是因为B那边网不通,B没有多一百。 这样100块钱蒸发了。这样肯定不行,所以我们完全可以在出现P以后,保证一致性而放弃可用性,不让A转账了。这样哪怕A不乐意不开心,但是整体的逻辑是对的。
而对于别的场景,比如说浏览视频点赞,这个时候出现了网络分区,你这边点了可能服务器记录不上。但是这又不妨碍让用户先点着,最多最多最后数据丢失了,那估计用户还会以为自己记错了而已。所以这个时候我们完全可以选择可用性而不是一致性。
另外CAP其实可以认为是个预想中的场景。正常来说P是不会出现的,可是我们在做程序要预测到可能出现的bug。所以哪怕说Euraka选择了AP,但是也没总出现什么数据不一致,zookeeper选择了CP,但是大部分时间也都是可用的。

BASE理论

BASE理论起源于2008年。

简介

BASE是Basically Available(基本可用),Soft-state(软状态)和Eventually Consistent(最终一致性)三个短语组成。BASE理论是对CAP中一致性和可用性权衡的结果。其来源于对大规模互联网系统分布式实践的总结。是基于CAP定理逐渐演化而来的,它大大降低了我们对系统的要求。

BASE理论的核心思想

即使无法做到强一致性,但是每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。
也就是牺牲数据的一致性来满足系统的高可用性。系统中一部分数据不可用或者不一致时,仍需要保持系统整体主要可用。
其实BASE可以看成是CAP中关于AP的一个补充。AP方案是放弃一致性选择可用性。但是只是在系统发生分区的时候放弃一致性,而不是永久放弃。所以在分区故障恢复后,系统最终应该还是要达到一致性的。这就是BASE理论延申的地方。

BASE理论三要素

BASE
  1. 基本可用
    基本可用是指分布式系统在出现不可预知故障的时候,允许损失部分可用性。但是这决不等于系统不可用。
    什么叫允许损失部分可用性呢?

    • x响应时间上的损失:正常情况下0.1s返回结果,但是由于系统故障,变成1s返回结果了。
    • 系统功能上的损失:正常情况下用户可以使用系统的全部功能,但是由于访问量剧增,系统的部分非核心功能无法使用。
  2. 软状态
    软状态指允许系统中的数据存在中间状态(CAP理论中的数据不一致),并认为该中间状态不会影响系统的整体可用性。即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。

  3. 最终一致性
    最终一致性强调的是系统中所有的数据副本,经历过一段时间的同步后,最终能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证最终数据一致而不是实时强一致。

分布式一致性的三种级别:

  1. 强一致性:系统写入什么读出来的就是什么
  2. 弱一致性:不一定读取到的是最新的值,也不保证多长时间后读到的数据是最新的。只会尽量保证某个时刻达到数据一致的状态
  3. 最终一致性:弱一致性的升级版,系统会保证在一定时间内达到数据一致的状态。

目前在要求不严格的情况,比较常见的还是最终一致性级别。

实现最终一致性的具体方式是什么?

  • 读时修复:在读取数据时,检测数据不一致,进行修复。比如在查询的时候如果检测到不同节点的副本数据不一致,则自动修复数据。
  • 写时修复:在写入数据的时候,检测数据的不一致时,进行修复。如果写失败了就将数据缓存下来,然后定时重传,修复数据的不一致性。
  • 异步修复:这个是最常用的方式,通过定时对账,检测副本数据的一致性并修复。

比较推荐写时修复,这种方式对性能消耗比较低。
本篇笔记就记到这里,如果稍微帮到你了记得点个喜欢点个关注,也祝大家工作顺顺利利!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,013评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,205评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,370评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,168评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,153评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,954评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,271评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,916评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,382评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,877评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,989评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,624评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,209评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,199评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,418评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,401评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,700评论 2 345

推荐阅读更多精彩内容