一文搞懂CAP理论

CAP理论指出,任何分布式系统只能在一致性、可用性和分区容错性中选择两项。一致性确保所有节点看到相同数据,可用性保证每个请求都有响应,而分区容错性是分布式系统必须面对的现实。当网络分区发生时,系统必须在保证一致性和可用性之间做出选择。例如,Zookeeper倾向于CP,牺牲可用性以确保数据强一致性;而Eureka则选择AP,允许短暂的数据不一致以保持服务可用性。
摘要由CSDN通过智能技术生成

相信很多人在面试的过程中,都被问到过CAP理论是什么?为什么分布式系统不能同时满足C、A、P这三个特性?本文尽可能从专业的角度,用易懂的语言,帮助大家理解

01 基础知识

什么是分布式系统

分布式系统是相对于集中式系统而提出的概念,集中式系统指把所有的业务逻辑放在一个服务中,然后部署到一台机器上,对外提供服务。随着业务的发展,通过加内存、磁盘等硬件已经难以满足正常的需求,或者得不偿失,此时就需要考虑分布式系统。

分布式系统:由一组通过网络通信,为了完成共同任务而协调工作的计算机节点组成的系统。最常见的是对大量数据的处理,由于单个机器的性能瓶颈,无法处理。因此,可以将大量数据进行恰当的拆分,然后交由分布式系统中的多个机器处理,最终通过合并每个机器的处理结果得到最终结果。

什么是CAP

在分布式系统中,有一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)三个特性

In theoretical computer science, the CAP theorem, also named Brewer’s theorem after computer scientist Eric Brewer, states that any distributed data store can only provide two of the following three guarantees

(1)一致性(Consistency)
所有节点访问的都是最新数据。由于在分布式系统中可能存在多个节点,如下图所示,存在n1、n2、n3三个节点对外提供服务,用户会随机请求到三个节点中的一个,user1向n2写入一条数据,随后user1可以从n3节点获取到刚才写入的数据。
在这里插入图片描述
(2)可用性(Availability)
每个请求都会收到一个(非错误)响应,但不确保数据准确。如上图所示,use1在某一时刻在n2节点写入数据,随后又立即从n3节点读数据,可能会存在数据同步延迟的情况,导致n3节点返回了旧数据。

(3)分区容错性(Partition tolerance)
有一部分节点之前存在网络异常,但系统仍然可以运行。分布式系统中,节点组成的网络是互通的,但由于网络异常,导致产生了分区,如下图所示节点n3和节点n1、n2之前网络出了故障,此时该集群就产生了两个分区(n3组成的分区、n1和n2组成的分区)。容忍性表示,集群虽然产生了分区,但对外仍然有可用性和一致性的能力,除非所有节点都发生网络故障。
在这里插入图片描述
(4)CAP理论

任何分布式系统中,只能提供CAP三个特性中的两个特性
在这里插入图片描述

02 为什么CAP不能同时满足

CAP理论经常被解释成3选2的定理,其实这句话是有问题的。因为讨论是基于分布式系统,各个节点之间通过网络进行同步数据,而网络是不可靠的,所以分区容忍性(P)是一定会发生,所以是A、C二选一的讨论。

那为什么不能同时满足呢?拿分区容忍性的那幅图举例子,user1向n2节点写入了数据,由于分区容忍性的存在,导致数据没有同步到n3,此时再去节点n3读刚才写入的数据,就会有两个选择:1)返回结果,也就是保证可用性(A),但返回的是旧值,损失了一致性(C);2)为了保证一致性(C),不返回结果,直到n3节点同步到最新的数据,损失可用性(A)。

(1)PC
适用于数据强一致性的场景,当发生分区容错性后,访问系统的任何请求都会失败。比较经典的应用就是zookeeper,当由于网络异常导致leader节点挂掉之后,其余的节点会完成重新选举的过程,然后同步最新的数据,这期间整个服务是不可用的。

(2)PA
一些场景对数据的强一致性要求没那么高,只需要保证最终的一致性即可。比较经典的就是eureka,eureka通过心跳检测剔除掉网络异常的节点,将请求切换到可用的节点上,保证服务的可用性,可能会存在数据的不一致。网络恢复后,会自动进行发现,同步数据,从而保证数据的最终一致性。

03 总结

  1. CAP理论是分布式系统设计过程中,处理数据需要考虑的trade of
  2. 在分布式系统中,P是前提,本质上是对C、A的选择
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值