面试常被忽略的问题——CAP

你好,我是吴计可师,一个工作十多年的后端开发,曾就职京东、阿里等多家互联网头部企业。

点击下方👇关注公众号,带你一起复习后端技术,看看面试考点,补充积累技术知识,每天都为面试准备积累

文章可能会比较长,主要解析的非常详解,或涉及一些底层知识,供面试高阶难度用。可以根据自己实际理解情况合理取舍阅读


CAP 定理(Consistency, Availability, Partition Tolerance)是分布式系统中的一个重要理论,它指出在一个分布式系统中,不可能同时满足一致性、可用性和分区容错性三个特性,只能在其中选择两个进行权衡。


01
CAP 定理的三个核心概念


一致性(Consistency)

  • 所有节点在同一时间具有相同的数据视图。

  • 当一个数据更新操作成功完成后,后续所有对该数据的访问都能获得最新值。

  • 类似于数据库中的强一致性。


可用性(Availability)

  • 每个请求都能在有限的时间内得到非错误的响应(不保证是最新数据)。

  • 系统总是可以对请求作出响应,确保高可用性。


分区容错性(Partition Tolerance)

  • 系统能够容忍网络分区(即分布式系统中某些节点之间的网络通信中断)。

  • 即使发生了网络分区,系统仍然能够继续提供服务。


02
CAP 定理的核心观点


在一个分布式系统中,C、A、P 三个特性不能同时完全满足,只能满足其中的两个:

  • CP 系统:优先保证一致性和分区容错性,牺牲可用性。

  • AP 系统:优先保证可用性和分区容错性,牺牲一致性。

  • CA 系统:几乎不可能实现,因为分布式系统必须面对网络分区问题。


03
CAP 定理的具体实现


CP 系统(一致性 + 分区容错性)

    • 牺牲可用性,当网络分区发生时,系统会拒绝部分请求以确保数据一致性。

    • 典型例子:Zookeeper。

    AP 系统(可用性 + 分区容错性)

      • 牺牲强一致性,允许数据在短时间内不同步(最终一致性)。

      • 典型例子:DynamoDB、Cassandra。

      CA 系统(一致性 + 可用性)

      • 几乎不可能实现,因为在分布式环境中,网络分区是不可避免的。


      04
      应用场景与权衡


      分布式数据库:


      • 选择 CP 的场景:对数据一致性要求高,如金融系统。

      • 选择 AP 的场景:对可用性要求高,如社交媒体、缓存系统。

      架构设计:


      • 偏向 一致性:暂停部分服务,确保数据正确。

      • 偏向 可用性:允许数据在短时间内不一致,但保持服务可用。

      • 在网络分区发生的情况下,系统需要在一致性和可用性之间做出权衡:


      05
      直击面试


      5.1 CAP 定理为什么不能三者兼得?

      • 偏向一致性,可能无法响应所有请求,牺牲部分可用性(如 CP 系统)。

      • 偏向可用性,允许数据短暂不一致,牺牲强一致性(如 AP 系统)。

      • 网络分区是分布式系统中不可避免的问题(P 必选)。

      • 为了解决分区容错性(P),必须在 一致性(C) 和 可用性(A) 中进行权衡:


      5.2 分布式系统中如何在 CAP 定理之间取舍?

      • CP 系统:金融、银行等对数据一致性要求高的场景。

      • AP 系统:电商、缓存等对高可用性要求高的场景。

      • 根据业务需求权衡:


      5.3 举例说明 CAP 定理的实现?

      • CP 系统:Zookeeper、HBase(分区容错 + 一致性)。

      • AP 系统:Cassandra、DynamoDB(分区容错 + 可用性)。

      • CA 系统:理论上不可能完全实现 CA,因网络分区不可避免。


      5.4 请解释最终一致性与 CAP 的关系?

      • 最终一致性是 CAP 中对一致性的弱化版本,是 AP 系统的典型特征。

      • 在最终一致性中,数据可以在短时间内不同步,但最终会达到一致。

      5.5 为什么 CA 系统不可能实现?

      • 分布式系统不可避免会发生网络分区(例如节点通信失败)。

      • 网络分区发生时,必须在一致性和可用性之间取舍。

      • 因此,CA 系统在分布式场景下无法实现。


      5.6 CAP 定理和 BASE 理论的关系是什么?

      • CAP 定理中的 AP 系统通常采用 BASE 理论。

      • BASE 理论通过牺牲强一致性,追求最终一致性,以提高系统的可用性和分区容错性。


      5.7 如果你要设计一个分布式系统,会如何考虑 CAP?

      • 对于数据一致性要求高(如支付系统):选择 CP。

      • 对于高可用性需求大(如搜索引擎):选择 AP。

      • 根据业务需求选择优先级:

      • 确保在网络分区情况下,核心功能仍能保持运作。

      5.8 CAP 定理中网络分区指的是什么?

      • 分布式系统中的网络分区指节点间的通信中断,可能是因网络故障或节点分布在不同地理位置导致的。

      • 网络分区是 CAP 定理中不可避免的限制条件。

      5.9 Zookeeper 是 CAP 定理中的哪种模型?为什么?

      Zookeeper 是 CP 系统:

      • 保证强一致性:多个节点对外呈现一致的视图。

      • 容忍网络分区:牺牲可用性,部分节点可能不可用。


      5.10 DynamoDB 是 CAP 定理中的哪种模型?为什么?

      DynamoDB 是 AP 系统:

      • 保证高可用性:系统始终能响应请求。

      • 容忍分区:数据允许短时间不一致(最终一致性)。


      今天的内容就分享到这儿,喜欢的朋友可以关注,点赞。有什么不足的地方欢迎留言指出,您的关注是我前进的动力!

      END


      扫码关注

      一起积累后端知识
      不积跬步,无以至千里
      不积小流,无以成江海

      喜欢此内容的人还喜欢

      谈谈id那些事(五)——美团的 Leaf 的ID生成


      一个阿里二面面试官必问的问题


      谈谈id那些事(三)——阿里巴巴的 TDDL的ID生成


      分享面试:mysql数据库索引失效的情况


      面试常被忽略的问题——内存区域划分