CAP定理是分布式系统中一条重要的原则,它指出在一个分布式系统中,不可能同时满足 一致性(Consistency)、可用性(Availability) 和 分区容错性(Partition tolerance) 这三个特性。其中,一致性指的是所有节点访问同一份最新的数据副本,可用性指的是非故障节点在合理的时间内返回正确的响应,分区容错性指的是系统在遇到网络分区时仍然能够继续工作。
由于网络分区(即集群中某些节点无法互相通信)是不可避免的,因此分布式系统必须具有分区容错性。根据CAP定理,当分布式系统遇到网络分区时,需要在一致性和可用性之间做出选择。
如果选择保证一致性,那么当出现网络分区时,必须停止向无法访问的节点进行服务,直到网络恢复正常,才能继续提供服务。这种情况下系统只有 CP 两个特性,缺少可用性特性,所以又被称为“C-P系统”。
如果选择保证可用性,那么当出现网络分区时,系统可以继续响应请求,但是无法保证所有节点访问到的数据都是最新的。这种情况下系统只有 CA 两个特性,缺少一致性特性,所以又被称为“A-P系统”。
当然,也有一些系统采用了妥协方案,在保证可用性的基础上,尽可能地保证一致性。但是无论如何,分布式系统都需要在 CAP 三个特性之间做出取舍,选择适合自己业务场景的模型。