Skip to content

CAP 理论

CAP 理论是一切分布式系统工作的指导理论,因为 CAP 不能兼得,所以在设计时更应该考虑清楚设计上的取舍

概念

  • C:一致性 ( Consistency )。对于客户端的每个读操作,要么返回最新的数据,要么读取失败。强调的是数据正确
  • A:可用性 ( Availability )。对于客户端的请求都能得到响应数据,不会出现响应错误,但是不保证数据是最新的。强调的是不出错
  • P:分隔容忍 ( Partition tolerance )。因为分布式系统是通过网络进行通信的,但是网络往往是不可靠的。当任意数量的消息丢失或延迟到达时,系统仍然会继续提供服务。强调的是不会挂掉

CAP 只能三选二

CAP 是难以同时三者兼得的

原因

  1. 如果 C 是第一需求的话,那么会影响 A 的性能,因为要数据同步,不然请求结果会有差异,但是数据同步会消耗时间,期间可用性就会降低。
  2. 如果 A 是第一需求,那么只要有一个服务在,就能正常接受请求,但是对于返回结果不能保证是最新的,原因是,在分布式部署的时候,数据一致的过程不可能像切换线路那么快。
  3. 再如果,同时满足一致性和可用性,只能是单点部署;而对于分布式系统而言,P 是必须保证的,我们必须接受网络带来的数据延迟和丢失,但是不允许系统挂掉

其实不是所有情况下都只能选择两个特性,在不存在网络失败的情况下(分布式系统正常运行),C 和 A 是能同时保证的。

关于 CP/AP 的选择

交易场景

C 是必须保证的,如果网络发生故障,宁愿不提供服务,也不能发生自损的情况

注册中心集群

A 是必须保证的,对于服务发现来说,针对同一个服务,即使注册中心的不同节点保存的服务提供者信息不尽相同,也不会造成灾难性后果;而对于服务消费者来说,注册中心不可用导致消费不能正常进行,对于系统来说是灾难性的

其他场景

一般情况下我们会选择 AP,尽管舍弃了强一致性,但是可用性的保证,提升了用户使用体验,而且可以通过一定的手段追求最终一致性