轻松理解CAP理论,面试必问,你搞清楚了吗?

我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第5篇文章,点击查看活动详情

前言

CAP 理论,相信很多人都听过,但是在被问到具体细节时就有可能答不上来,ok,今天来总结一下分布式系统中的CAP理论, 需要的朋友可以参考以下内容,希望对大家有帮助。

什么是CAP理论

CAP理论是指在分布式系统设计中,没有一种设计可以同时满足Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)3个特性,这三者不可得兼。

CAP即:

  • C:Consistency(一致性)
  • A:Availability(可用性)
  • P:Partition tolerance(分区容忍性)

一致性(C)

在分布式系统中,对于不同客户端的每次读操作,要么读到的是最新的数据,要么读取失败,保证在同一时刻读到的值都是一样的,通俗的讲就是要么返回一个错误,要么返回绝对一致的最新数据,其强调的是数据正确。

可用性(A)

要求服务在接受到客户端的请求后,都能够给出响应,服务可用性考量的是系统的可用性,要求系统在高并发和部分节点宕机的情况下,系统整体依然能够响应客户端的请求。通俗的讲我一定会给出响应,不会给你返回错误,但不保证数据是最新的,强调的是不出错。

分区容忍性(P)

在分布式系统中,不同节点之间通过网络进行通信,基于网络的不可靠性,位于不同网络分区的节点可能会通信失败,如果系统能够容忍这种情况,说明它是满足分区容错性的。通俗的讲就是不管我的内部出现何种数据同步问题,我会一直运行,强调的是不挂掉。

CAP 怎么选择

对于一个分布式系统而言,首先要满足分区容忍性,因为只要有网络交互就一定会有延迟和数据丢失,这种情况我们必须接受,必须保证系统不能挂掉,否则分布式系统的扩展将会受到限制,即服务节点的部署数量和地区将会受限,违背了分布式系统设计的初衷,所以一般来讲分布式系统都会满足分区容忍性,所以只剩下C、A可以选择,要么保证数据一致性,要么保证可用性。那么我们怎么来权衡选择呢?选择的关键点取决于业务场景。

举例:

假设有两个实例A1和A2,它们之间的网络通信出现了异常,基于分区容忍性,这并不会影响A1和A2的独立正常运行,如上图示例1,若此时用户1请求A1修改某数据,用户2请求节点2访问数据且返回了更新前的数据,这将满足服务可用性,但并不能满足数据一致性。如示例2,如果A2需要等待A1的通知后才返回正确的数据,虽然满足了数据一致性,但无法响应客户端请求,违背了服务可用的指标。

既然一个分布式系统无法同时满足一致性、可用性、分区容错性三个特点,所以我们就需要抛弃一样:

CA

放弃分区容错性,加强一致性和可用性,其实就是传统的单机数据库的选择。

AP

放弃一致性(这里说的一致性是强一致性),追求分区容错性和可用性,这是很多分布式系统设计时的选择,是大多数互联网应用的选择,因为机器数量庞大,部署节点分散,网络故障是常态,可用性是必须保证的。

CP

放弃可用性,追求一致性和分区容错性,基本不会选择,网络问题会直接让整个系统不可用。如银行等对数据一致性要求比较高的系统。

总结

  • CAP理论是在设计分布式系统的过程中,处理数据一致性问题时必须考虑的理论。
  • 在分布式系统中,P是前提,本质上是对C、A的选择,可根据实际情况进行权衡。

20220914103344.jpg