分布式系统之CAP定理

CAP定理是这样描述的:一个分布式系统不可能同时满足一致性(C:Consistency)、可用性(A:Availability)和分区容错性(P:Partition tolerance)这三个基本需求,最多只能同时满足其中两项。

本文主要从以下几个部分来展开说明:

1、什么是分布式系统以及为什么会受CAP定理限制?

2、什么是CAP?

3、分布式系统为什么最多同时满足CAP定理的其中两项?

一、什么是分布式系统以及为什么会受CAP定理限制?

George Coulouris(《Distributed Systems-Concepts and Design》作者)对分布式系统下了一个简单的定义:你会知道系统当中的某台电脑崩溃或停止运行了,但是你的软件永远不会。这句话非常简单,但也非常形象地说明了分布式系统的特点。

设计分布式系统的目的无非就是为了提升系统处理能力、增强系统稳定性等SLA(服务等级协议)指标,但每个系统的SLA指标可能都不太一样,并且每个指标对应的权重也不一样。比如微博可能更关注系统的可用性,数据只要最终一致即可,而银行系统相比可用性则更关注系统的数据一致性。但是分布式系统还是有以下几个通用的特点:

1、服务冗余。为系统的每种服务都提供若干冗余备份,当正常的服务出现问题时,系统启用冗余备份服务来接管,尽量保证每时每刻所有的请求都能够得到正常的处理。但这同时也带来了冗余服务之间的数据一致性问题。

2、高可扩展性。当系统的请求量或者计算量增加时,系统可以通过动态扩展的方式提高处理能力,以应付高峰期的流量。同样当系统的请求量或计算量减少时,系统可以通过动态减缩的方式减少服务器的运行,降低运行成本。但这也同时带来了当某台服务器down或者网络连接断了的问题。

3、透明性。用户无需关心所用的系统是分布式还是单体的,也不需关心分布式系统是有上千台还是只有几台服务器,更不需关心分布式系统的所有服务器是否都能正常工作。用户唯一关心的是自己的请求能否得到合理的处理。所以上面1、2点带来的问题,必须在分布式系统设计时进行解决,尽量减少对于用户的影响。

根据上面分布式系统的几个通用特点,在设计分布式系统时必须考虑以下三个问题:

1、数据的一致性问题。2、当某些服务不可用时的问题。3、当某些服务器不可通过网络通信时的问题。

上面这三个问题分别对应CAP中的一致性、可用性以及分区容错性,所以分布式系统的设计必须受限于CAP理论。

二、什么是CAP?

C(Consistency):一致性

一致性必然涉及到多个实体,如果只有一个实体就不存在是否一致的说法。比如一个人的队列就不存在整齐一致的说法,只有至少两个人的队列才会被认为是整齐一致或者不一致。

一致性是指系统在存在多个实体的情形下,对于系统内任意对象x,在任意时刻,不管是从实体a、实体b、...还是实体n获取到的数据应该是一致的。这里的一致性其实就是指强一致性。

拿某电商系统中的商品剩余库存举例:某个商品的当前库存是n,当被购买一件后,库存变为了n-1。那该 电商系统的所有用户查询该商品的库存时,如果返回的都是n-1,则说明该电商系统满足一致性。如果有些返回n-1,有些返回n,甚至其它的,则说明该电商系统不满足一致性。

A(Availability):可用性

可用性是指在系统的某些实体失效的前提下,系统还是能正常对外提供服务。当然如果整个系统下的所有实体都失效了,那整个系统也就失效了,系统就不存在可用性的说法了。

比如某电商系统部署了M1和M2服务来负载分担处理用户登陆请求。某个时刻M1服务突然挂了,那系统应该把所有的登陆请求都转发给M2服务来处理,保障所有的用户都能成功登陆。如果M2服务无法处理全部的请求,系统应该立即自动启动M3服务来负载分担,或者采取服务降级以及限流的方式,给用户一个合理的响应信息。

对于许多系统而言,四个9的(即99.99%)可用性都被认为是高可用性。

P(Partition tolerance):分区容错性

分区容错性是指系统的某些实体之间无法沟通时,整个系统会形成几个完全隔离的分区,系统能够容忍这种分区的异常,满足系统的一致性或者可用性,但是在满足分区容错性的前提下,一致性和可用性只能满足其中的一个。

比如某电商系统的下订单子系统和订单处理子系统之间无法通过网络通信了。那现在有两种情况:

第一种:这两个子系统还是正常对外提供服务,这样必然带来订单数据不一致的问题。

第二种:这两个子系统均不对外提供服务,这样必然带来可用性的问题。

三、分布式系统为什么最多满足CAP定理中的两项?

1、满足分区容错性的情况下,是否能同时满足一致性和可用性?

(1)如果要满足可用性,则无法满足一致性,则如下所示(x的值最初为2):


满足分区容错性+可用性

(2)如果要满足一致性,则无法满足可用性,则如下所示(x的值最初为2):


满足分区容错性+一致性

2、满足可用性的情况下,是否能同时满足一致性和分区容错性?

(1)如果要满足一致性,则无法满足分区容错性,则如下所示(x的值最初为2):


满足可用性+一致性

(2)如果要满足分区容错性,则无法满足一致性,则如下所示(x的值最初为2):


满足可用性+分区容错性

3、满足一致性的情况下,是否能同时满足可用性和分区容错性?

(1)如果要满足可用性,则无法满足分区容错性,则如下所示(x的值最初为2):


满足一致性+可用性

(2)如果要满足分区容错性,则无法满足可用性,则如下所示(x的值最初为2):


满足一致性+分区容错性


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

推荐阅读更多精彩内容