这篇论文主要讲述分布式的CAP原理并给出证明。Brewer 认为在分布式里有三个基本需求: Consistency(一致性)、Availability(可用性)、Partition-tolerance(分区容错性),但一个分布式系统是没办法同时满足这三个特性。
Consistency(一致性):是指所有的操作是满足原子性的,要么在所有节点都执行成功,要么都失败,保证一个操作得到的数据是一致的。
Availability(可用性) : 是指在分布式系统中,任一个请求应该都能得到响应。
Partition-tolerance(分区容错性): 是指分布性系统中任意节点的失败或者消息丢失,不会影响整个系统的运作。
Brewer主要给出的定理是在2个模型下的:异步网络模型(Asynchronous Networks model)和部分同步网络(Partially Synchronous networks model)。 异步网络模型是指里面没有时钟,节点只能基于接受到的消息来做决定。 部分同步网络则是有时钟,并且速率是一样的,但是时钟不一定同步,有可能在同一时间内各个节点的时间不同,即能够实现一个超时机制。
定理一:
在一个异步网络模型中,允许数据有丢失的情况下,不可能存在一个读/写数据操作满足可用性和原子一致性。
该定理的证明是用反证法,假设存在这么一个算法同时满足CAP三个特性,那么在一个只有2个节点{G1, G2}的网络下,在G1做一个写操作,然后在G2做一个读操作,因为有消息丢失,那么读的操作肯定不满足一致性,所以假设不成立。
推论一:
在异步网络模型中,即使无消息丢失,不可能存在一个读/写数据操作满足可用性和原子一致性。
这个推论主要的原因是在异步网络中,无法确定消息到底是丢失了还是延迟了,所以无法让别的节点做判断。 原因是异步网络没有超时机制。
定理二:
在半同步网络模型中,允许数据有丢失的情况下,不可能存在一个读/写数据操作满足可用性和原子一致性。
证明同定理一
但是在半同步网络中,如果无消息丢失,一个弱的满足CAP特性的系统是满足的:
* 对所有的数据访问,总返回一个结果
* 如果期间没有报文丢失,那么返回一个满足 consistency 要求的结果。
因为在半同步网络中,我们可以设定一个时间,假设超时了就返回失败。