码迷,mamicode.com
首页 > 其他好文 > 详细

关于CAP定理的简单理解

时间:2015-04-01 21:45:17      阅读:261      评论:0      收藏:0      [点我收藏+]

标签:

CAP定理简介

在理论计算机科学中,CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer‘s theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点:

  1. 一致性(Consistency):同一个数据在集群中的所有节点,同一时刻是否都是同样的值。
  2. 可用性(Availability):集群中一部分节点故障后,集群整体是否还能处理客户端的更新请求。
  3. 分区容忍性(Partition tolerance):是否允许数据的分区,分区的意思是指是否允许集群中的节点之间无法通信。

我的个人理解

我觉得,理解CAP可以从两个阶段去考虑。

只考虑CP

比如,一个数据在两台机器上,然后这两台机器之间无法通信了,即我们首先选择了P;然后,此时,我认为已经不可能做到C了。因为这两台机器之间已经无法通信,那就无法保证两台机器之间的数据一致性了。也就是说,要在P的情况下,做到C是不可能的。【这点相信有很多人会有意见,欢迎大家和我交流】

把A也考虑进来

这个会复杂很多。由于分布式系统,我们无法不选择P,因为由于网络的不可靠性,必定会导致两个机器节点之间无法进行网络通信,从而导致数据无法同步。这样的现实导致我们必须选择P。然后,在这个前提下,我们要么选择A,要么选择C。下面分析一下原因:

  1. 当两台机器节点之间无法通信时(即选择了P),如果我们继续允许客户端写入数据到其中一台,那就必然导致数据不一致,因为这个数据无法同步到另一台机器;这种做法就是选择了A,牺牲了C;
  2. 当两台机器节点之间无法通信时(即选择了P),如果我们不允许客户端写入数据到任何一台,那数据虽然是一致的,但系统就不可用了;这种做法就是选择了C,牺牲了A;

如何在保证PC的情况下,尽量提高A?

答案就是NRW算法。

假设总共有五个节点(N),我们只要保证写入数据的节点数(W)+ 读取数据的节点数(R)大于总节点数。即保证W+R>N,那就能保证对客户端而言,总是能读取到最新的数据。比如写入节点数为3,那读取节点数也只要为3,那就能保证总是能读取到最新的数据。有了这样的数据公式的保证。我们就可以根据情况灵活选择W,R了。

因为我们不需要保证5台机器全部都写入成功,只需要保证3台写入成功即可。这就意味着,我们允许5台机器中的2台出现问题,也就是提高了系统的可用性。

 

关于CAP定理的简单理解

标签:

原文地址:http://www.cnblogs.com/netfocus/p/4385347.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!