CAP
C(Consistency):一致性。在同一时间点,各个节点的数据都是完全一致的。
A(Availability):可用性。即服务在正常的响应时间内对每个请求做出响应。
P(Partition-tolerance):分区容忍性。在分布式系统中,各个节点组成的网络应该是相互连通的,但是可能因为网络故障原因,导致节点间的网络被分割为多个网络分区,不同的网络分区之间是无法连通的,此时如果某个数据只在其中一个节点中保存,那么当网络分区出现后,与这个节点不连通的客户端就无法访问该数据了,此时分区是无法容忍的。
如何提高分区容忍性?一种方法就是将一份数据进行多次拷贝,存在不同的副本上,保证多个节点都存有该数据,那么当网络分区出现后,不同的网络分区都会存有该数据的副本,容忍性就提高了。
然而当把数据复制到多个节点后,与之带来的问题就是,多个节点的数据如何保证一致性呢?要么牺牲可用性保证一致性,要么牺牲一致性保证可用性。
为什么CAP只能三选二?
CA
对于有多个节点分布式系统中,P是必然存在的,如果只满足CA,那么只能是单机系统。对于关系型数据库,就是保证了CA,忽略了P,如果是数据库集群,一样会存在P的问题。
CP还是CA?
假设有两个节点n1和n2,数据data0存在两个节点上;