CAP理论

简介

由计算机科学家 Eric Brewer提出。其观点为,在分布式计算机系统中不可能同时保证以下三个功能。

  1. 一致性(Consistency): 同一时间系统中能提供服务(正常工作)的节点的数据是相同的。
  2. 可用性(Availability): 系统中的所有节点都是可用(提供服务)的,收到请求后都会得到响应并且正常提供服务。
  3. 分区容错性(Partition Tolerance): 将系统的一些节点与其它节点相隔离(可看做网络故障,节点之间无法同步更新了),整个系统仍能继续服务(即至少保证有一个节点在提供服务)。

CAP理论-不可同时满足三者

CAP理论认为在分布式系统中,无法同时满足一致性(Consistency)、可用性(Availability)和分区容忍性(Partition tolerance)三个特性的原因是因为网络通信的不可靠性和延迟。

在一个分布式系统中,节点之间的通信是通过网络进行的。由于网络的不可靠性和延迟,节点之间可能会发生通信失败、消息丢失、延迟过高等问题。为了保证一致性,需要在节点之间进行数据同步和协调,确保所有节点具有相同的数据副本。但是,当发生网络分区或节点故障时,节点之间无法通信,无法进行数据同步和协调,从而无法保证一致性。

如果系统追求强一致性,即在任何时间点,系统中的所有节点都具有相同的数据副本,那么在网络分区或节点故障的情况下,必须暂时停止服务或降低可用性,等待问题解决后再继续提供服务。这样会导致系统不可用的时间延长,影响系统的可用性。

相反,如果系统追求高可用性,即在任何时间点,系统都能够继续提供服务,那么在网络分区或节点故障的情况下,可能会导致数据的不一致性。因为在分布式系统中,为了保证高可用性,可能会允许部分节点独立处理请求,而不进行数据同步和协调。这样会导致数据在不同节点上的副本出现差异,破坏了一致性。

而分区容忍性是指分布式系统可以在网络分区的情况下继续运行。即使某些节点无法与其他节点通信,系统仍然可以正常工作。为了实现分区容忍性,系统必须允许部分节点独立运行,但这可能会导致数据的不一致性。

因此,由于网络的不可靠性和延迟,CAP理论认为在分布式系统中无法同时满足一致性、可用性和分区容忍性三个特性。在设计分布式系统时,需要根据具体的需求和场景,权衡这三个特性,并选择适合的设计方案。

那么实际应用中,对于某个具体的系统,只有妥协三者中的某部分。下面介绍三种CAP模型

牺牲分区(CA模型)

想要系统在网络分区时(部分子节点网络不通的时候)也能正常工作,带来那么多问题,那么就不分呗,然而如果不分的话,这还算分布式系统吗?显然不是。
他也失去了分布式系统最重要的伸缩性,冗余性。

CA常见例子:

  • 单站点数据库
  • 集群数据库(将一组服务器在一起形成集群,当出现问题就一起崩了)

牺牲可用性(CP模型)

部分子节点网络不通,该部分节点的请求失效就失效吧,放弃一定的请求成功。整个系统来说有部分节点还在继续工作,只是暂停了部分损坏节点的问题,可以通过隔离损坏节点来减少损失。

  • 分布式数据库
  • 绝大多数协议

实现方式:

  • 悲观锁
  • 少数子节点不可用(然后将其隔离避免无效请求)

牺牲一致性(AP模型)

部分子节点网络不通,没关系,不理它,反正早晚会通的,到时候不就一致了么,现在不一致也不打紧。

  • Web缓存
  • DNS

实现方式:

  • 乐观
  • 到期/租赁
最后修改:2025 年 01 月 20 日
如果觉得我的文章对你有用,请随意赞赏