立即注册找回密码

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

手机动态码快速登录

手机号快速注册登录

搜索

图文播报

查看: 98|回复: 0

[分享] 听说你还不懂什么是CAP理论?我来带你一起研究

[复制链接]
发表于 2024-12-14 16:55 | 显示全部楼层 |阅读模式

登陆有奖并可浏览互动!

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录 手机动态码快速登录

×
靓仔靓女们,nice  to meet you!   






进阶之路一直在路上。凡是做过分布式系统开发经验的同学,都应该对CAP理论有一个深刻的掌握,那今天我们一起来学学什么是CAP理论,Fighting







一、CAP理论概述

一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。



那可能就有人不同意了,为啥只能满足其中的两项呢?  为啥非要让我在“一致性”,“可用性”和“分区容错性”中选2个呢?      我就不,我偏不。

不是说只有小孩子才做选择题,而大人两个都要的吗?   所以你还是小孩子,年轻真棒,香啊








1、啥是一致性?
一致性指 “all nodes see the same data at the same time”,即所有节点在同一时间的数据完全一致。即多副本(Replications)问题中的数据一致性

对于一致性,可以分为强一致性、弱一致性、最终一致性三类,下面我来分别说说三者

强一致性
当更新操作完成之后,在任何时刻所有的用户或者进程查询到的都是最近一次成功更新的数据。强一致性是程度最高一致性要求,也是最难实现的。关系型数据库更新操作就是这个案例。

弱一致性
当数据更新后,后续对该数据的读取操作可能得到更新后的值,也可能是更改前的值。

最终一致性
在某一时刻用户或者进程查询到的数据可能都不同,但是最终成功更新的数据都会被所有用户或者进程查询到。简单理解为,就是在一段时间后,数据会最终达到一致状态。

二、啥是可用性?
可用性指“Reads and writes always succeed”,即服务在正常响应时间内一直可用。好的可用性主要是指系统能够很好的为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。

三、啥是分区容错性?
分区容错性指“the system continues to operate despite arbitrary message loss or failure of part of the system”,即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性或可用性的服务。

二、核心证明:CAP为啥只能满足其中的2个



N1和N2是分布式系统中的多个服务节点,比如我们从N1节点上使用A程序往DB1里写数据,写完了以后就得做数据同步的工作,把DB1的数据同步更新到DB2上,确保数据一致性。
         这是正常运作的场景,也是理想的场景,然而现实是残酷的,当错误发生的时候,一致性可用性还有分区容错性,是否能同时满足,还是说要进行取舍呢?
         在满足一致性的时候,DB1和DB2的数据是一致的。在满足可用性的时候,用户不管是请求N1或者N2,都会得到立即响应。在满足分区容错性的情况下,N1和N2有任何一方宕机,或者网络不通的时候,都不会影响N1和N2彼此之间的正常运作。

       作为一个分布式系统,它和单机系统的最大区别,就在于网络,现在假设一种极端情况,N1和N2之间的网络断开了,我们要支持这种网络异常,相当于要满足分区容错性,能不能同时满足一致性可用性呢?还是说要对他们进行取舍。



假设在N1和N2之间网络断开的时候,有用户向N1发送数据更新请求,那DB1中的数据就是最新的,但是由于网络是断开的,所以在第2步数据同步的过程中失败了,所以N2中的数据依旧是旧数据;这个时候,有用户向N2发送数据读取请求,由于数据还没有进行同步,应用程序没办法立即给用户返回最新的数据,怎么办呢?
有二种选择,第一,牺牲数据一致性,N2节点直接响应旧的数据给用户;第二,牺牲可用性,阻塞等待,直到网络连接恢复,数据同步完成之后,N2节点再给用户响应最新的数据。
这个过程,证明了要满足分区容错性的分布式系统,只能在一致性和可用性两者中,选择其中一个。
三、那该如何权衡CAP呢?

      通过CAP理论,我们知道无法同时满足一致性、可用性和分区容错性这三个特性,那要舍弃哪个呢?
      对于多数大型互联网应用的场景,主机众多、部署分散,分区容忍性是基本要求,否则就失去了价值,而且现在的集群规模越来越大,所以节点故障、网络故障是常态,而且要保证服务可用性达到N个9,即保证P和A,舍弃C(退而求其次保证最终一致性)。虽然某些地方会影响客户体验,但没达到造成用户流程的严重程度。
对于涉及到金钱财务这样的不能有一丝让步的场景,C必须保证。网络发生故障宁可停止服务,这是保证CA,舍弃P。  还有一种是保证CP,舍弃A。例如网络故障是只读不写。所以说到底如何权衡CAP,没有定论,只能根据场景定夺,适合的才是最好的。

小脑袋动一动:  在微服务架构中,注册中心eureka和zookeeper的区别是什么?
答案就留到下一期吧,不然这一期写完了,下期写啥?素材也是很难找的,好吧,体谅一下咯!

好啦,今天分享的内容就到此结束了,慕仔们,我们下期再会 ,更多学习资源和资料请私信我哟,欢迎你们Q我








原文地址:https://zhuanlan.zhihu.com/p/374904659
楼主热帖
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册 微信登录 手机动态码快速登录

本版积分规则

关闭

官方推荐 上一条 /3 下一条

快速回复 返回列表 客服中心 搜索 官方QQ群 洽谈合作
快速回复返回顶部 返回列表