对cap定理的理解

原创
2014/05/27 00:45
阅读数 252

CAP定理是设计分布式系统的基础。

CAP定理指出分布式系统不能同时满足以下三个点:

1.一致性(Consistent)

2.可用性(Availability)

3.分区容忍性(Partition Tolerance)

这三点对于设计分布式的web services是非常重要的。

这里先说一下这三点的含义,要理解它们的含义,首先需要知道CAP定理提出时是针对分布式的web services系统,这样一个系统是由N多节点构成,为了便于说明,我们假定系统只有两个节点{N1,N2}。

一致性是说在节点上的操作是原子性的,对一个节点上的数据的修改,在所有节点上同步,这期间不能有其他操作。比如一个在N1上的write操作,必须是原子性的,也即在N1写完并同时同步到N2上,这整个过程是原子性的,在这个写的过程中不能有读的操作,否则可能读到不一致的结果(例如N1修改完数据但N2还未同步)。

可用性是指节点一旦接受到请求(比如web request),必须给予 回应。回应的内容可以是成功取到的数据或者失败消息。比如N1接到一个请求,必须返回一个请求结果或者失败结果,如果不给予任何回应,就违背了可用性。

分区容忍性是指允许节点间丢失任何消息。节点间的通信会发送消息,这些消息在网络中可能会丢失,这是客观存在的。比如N1和N2在一个局域网里相互发送消息,不管使用什么协议(tcp,udp等),两者之间都可能丢失消息包,理论上最坏情况会丢掉所有的包。

所以CAP定理是说,分布式系统在有消息丢失的网络节点间不可能同时保证操作的原子性以及对请求必定给予回应这一特性。例如满足原子性不能满足可用性的情况:在N1上写数据,N2需要同步数据,假设N1和N2之间的消息全部丢失(最坏的情况),此时N2上的数据不一致,要保证这个写操作的原子性,需要等到N2上的数据同步完成,此时其他操作都不能进行,节点接受的请求不能给予回应,系统满足不了可用性。



展开阅读全文
打赏
0
3 收藏
分享
加载中
更多评论
打赏
0 评论
3 收藏
0
分享
返回顶部
顶部