分布式系统的节点往往是分布于不同机器,网络隔离开的,这意味着必然会有网络断开的风险,即 网络分区。
当网络分区发生时,两个分布式节点无法进行通信,我们对其中一个节点的操作无法同步到另一个节点,两个节点的数据不再一致,此时数据的一致性无法保证。
除非我们牺牲可用性,也就是暂停分布式节点服务,在网络分区发生时,不再提供修改数据的服务,直到网络状况恢复再提供。
一句话概括CAP原理就是,当网络分区发生时,一致性和可用性两难全。
对一个分布式系统(有多个节点),不能同时满足以下三个条件:
一致性:客户端的每次读操作,不管访问哪个节点,要么读到的都是同一份最新的数据,要么读取失败;
可用性:任何客户端请求,不管访问哪个非故障节点,都能得到响应数据,但不保证是同一份最新数据。强调服务可用,容忍一定数据不准确。
分区容错:当节点间出现任意数量的消息丢失或者高延时,系统仍然在工作。
当不存在网络分区的情况下,C和A多数是可以同时满足的。