CAP定理简介
在理论计算机科学中,CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer‘s theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点:
- 一致性(Consistency):同一个数据在集群中的所有节点,同一时刻是否都是同样的值。
- 可用性(Availability):集群中一部分节点故障后,集群整体是否还能处理客户端的更新请求。
- 分区容忍性(Partition tolerance):是否允许数据的分区,分区的意思是指是否允许集群中的节点之间无法通信。
我的个人理解
我觉得,理解CAP可以从两个阶段去考虑。
只考虑CP
比如,一个数据在两台机器上,然后这两台机器之间无法通信了,即我们首先选择了P;然后,此时,我认为已经不可能做到C了。因为这两台机器之间已经无法通信,那就无法保证两台机器之间的数据一致性了。也就是说,要在P的情况下,做到C是不可能的。【这点相信有很多人会有意见,欢迎大家和我交流】
把A也考虑进来
这个会复杂很多。由于分布式系统,我们无法不选择P,因为由于网络的不可靠性,必定会导致两个机器节点之间无法进行网络通信,从而导致数据无法同步。这样的现实导致我们必须选择P。然后,在这个前提下,我们要么选择A,要么选择C。下面分析一下原因:
- 当两台机器节点之间无法通信时(即选择了P),如果我们继续允许客户端写入数据到其中一台,那就必然导致数据不一致,因为这个数据无法同步到另一台机器;这种做法就是选择了A,牺牲了C;
- 当两台机器节点之间无法通信时(即选择了P),如果我们不允许客户端写入数据到任何一台,那数据虽然是一致的,但系统就不可用了;这种做法就是选择了C,牺牲了A;
如何在保证PC的情况下,尽量提高A?
答案就是NRW算法。
假设总共有五个节点(N),我们只要保证写入数据的节点数(W)+ 读取数据的节点数(R)大于总节点数。即保证W+R>N,那就能保证对客户端而言,总是能读取到最新的数据。比如写入节点数为3,那读取节点数也只要为3,那就能保证总是能读取到最新的数据。有了这样的数据公式的保证。我们就可以根据情况灵活选择W,R了。
因为我们不需要保证5台机器全部都写入成功,只需要保证3台写入成功即可。这就意味着,我们允许5台机器中的2台出现问题,也就是提高了系统的可用性。
时间: 2024-10-19 10:38:53