架构设计事务篇之CAP定理

avatar

概述

CAP定理其名称源自这三个单词的首字母, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)。要理解CAP到底说的是什么,那我们的先明确三个单词的确切含义。

分区容错性

在一个分布式的系统中,一般情况下节点之间的通信是正常的,但是当出现网络异常时造成节点之间无法彼此通信时,此时该系统会被异常的网络划分成好几个独立的区,
区内的节点可能可以彼此通信但区与区却不行,这便是分区现象,但是当网络从异常中恢复时分区现象也便会消失,节点之间的通信也会恢复到正常状态。

假如你的数据在系统中只有一份,那么当系统出现分区时,恰好该数据位于因网络异常处于分区状态的节点上,此时便无法对该数据进行读写,那么我们就可以说该分布式系统没分区容忍性。
如果要让系统具备分区容忍性,那么我们可以让分布式系统中的每个节点都存储一份该数据,当某个节点因分区无法访问时,可以访问其它网络正常的节点来获取数据,此时我们就说该分布式系统具有分区容忍性。

因此,一般分布式的系统都要支持分区容忍性,所以CAP中的P在分布式的系统中是必须要实现的一个特性,实现的方式是使用副本机制。

一致性

这里的一致性和数据库所说的一致性是有差异的,这里指的是在多副本的分布式数据系统中,向任意节点写入成功的数据和写之后从任意节点读取的数据,两者是一样的,也就是向任意节点发起写操作之后,其它节点的数据和该节点的数据是完全一致的状态。
比如,在一个有三个节点的分布式数据系统中,有一数据项A,它有三个副本分别位于三个节点上;
此时如果向三个节点中的任意节点发起写操作将A修改为1,修改成功后,立即从任意节点读取A的数据值,如果A的值等于1那么我们就说该系统具有一致性。

但是,当系统出现分区时,如果我们不采取任何措施,那么是无法保障数据的一致性的。
比如,刚开始数据A在节点1、节点2上的值为1,当节点1、节点2不同通信出现分区现象时,此时有一个用户向节点1发起修改A数据为2的请求,有另一个用户向节点2发起修改A数据为3的请求;
此刻如果允许两个用户的写入操作,那么势必造成A数据在节点1为2,在节点2为3不一致的情况,如何解决?

可用性

上面的例子,如果你选择在出现分区的时候允许各节点继续提供写服务,哪怕会发生数据不一致情况,那么你选择的就是可用性。
所以,可以看出当可用性优先时,数据一致性就得不到保障。

取舍

如上,如果出现分区我们选择可用性,那么就会以牺牲可用性为代价,但是这不意味我们放弃了一致性。
我们仍然可以尽可能的通过一些预防或补救措施来避免分区发生时数据的不一致。
比如,当系统探测到分区现象发生时,如果条件允许那么可以通过选举机制剔除异常的节点;
再如,当数据出现不一致时,可以按时间顺序对不一致的数据进行合并,当然合并可能也会像Git一样出现数据冲突的情况。
无论怎么说,大部分的分布式系统在A和C之间,一般都以可用性优先,然后尽可能的保障数据的一致性,如著名的BASE理论。

BASE

BASE理论是对以可用性优先的AP系统最好的补充理论,它强调如果我们无法保障数据的强一致性(在时间上表现为试试一致),那么我们可以通过事后的补救措施来实现数据最终的一致。
基于消息中间件实现数据的最终一致是BASE理论的一个应用实列,相较于2PC(两阶段事务)、3PC(三阶段事务)以及TCC来说,它不能实时保障数据一致,但可以在一定的期限内最终保障数据一致,而其它的一致性算法都有可能因为分区导致事务失败的可能。

扩展阅读

架构设计思维篇之结构

架构设计思维篇之概念

架构设计容错篇之重试

架构设计容错篇之熔断

架构设计容错篇之限流

架构设计事务篇之Mysql事务原理

架构设计事务篇之CAP定理

架构设计事务篇之分布式事务

架构设计消息篇之消息丢失

架构设计消息篇之保证消息顺序性

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

推荐阅读更多精彩内容