CAP概述

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

CAP定义

C(一致性)

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

三种一致性策略

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

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

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

A(可用性)

    服务一直可用,而且是正常响应时间。

P(分区容错性)

分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。

CAP权衡

    注意:C,A,P三者并不是平等的,对于一个分布式系统来说。P是一个基本要求,CAP三者中,只能在CA两者之间做权衡,并且要想尽办法提升P。故不考虑CA没有P的情况。

CP

    如果一个分布式系统不要求强的可用性,即容许系统停机或者长时间无响应的话,就可以在CAP三者中保障CP而舍弃A。

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

    如redis、Zookeeper等。

AP

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

    如12306、电商系统等

    但是,放弃了C,只是放弃了强一致性,系统仍会保证最终一致性。比如12306买票,你按照正常流程,付完款之后,过了一段时间,12306提示你出票失败,这就是最终一致性的表现。

参考

http://www.hollischuang.com/archives/666

11-06 20:59