查看原文
其他

关于CAP的三个高频面试题,试试你能不能回答?

小蒋学 面试专栏 2021-08-29

本篇是1000期面试系列文章的第99,持续更新中.....

回复“面试”获取优质面试资源

CAP在面试中出现的频率相当高,今天我们就来聊聊,关于CAP在面试中很容易遇到的三个问题:

  • 什么是 CAP 定理

  • 为什么只能 3 选 2

  • 能不能解决 3 选 2 的问题

什么是 CAP 定理

2000 年的时候,Eric Brewer 教授提出了 CAP 猜想,2年后,被 Seth Gilbert 和 Nancy Lynch 从理论上证明了猜想的可能性,从此,CAP 理论正式在学术上成为了分布式计算领域的公认定理。并深深的影响了分布式计算的发展。

img

CAP 理论告诉我们,一个分布式系统不可能同时满足一致性(C:Consistency),可用性(A: Availability)和分区容错性(P:Partition tolerance)这三个基本需求,最多只能同时满足其中的2个。

选项描述
C(Consistence)一致性,指数据在多个副本之间能够保持一致的特性(严格的一致性)。
A(Availability)可用性,指系统提供的服务必须一直处于可用的状态,每次请求都能获取到非错的响应——但是不保证获取的数据为最新数据。
P(Network partitioning分区容错性,分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务,除非整个网络环境都发生了故障。

什么是分区?

在分布式系统中,不同的节点分布在不同的子网络中,由于一些特殊的原因,这些子节点之间出现了网络不通的状态,但他们的内部子网络是正常的。从而导致了整个系统的环境被切分成了若干个孤立的区域。这就是分区。

为什么只能 3 选 2

首先问,能不能同时满足这三个条件?

假设有一个系统如下:

img

整个系统由两个节点配合组成,之间通过网络通信,当节点 A 进行更新数据库操作的时候,需要同时更新节点 B 的数据库(这是一个原子的操作)。

上面这个系统怎么满足 CAP 呢?C:当节点A更新的时候,节点B也要更新,A:必须保证两个节点都是可用的,P:当节点 A,B 出现了网络分区,必须保证对外可用。

可见,根本完成不了,只要出现了网络分区,A 就无法满足,因为节点 A 根本连接不上节点 B。如果强行满足 C 原子性,就必须停止服务运行,从而放弃可用性 C。

所以,最多满足两个条件:

组 合分析结果
CA满足原子和可用,放弃分区容错。说白了,就是一个整体的应用。
CP满足原子和分区容错,也就是说,要放弃可用。当系统被分区,为了保证原子性,必须放弃可用性,让服务停用。
AP满足可用性和分区容错,当出现分区,同时为了保证可用性,必须让节点继续对外服务,这样必然导致失去原子性。

能不能解决 3 选 2 的问题

难道真的没有办法解决这个问题吗?

CAP 理论已经提出了 13 年,也许可以做些改变。

仔细想想,分区是百分之百出现的吗?如果不出现分区,那么就能够同时满足 CAP。如果出现了分区,可以根据策略进行调整。比如 C 不必使用那么强的一致性,可以先将数据存起来,稍后再更新,实现所谓的 “最终一致性”。

这个思路又是一个庞大的问题,同时也引出了第二个理论 Base 理论,我们将在后面的文章中详细介绍。

好了,今天就分享到这里,如果觉得喜欢,那就在右下角里点赞、点在看

来源:http://fmp9m.cn/d4zTg

往期推荐



保证多线程顺序执行,四种方案,你知道几种?

面试官:什么是同城双活、异地双活、异地多活?

面试官竟然问我 new 一个对象背后发生了什么?

面试题:说说Redis的三大问题和解决方案

面试官:为什么微服务一定要有网关?

面试官:如何对Redis进行读写分离

    : . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存