面试准备 - 分布式系统 CAP 理论

Posted Java后端

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试准备 - 分布式系统 CAP 理论相关的知识,希望对你有一定的参考价值。

优质文章,及时送达

链接 | github.com/pkwenda/Blog/issues/28

CAP 理论是一个被说烂了也听烂了的话题,但是还是选择花点时间做整理,做些横向拓展,加点自己的感受,认认真真讨论一下。

之前看阮一峰老师写的文章不错,我之前觉得总有点难懂,现在我觉得是有点问题

我觉得阮老师说的 Availability 理解不对,分布式和具体「哪台」没什么关系。Partition tolerance 的解释也没让我豁然开朗。

CAP 简介

1998 年,有个哥们提出了分布式系统的三个指标:

CAP (Consistency、Availablity 、Partition-tolerance ) 其中:

Consistency

  • 一致性
这哥们说,分布式系统所有数据备份,在「同一时刻」,必须是「同样的」。

面试准备 - 分布式系统 CAP 理论


比如图床服务:后台是三台机器 A、B、C 做支撑,上传一张图片,通过网关最终可能是 A 处理的,随后「马上」请求这张图片,通过网关轮询算法,这个请求极有可能不落在 A 上了,那么他说:不管落在 B、C 哪个机器上,该图片必须存在并返回,否则,就不是『一致性』
如果就有多个分区要执行写操作,如果分布式存储系统「分片」同步、或集群系统的「主从」同步总会有个先后顺序,在这个先后顺序中,就产生了不一致的问题,这时候你:
  • 要么接受同一个数据在各个存放点上同步过程中的「暂时」不一致。
  • 要么你要「强一致性」,那么同步操作就会影响你的「可用性」。
常见的一致性的级别整理,想看的可以看看

Availability

  • 可用性
这哥们说: 在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求,即使集群中的某个结点宕机了,依旧不影响你的任何请求。
这条非常好理解,就是字面意思

Partition tolerance

  • 分区容忍性
这哥们说:如果集群中的机器被分成了两部分,这两部分不能互相通信,系统是否能继续正常工作
这个 CAP 中的 P 是最误导我的,以至于今天我对 CAP 依旧无法侃侃而谈,特此整理的原因。

我对「分区容忍性」的疑问

很多人说 “一致性,可用性,分区容忍性,只能任意选择其中两个”,乍一看是没错,但是 AC 满足吗?
普遍到「百度百科」原话也是这样写的:
 
   
   
 
CAP原则的精髓就是要么AP,要么CP,要么AC,但是不存在CAP。
我的疑问:保证了 AC,那么 P 就没办法保证,
试想:机器间不能通信,网络分区,如何保证数据的一致性?如何同步数据?
AP CP 我都能理解,平常工作中也都能看到影子:
比如 AP(Eureka)选择了可用性、 CP(Zookeeper、HDFS)都选择了一致性,但是 AC 的模型在哪里?如何做到不会通信失败呢?
有人说:CAP理论作者太教条!只要各地的分布式机器保持一个量级,且把无法通信的机器踢下去,那就是 CAP!
又有人说:那不行,如果网络抖动,你踢的太多,数据分片达不到要求也不行!
参考资料 

以上是关于面试准备 - 分布式系统 CAP 理论的主要内容,如果未能解决你的问题,请参考以下文章

帮你搞定!

帮你搞定!

分布式之CAP定理和BASE理论

面试必问:分布式一致性CAP理论BASE理论!

学习分布式不会BASE理论?看这篇文章保证能理解

分布式系统基础理论之CAP理论