Brewer的CAP理论

CAP理论是由EricBrewer提出的分布式系统中最重要的理论之一。Brewer指出,在分布式环境中设计和部署应用的时候需要关注3点非常重要的全局因素:一致性(Consistency)、可用性(Availability)、分区(Partition)。CAP理论指出,无法设计一种分布式协议,使得同时完全具备CAP三个属性。


用一个例子来解释CAP理论。假设你想在京东买一本刘兵的《Web数据挖掘》,用来在即将到来的假期中阅读。但是京东的库存里只剩下1本书了。你需要做的是在京东检索到这本书,并且确定能够在你度假前送到你的手上,一切妥当后便将其加入到购物篮。可能这时你并未急于付账,你会继续选择在京东浏览一些其他的物品(凑单,你懂的)。此时,可能会存在另外一个人,也将仅存的这本《web数据挖掘》放到了购物篮,并进入付款环节。

(1)一致性Consistency

这里的C同时也是数据库的ACID属性中的C。在买书的那个例子里,你要么能买到书,要么不能买到书,你不可能仅一半的加入或一半的购买这本书。因为仅剩余一本书,因此只能有一个人在第二天收到这本书。如果两个人都能完成付款手续,则就不能满足一致性,这也将会导致严重的问题(如果存在更多的人买这本书)。

我们可以使用数据库来解决一致性问题,数据库的伟大之处在于提供了ACID属性,不仅能满足一致性,还能满足隔离性。当一个顾客在购买这本书时(库存减一)时,同时在购物篮里的数量增加一,这样另一个顾客需要等候(几毫秒),以保持数据的一致性。

(2)可用性Availability

可用性意味着即使系统出现异常也应该是可用的(依然能够正确的提供服务)。当你在买书的时候,你需要得到的是系统的相应,而不是浏览器告诉你该站点通讯异常。Gilbert和Lynch在他们怎么CAP理论的过程中指出,往往在你最需要可用性的时候,它却置你不顾。因为当站点访问越加频繁的时候,站点的服务质量也将直线下降。一个服务是可用的,但却不能被访问,这对任何人而言都毫无益处。

(3)分区容忍PartitionTolerance

当你的数据存在于不同的节点上(在分布式环境下,往往如此),分区的风险将会出现。分区意味着,如果网络电缆被割断了,那么节点A将不能与节点B通信。分区容忍要求能够对网络分区这种异常情况进行容错处理。


CAP理论的意义

热力学第二定律说明了永动机是不可能存在的,不用妄图去设计永动机。同样,CAP理论的意义就在于明确提出了不要去妄图设计一种对CAP三大属性都完全拥有的完美系统,因为这种系统在理论上就已经被证明不存在了。


CAP理论的简单证明:


图1

在图1所示的网络中有两个节点,N1和N2。他们同时共享同一份数据V(《Web数据挖掘》这本书在库存中的拷贝数量),其此刻的值为V0。在N1上运行算法A(这里假设A是理想的——安全无Bug),在N2上运行算法B(同样是理想的)。在这个例子中,A向V写入新的值,然后B从V读取值。

理想情况下,流程是这样的:首先,A向V写入新值V1,然后更新消息M从N1传递到N2,这样,任何从B读取的数据都将是V1。如图2所示。


图2

如果网络出现分区(即消息无法从N1传送到N2),他们在N2将无法读取到一致的数据,如图3所示。如果希望系统依旧是一致的,则此时需要停止更新服务,即不再I许改数据,从而让两个站点的数据保持一致;如果希望系统依旧可以提供更新服务,因为N1到N2的消息不可达,则无法保证N1和N2上的数据时一致的。


图3

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值