Most of the data, Most of the time.
一. 什么是CAP
1. Atomic Data Objects (Consistent)
为了保证一致性,所有的操作必需保证有序,且每一个操作看起来在一瞬间完成。这等价于要求分布式的共享内存好像就在一个节点上,一次相应一个操作。对于原子的读写共享内存操作有一个重要的性质,即当完成一个写操作后,读操作必需返回正确的值。这是一致性最简单的模型。
2. Available Data Objects(Availble)
关于可用性一个比较弱的定义:对于一个算法完成的时间没有限制,即允许无限制的计算。一个比较强的定义是:即使当严重网络故障发生时,每个请求都必须要能终止(返回给客户端)。
3. Partition Tolerance
分区即当不允许消息任意的在节点间传输。当一个网络被分割,从一个分区内的任意节点往另一个分区的节点发送的消息都会丢失。
例如:如果有一个数据库允许在80个节点上分布于两个机架,当连接两个机架的的网络故障时,现在这个数据库是被分区的。如果数据库是分区容错的,那么数据库现在在各自的分区仍然可以进行读写操作。如果不是分区容错,那么这个集群就完全不能访问。
定理:任何分布式系统只可同时满足以上二点,没法三者兼顾。
忠告:架构师不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。
二. 概念、定理
两个基本概念:
异步网络模型 没有时钟,节点所做的决定只依据收到的消息和本地计算
In the asynchronous model,there is no clock,and nodes must make decisions based only on the messages received and local computation.
部分同步网络模型 network to have a clock,且每个节点的时钟频率是一样的,但是节点自身是不同步的。因此同一时刻不同节点有可能有不同的值。
定理一:在异步网络模型中,对数据对象的读写操作无法保证以下属性:对所有的正常操作(包括消息丢失)都具有有效性和一致性。
Theorem1 It is impossible in the asynchronous network model to implement a read/write data object that guarantees the following properties:
• Availability
• Atomicconsistency
in all fair executions(including those in which messages are lost).
推论一:在异步网络模型中,对数据对象的读写操作无法保证以下属性:对所有正常的执行都保证有效性,且在没有数据丢失的执行中保证一致性
Corollary1.1 It is impossible in the asynchronous network model to implement a read/write data object that guarantees the following properties:
• Availability, in all fair executions,
• Atomic consistency, infair executions in which no messages are lost.
CAP理论的证明:
1. 在网络中有两个节点,N1和N2。它们共享数据V,值为V0。对A和B分别是是节点N1和N2上安全、可靠的操作。
2. A写一个新的值给V,B读取V的新值。
1)A给V赋了一个新值V1
2)从N1往N2发送一个消息M,更新N2中V的值
3)从B中读取V的值,返回值V1
3. 假如A和B被分区(分割),N1和N2的值是非一致的,N2返回V0
三. 任意两个组合均成立
1. 原子性和分区容错性
用一个指定节点维护数据的值。当一个节点收到客户发来的请求时,将该请求转发给指定节点,当从指定节点收到确认消息后,节点再发送一个反馈信息给客户端。
2. 原子性和有效性
如果没有分区,上面的算法同样满足这个条件
3. 有效性和分区容错性
如果没有并发请求,服务对任意的请求都可以返回初始值




