• 航旅纵横疑似泄露隐私,企业应管好用户信息 2019-05-18
  • 美国防部宣布暂停8月美韩联合军演 2019-05-17
  • 党媒《红网湘乡手机报》是如何做到接地气、聚人气的? 2019-05-17
  • 刘嘉玲:长江后浪一直涌来 2019-05-16
  • 营养-热门标签-华商生活 2019-05-16
  • 这个五月不一般 《复仇者联盟3》领衔大片季 2019-05-13
  • 走错片场?中国奥运队服惊现世界杯 2019-05-13
  • 共产主义劳动不再是谋生手段就是劳动不再是看着就想笑鼓吹私有制下的责权利所谓平滑对接下的为生存而做资本的雇佣劳动奴隶劳动,而是在共产主义公有制里劳动由于一辈子做 2019-05-09
  • 勤劳只是致富的要素之一,生产力水平也是致富的要素之一。生产力水平低下导致农民勤劳却不能致富,因此,很多农民选择了进城打工。一个劳动力在刀耕火种的条件下,一年能够 2019-05-09
  • 外交部发言人陆慷就美方公布对华贸易措施答记者问 2019-04-26
  • 乌鲁木齐市天山区设红榜黑榜 每月考核辖区卫生 2019-04-23
  • “五毒月”禁忌应当学 竹林日记(0074) 2019-04-23
  • 多学科构建“大介入” 中国介入医师年会南京召开 2019-04-18
  • 明星高考奇葩事杨幂总分第一 赵薇丢准考证(组图) 2019-04-12
  • 西北大学新传院与西部网签约 开启校媒合作新模式 2019-04-12
  • 冰球刀价格:

    北京 切换校区

    全国24小时免费热线

    400-009-1906

    大数据开发者应该知道的分布式系统CAP理论

    时间:2018-11-22   来源:尚学堂   阅读:177

    ? ? ? ?无论你是一个系统架构师,还是一个普通开发,当你开发或者设计一个分布式系统的时候,CAP理论是无论如何也绕不过去的。本文就来介绍一下到底什么是CAP理论,如何证明CAP理论,以及CAP的权衡问题。

    ? ? ? ?CAP理论概述

    ? ? ? ?CAP理论:一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。

    ? ? ? ?读者需要注意的的是,CAP理论中的CA和数据库事务中ACID的CA并完全是同一回事儿。两者之中的A都是C都是一致性(Consistency)。CAP中的A指的是可用性(Availability),而ACID中的A指的是原子性(Atomicity),切勿混为一谈。

    ? ? ? ?CAP的定义

    ? ? ? ?Consistency 一致性

    ? ? ? ?一致性指“all nodes see the same data at the same time”,即更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致,所以,一致性,说的就是数据一致性。分布式的一致性

    ? ? ? ?对于一致性,可以分为从客户端和服务端两个不同的视角。从客户端来看,一致性主要指的是多并发访问时更新过的数据如何获取的问题。从服务端来看,则是更新如何复制分布到整个系统,以保证数据最终一致。

    ? ? ? ?一致性是因为有并发读写才有的问题,因此在理解一致性的问题时,一定要注意结合考虑并发读写的场景。

    ? ? ? ?从客户端角度,多进程并发访问时,更新过的数据在不同进程如何获取的不同策略,决定了不同的一致性。

    ? ? ? ?三种一致性策略

    ? ? ? ?对于关系型数据库,要求更新过的数据能被后续的访问都能看到,这是强一致性。

    ? ? ? ?如果能容忍后续的部分或者全部访问不到,则是弱一致性。

    ? ? ? ?如果经过一段时间后要求能访问到更新后的数据,则是最终一致性。

    ? ? ? ?CAP中说,不可能同时满足的这个一致性指的是强一致性。

    ? ? ? ?Availability 可用性

    ? ? ? ?可用性指“Reads and writes always succeed”,即服务一直可用,而且是正常响应时间。

    ? ? ? ?对于一个可用性的分布式系统,每一个非故障的节点必须对每一个请求作出响应。所以,一般我们在衡量一个系统的可用性的时候,都是通过?;奔淅醇扑愕?。

    ? ? ? ?通常我们描述一个系统的可用性时,我们说淘宝的系统可用性可以达到5个9,意思就是说他的可用水平是99.999%,即全年?;奔洳怀?(1-0.99999)*365*24*60 = 5.256 min,这是一个极高的要求。

    ? ? ? ?好的可用性主要是指系统能够很好的为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。一个分布式系统,上下游设计很多系统如负载均衡、WEB服务器、应用代码、数据库服务器等,任何一个节点的不稳定都可以影响可用性。

    ? ? ? ?Partition Tolerance分区容错性

    ? ? ? ?分区容错性指“the system continues to operate despite arbitrary message loss or failure of part of the system”,即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。

    ? ? ? ?分区容错性和扩展性紧密相关。在分布式应用中,可能因为一些分布式的原因导致系统无法正常运转。好的分区容错性要求能够使应用虽然是一个分布式系统,而看上去却好像是在一个可以运转正常的整体。比如现在的分布式系统中有某一个或者几个机器宕掉了,其他剩下的机器还能够正常运转满足系统需求,或者是机器之间有网络异常,将分布式系统分隔未独立的几个部分,各个部分还能维持分布式系统的运作,这样就具有好的分区容错性。

    ? ? ? ?简单点说,就是在网络中断,消息丢失的情况下,系统如果还能正常工作,就是有比较好的分区容错性。

    ? ? ? ?CAP的证明

    ? ? ? ?如上图,是我们证明CAP的基本场景,网络中有两个节点N1和N2,可以简单的理解N1和N2分别是两台计算机,他们之间网络可以连通,N1中有一个应用程序A,和一个数据库V,N2也有一个应用程序B2和一个数据库V。现在,A和B是分布式系统的两个部分,V是分布式系统的数据存储的两个子数据库。

    ? ? ? ?在满足一致性的时候,N1和N2中的数据是一样的,V0=V0。在满足可用性的时候,用户不管是请求N1或者N2,都会得到立即响应。在满足分区容错性的情况下,N1和N2有任何一方宕机,或者网络不通的时候,都不会影响N1和N2彼此之间的正常运作。

    ? ? ? ?如上图,是分布式系统正常运转的流程,用户向N1机器请求数据更新,程序A更新数据库Vo为V1,分布式系统将数据进行同步操作M,将V1同步的N2中V0,使得N2中的数据V0也更新为V1,N2中的数据再响应N2的请求。

    ? ? ? ?这里,可以定义N1和N2的数据库V之间的数据是否一样为一致性;外部对N1和N2的请求响应为可用行;N1和N2之间的网络环境为分区容错性。这是正常运作的场景,也是理想的场景,然而现实是残酷的,当错误发生的时候,一致性和可用性还有分区容错性,是否能同时满足,还是说要进行取舍呢?

    ? ? ? ?作为一个分布式系统,它和单机系统的最大区别,就在于网络,现在假设一种极端情况,N1和N2之间的网络断开了,我们要支持这种网络异常,相当于要满足分区容错性,能不能同时满足一致性和响应性呢?还是说要对他们进行取舍。

    ? ? ? ?假设在N1和N2之间网络断开的时候,有用户向N1发送数据更新请求,那N1中的数据V0将被更新为V1,由于网络是断开的,所以分布式系统同步操作M,所以N2中的数据依旧是V0;这个时候,有用户向N2发送数据读取请求,由于数据还没有进行同步,应用程序没办法立即给用户返回最新的数据V1,怎么办呢?

    ? ? ? ?有二种选择,第一,牺牲数据一致性,保证可用性。响应旧的数据V0给用户;

    ? ? ? ?第二,牺牲可用性,保证数据一致性。阻塞等待,直到网络连接恢复,数据更新操作M完成之后,再给用户响应最新的数据V1。

    ? ? ? ?这个过程,证明了要满足分区容错性的分布式系统,只能在一致性和可用性两者中,选择其中一个。

    ? ? ? ?CAP权衡

    ? ? ? ?通过CAP理论及前面的证明,我们知道无法同时满足一致性、可用性和分区容错性这三个特性,那要舍弃哪个呢?

    ? ? ? ?我们分三种情况来阐述一下。

    ? ? ? ?CA without P

    ? ? ? ?这种情况在分布式系统中几乎是不存在的。首先在分布式环境下,网络分区是一个自然的事实。因为分区是必然的,所以如果舍弃P,意味着要舍弃分布式系统。那也就没有必要再讨论CAP理论了。这也是为什么在前面的CAP证明中,我们以系统满足P为前提论述了无法同时满足C和A。

    ? ? ? ?比如我们熟知的关系型数据库,如My Sql和Oracle就是保证了可用性和数据一致性,但是他并不是个分布式系统。一旦关系型数据库要考虑主备同步、集群部署等就必须要把P也考虑进来。

    ? ? ? ?其实,在CAP理论中。C,A,P三者并不是平等的,CAP之父在《Spanner,真时,CAP理论》一文中写到:

    ? ? ? ?如果说Spanner真有什么特别之处,那就是谷歌的广域网。Google通过建立私有网络以及强大的网络工程能力来保证P,在多年运营改进的基础上,在生产环境中可以最大程度的减少分区发生,从而实现高可用性。

    ? ? ? ?从Google的经验中可以得到的结论是,无法通过降低CA来提升P。要想提升系统的分区容错性,需要通过提升基础设施的稳定性来保障。

    ? ? ? ?所以,对于一个分布式系统来说。P是一个基本要求,CAP三者中,只能在CA两者之间做权衡,并且要想尽办法提升P。

    ? ? ? ?CP without A

    ? ? ? ?如果一个分布式系统不要求强的可用性,即容许系统?;蛘叱な奔湮尴煊Φ幕?,就可以在CAP三者中保障CP而舍弃A。

    ? ? ? ?一个保证了CP而一个舍弃了A的分布式系统,一旦发生网络故障或者消息丢失等情况,就要牺牲用户的体验,等待所有数据全部一致了之后再让用户访问系统。

    ? ? ? ?设计成CP的系统其实也不少,其中最典型的就是很多分布式数据库,他们都是设计成CP的。在发生极端情况时,优先保证数据的强一致性,代价就是舍弃系统的可用性。如Redis、HBase等,还有分布式系统中常用的Zookeeper也是在CAP三者之中选择优先保证CP的。

    ? ? ? ?无论是像Redis、HBase这种分布式存储系统,还是像Zookeeper这种分布式协调组件。数据的一致性是他们最最基本的要求。一个连数据一致性都保证不了的分布式存储要他有何用?

    ? ? ? ?在我的Zookeeper介绍(二)——Zookeeper概述一文中其实介绍过zk关于CAP的思考,这里再简单回顾一下:

    ? ? ? ?ZooKeeper是个CP(一致性+分区容错性)的,即任何时刻对ZooKeeper的访问请求能得到一致的数据结果,同时系统对网络分割具备容错性。但是它不能保证每次服务请求的可用性,也就是在极端环境下,ZooKeeper可能会丢弃一些请求,消费者程序需要重新请求才能获得结果。ZooKeeper是分布式协调服务,它的职责是保证数据在其管辖下的所有服务之间保持同步、一致。所以就不难理解为什么ZooKeeper被设计成CP而不是AP特性的了。

    ? ? ? ?AP wihtout C

    ? ? ? ?要高可用并允许分区,则需放弃一致性。一旦网络问题发生,节点之间可能会失去联系。为了保证高可用,需要在用户访问时可以马上得到返回,则每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。

    ? ? ? ?这种舍弃强一致性而保证系统的分区容错性和可用性的场景和案例非常多。前面我们介绍可用性的时候说到过,很多系统在可用性方面会做很多事情来保证系统的全年可用性可以达到N个9,所以,对于很多业务系统来说,比如淘宝的购物,12306的买票。都是在可用性和一致性之间舍弃了一致性而选择可用性。

    ? ? ? ?你在12306买票的时候肯定遇到过这种场景,当你购买的时候提示你是有票的(但是可能实际已经没票了),你也正常的去输入验证码,下单了。但是过了一会系统提示你下单失败,余票不足。这其实就是先在可用性方面保证系统可以正常的服务,然后在数据的一致性方面做了些牺牲,会影响一些用户体验,但是也不至于造成用户流程的严重阻塞。

    ? ? ? ?但是,我们说很多网站牺牲了一致性,选择了可用性,这其实也不准确的。就比如上面的买票的例子,其实舍弃的只是强一致性。退而求其次保证了最终一致性。也就是说,虽然下单的瞬间,关于车票的库存可能存在数据不一致的情况,但是过了一段时间,还是要保证最终一致性的。

    ? ? ? ?对于多数大型互联网应用的场景,主机众多、部署分散,而且现在的集群规模越来越大,所以节点故障、网络故障是常态,而且要保证服务可用性达到N个9,即保证P和A,舍弃C(退而求其次保证最终一致性)。虽然某些地方会影响客户体验,但没达到造成用户流程的严重程度。

    ? ? ? ?适合的才是最好的

    ? ? ? ?上面介绍了如何CAP中权衡及取舍以及典型的案例。孰优孰略,没有定论,只能根据场景定夺,适合的才是最好的。

    ? ? ? ?对于涉及到钱财这样不能有一丝让步的场景,C必须保证。网络发生故障宁可停止服务,这是保证CA,舍弃P。比如前几年支付宝光缆被挖断的事件,在网络出现故障的时候,支付宝就在可用性和数据一致性之间选择了数据一致性,用户感受到的是支付宝系统长时间宕机,但是其实背后是无数的工程师在恢复数据,保证数数据的一致性。

    ? ? ? ?对于其他场景,比较普遍的做法是选择可用性和分区容错性,舍弃强一致性,退而求其次使用最终一致性来保证数据的安全。这其实是分布式领域的另外一个理论——BASE理论。我们下一篇文章再来介绍。

    ? ? ? ?总结

    ? ? ? ?无论你是一个架构师,还是一个普通开发,在设计或开发分布式系统的时候,不可避免的要在CAP中做权衡。需要根据自己的系统的实际情况,选择最适合自己的方案。

     

    相关资讯

    • 北京校区
    • 山西校区
    • 郑州校区
    • 武汉校区
    • 四川校区
    • 长沙校区
    • 深圳校区
    • 上海校区
    • 广州校区
    • 保定招生办

    北京海淀区校区(总部):北京市海淀区西三旗街道建材城西路中腾建华商务大厦东侧二层尚学堂
    北京京南校区:北京亦庄经济开发区科创十四街6号院1号楼 赛蒂国际工业园
    咨询电话:400-009-1906 / 010-56233821
    面授课程: JavaEE培训、 大数据就业班培训、 大数据云计算周末班培训、 零基础大数据连读班培训、 大数据云计算高手班培训、 人工智能周末班培训、人工智能+Python全栈培训、 H5+PHP全栈工程师培训

    山西学区地址:山西省晋中市榆次区大学城大学生活广场万科商业A1座702

    郑州学区地址:河南电子商务产业园6号楼4层407
    咨询电话:0371-55177956

    武汉学区地址:湖北省武汉市江夏区江夏大道26号 宏信悦谷创业园4楼
    咨询电话:027-87989193

    四川学区地址:成都市高新区锦晖西一街99号布鲁明顿大厦2栋1003室
    咨询电话:028-65176856 / 13880900114

    网址://www.cssxt.com/
    咨询电话:0731-83072091

    深圳校区地址:深圳市宝安区航城街道航城大道航城创新创业园A4栋210(固戍地铁站C出口)
    咨询电话:0755-23061965 / 18898413781

    上海尚学堂松江校区地址:上海市松江区荣乐东路2369弄45号绿地伯顿大厦2层
    咨询电话:021-67690939

    广州校区地址:广州市天河区元岗横路31号慧通产业广场B区B1栋6楼尚学堂(地铁3号线或6号线到“天河客运站”D出口,右拐直走约800米)
    咨询电话:020-2989 6995

    保定招生办公室

    地址:河北省保定市竞秀区朝阳南大街777号鸿悦国际1101室

    电话:15132423123

    Copyright 2006-2019 北京尚学堂科技有限公司  京ICP备13018289号-19  京公网安备11010802015183  
    媒体联系:18610174079 闫老师  

    Java基础班,免费试学三周

  • 航旅纵横疑似泄露隐私,企业应管好用户信息 2019-05-18
  • 美国防部宣布暂停8月美韩联合军演 2019-05-17
  • 党媒《红网湘乡手机报》是如何做到接地气、聚人气的? 2019-05-17
  • 刘嘉玲:长江后浪一直涌来 2019-05-16
  • 营养-热门标签-华商生活 2019-05-16
  • 这个五月不一般 《复仇者联盟3》领衔大片季 2019-05-13
  • 走错片场?中国奥运队服惊现世界杯 2019-05-13
  • 共产主义劳动不再是谋生手段就是劳动不再是看着就想笑鼓吹私有制下的责权利所谓平滑对接下的为生存而做资本的雇佣劳动奴隶劳动,而是在共产主义公有制里劳动由于一辈子做 2019-05-09
  • 勤劳只是致富的要素之一,生产力水平也是致富的要素之一。生产力水平低下导致农民勤劳却不能致富,因此,很多农民选择了进城打工。一个劳动力在刀耕火种的条件下,一年能够 2019-05-09
  • 外交部发言人陆慷就美方公布对华贸易措施答记者问 2019-04-26
  • 乌鲁木齐市天山区设红榜黑榜 每月考核辖区卫生 2019-04-23
  • “五毒月”禁忌应当学 竹林日记(0074) 2019-04-23
  • 多学科构建“大介入” 中国介入医师年会南京召开 2019-04-18
  • 明星高考奇葩事杨幂总分第一 赵薇丢准考证(组图) 2019-04-12
  • 西北大学新传院与西部网签约 开启校媒合作新模式 2019-04-12
  • 重庆幸运农场官方开奖结果 足彩比分 福彩3d天罡八卦图 新疆时时彩2018022252 竟彩直播比分直播 全天幸运飞艇pk10计划数据 竞彩足球总进球投注 四川时时彩在线投注 济南彩票销售员的吗 北京快乐8投注手机版 山西省福利彩票投注站 中国足彩网欧洲杯 牛牛金服 双色球开奖结 北京pk10大特秘籍 重庆百变王牌