分布式事务和CAP,BASE理论(一)

分布式事务

对于单机系统我们很容易实现一套满足ACID的事务处理系统,但是在分布式数据库中,数字分散在各台不同的机器上,如何对这些数据进行分布式的事务处理具有非常大的调整。在分布式环境中会碰到很多问题,比如机器宕机和各种网络异常等。虽然问题很多,但是为了保证分布式应用程序的可靠性,分布式事务是无法回避的。
分布式事务是指事务的参与者,支持事务的服务器,资源服务器以及事务管理器分别位于分布式系统的不同节点上。一个分布式事务中会涉及多个数据源或业务系统的操作。

分布式事务场景

一个跨银行的转账操作涉及调用两个异地的银行服务,其中一个是本地银行提供的取款服务,另一个则是目标银行提供的存款服务,这两个服务本身是无状态并且是相互独立的,共同构成了一个完整的分布式事务。如果从本地银行取款成功,但是因为某种原因存款服务失败了,那么就必须回滚到取款前的状态,否则用户可能会发现自己的钱消失了。

CAP和BASE理论

对于本地事务或集中式事务处理系统,显然我们可以采用被实践证明很成熟的ACID模型来保证数据的严格一致性。但是随着分布式事务的出现,传统的单机事务已经无法胜任了。特别是对于高并发的互联网分布式系统来说,如果我们期望实现一套严格满足ACID特性的分布式事务,很可能出现在系统可用性和严格一致性之间的冲突----因为当我们要求分布式系统具有严格一致性时,就很可能会牺牲掉系统的可用性。但是,可用性又是所有消费者不允许我们讨价还价的系统属性。而对于一致性则是消费者对一个软件系统的刚需。因此,在可用性和一致性之间我们无法存在一个两全其美的方案,如何构建一个兼顾可用性和一致性的分布式系统呢?于是出现了CAP和BASE理论。

CAP理论

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

一致性

在分布式环境中,一致性指数据在多个副本之间保持一致的特性。当一个系统在数据一致的状态下执行更新操作后,应该保证系统的数据仍然处于一致的状态。
对于一个将数据副本分布在不同分布式节点上的系统来说,如果对第一个节点的数据进行了更新操作并且更新成功后,并没有使其它的节点上的数据得到相应的更新,于是对其它节点的数据进行读取的时候,获取的依然是老的数据(脏数据),这就是典型的分布式数据不一致的情况。在分布式系统中如果能做到针对一个数据项的更新操作执行成功后,所有的用户都可以读取到最新的值,那么这样的系统就被认为具有强一致性(或严格的一致性)。

可用性

可用性是指系统提供的服务必须一致处于可用的状态,对于用户的每一个操作请求总是在有限的时间内返回结果。
“有限的时间内”是指,对于用户的一个操作的请求,系统必须能够在指定的时间(即响应时间)内返回对应的处理结果,如果超过了这个时间范围,那么系统就被认为是不可用的。而且,“有限的时间内”是一个系统设计之初就设定好的系统运行指标,不同的系统之间会有很大的不同。比如,在支付系统中要求能够在3秒返回,这样不会影响用户的体验。而在搜索引擎中,比如Google要在0.3秒钟返回上千万个检索结果,否则用户会很失望,影响用户的体验。所以,“有限的时间内”在不同的系统差别很大。
“返回结果”是可用性另一个非常重要的指标,它要求系统在完成对用户请求的处理后,返回一个正常的响应结果。正常的响应结果通常能够明确地反映出对请求的处理结果,即成功或失败,而不是一个令用户感到困惑的结果。比如,返回结果是一个系统错误,如“OutOfMemoryError”等提示语,那么我们就认为此时这个系统不可用。

分区容错性

约束了一个分布式系统需要具有如下特征:分布式系统在遇到任何网络分区故障的时候,需要能够保证对外提供满足一致性和可用性的服务,除非整个网络环境都发送了故障。
网络分区是指在分布式系统中,不同的节点分布在不同的自网络(机房或异地网络等)中,由于一些特殊的原因导致这些自网络之间出现网络不连通的状况,但是各个自网络的内部网络是正常的,这样会导致整个系统的网络被切分成了若干孤立的区域。


CAP定理.png

CAP定理应用

放弃CAP定理 说明
放弃P 如果希望能够避免系统出现分区容错性的问题,简单做法就是将所有的数据(或者那些仅仅与事务相关的数据)都放到一个分布式节点上。这样的做法虽然无法100%地保证系统不会出错,但至少不会碰到由于网络分区带来的负面影响。但同时需要注意的是,放弃P就放弃了系统的可扩展性
放弃A 相对于放弃“分区容错性”来说,放弃可用性则正好相反,做法是一旦系统遇到网络分区或其他故障时,那么受到影响的服务需要等待一定的时间,因此在等待期间系统无法对外提供正常的服务,即不可用
放弃C 这里的放弃一致性,并不是完全不要数据的一致性了,如果这样的话,那么系统的数据就都没有意义了,整个系统就没有意义了。事实上,放弃一致性指的是放弃数据的强一致性,而保留数据的最终一致性。这样的系统无法保证数据保持实时一致性,但是能够保证的是:数据最终会达到一致的状态,这就引入了一个时间窗口的概念,具体多久能够达到数据一致性取决于系统的设计,主要包括数据副本在不同节点之间的复制时间长短

CAP定理结论

一个分布式系统不可能同时满足一致性,可用性和分区容错性这三个需求。另一个方面,对于一个分布式系统而言,分区容错性可以说是一个最基本的要求。因为既然是一个分布式系统,那么必然出现子网络,网络问题是一个必定会出现的异常情况,因此分区容错性也就成为了一个分布式系统必然要面对和解决的问题。因此,对于分布式系统而言,我们要把精力用在如何根据业务特点在C(一致性)和A(可用性)之间寻求平衡。

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