C 一致性:保证同一时间访问所有节点的数据都是一致的 A 可用性:在系统中一部分节点故障后,系统是否还能响应客户端的读写请求。 P 分区容错:系统不能在时限内达成数据一致性,就是发生了分区(以上是 Wiki 的解释)。由于计算机中没有百分百可靠的通信协议(通信原理、计算机网络的内容),所以系统内肯定会存在部分节点在时限内无法通信,而造成数据不一致的问题。所以 P 是肯定是满足的。
一致性其实细分还可分为:强一致性(一个节点更新,其他节点也要更新),最终一致性(只要保证后续某一时刻访问,系统) 假设分布式系统中,由于 P 的客观存在,一个节点挂了(短时间内无法和系统内其他节点同步数据),而其他节点数据有更新。要满足一致性,必须等其他数据必须要同步数据到该节点,才允许客户端访问。要是满足可用性,系统在向客户端提供服务的时候,已经无法保证系统内的数据一致了。 综上,分布式系统 CAP 最多只能满足两个条件,其中 P 是必须有的,无法同时满足 CAP。
剩下有种情况 CA 也是讨论很多的,既然排除了 P,那系统需在时限内保证数据一致,那单体架构单节点是最稳的了。那还要保证一致性,单节点就一份数据,完全一致。而可用性,要么继续服务,要么整个挂。
mcfog
2020-03-07 05:06:04 +08:00
“牺牲分区容忍性”的意思是不支持分区,而不是分区后会怎样
cap 是三个互相独立的维度,可用性和是否分区无关,一个系统不分区也不一定默认就是可用的,例如磁带机只能顺序读取且寻道时间很长,那么在业务是十个消费者一起随机读写数据,单台磁带机就是不具备分区容忍性的同时没有可用性
inwar
2020-03-07 07:58:07 +08:00
理论的完整在于它包含所有可能情况的假设
q447643445
2020-03-07 08:51:53 +08:00
这个要看从什么角度来看吧. 分两个情况, 数据是否可用 和 服务是否可用 1.如果从数据可用的角度来看.丢掉分区容错 p 即可满足 数据一致性 c 可用性 a 2.如果从服务可用的角度来看.丢掉分区容错 p 可用性 a 也没有了 只能满足 数据一致性 c.
如果描述的是数据是否可用 也分两种情况: 1.如果描述的分布式系统 分区容错 p 就注定存在 只能 数据一致性 c 和数据可用性 a 二选一 2.如果描述的是系统架构 分区容错 p 就可以丢掉 成为数据可用数据一致的单点系统, 数据无法保证可用的 cp 分布式系统 ,数据无法保证一致的 ap 分布式系统,