书接上文

在一个分布式系统(指互相连接并共享数据的节点的集合)中,当涉及到读写操作时,只能保证
一致性(Consistence)、可用性(Availability)、分区容错性(Partition Tolerance)三者中的两个,另外一个必须被牺牲
对某个指定的客户端来说,读操作保证能够返回最新的写操作数据
非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)
当出现网络分区(发生丢包、连接中断、拥塞等)后,系统能够继续按预期工作
首先,你肯定是要选P分区容忍性的,因为网络本身是无法100%可靠的,所以分区是必然的,你也不想网络一点抖动你系统就挂了吧。如果不选分区容忍性,那么发生分区时,为了保障一致性,系统要禁止写操作,当发生写操作时返回err,这又和可用性冲突了,所以理论上你必须选P分区容忍性。
CP一致性+分区容忍性:前面说了,当发生分区时,为了保障一致性,要禁止写操作返回err,所以这时候可用性是不能被满足的,所说CAP只能满足CP。
AP可用性+分区容忍性:为了保障可用性,发生分区时,底层数据无法同步,必然造成数据的不一致,这时系统还要对外提供服务,所以CAP只能满足AP。
CAP还有一些细节需要注意。
一致性是不可能完美实现的可用性和一致性是可以同时被满足的ACID是数据库管理系统为了保证事务的正确性而提出来的一个理论,包含四个约束: