资深程序员实践经验:大白话讲解“什么是CAP定理,2024年最新面试心慌怎么办

这个定理起源于柏克莱加州大学的计算机科学家埃里克·布鲁尔在2000年的分布式计算原则研讨会上提出的一个猜想。在2002年,麻省理工学院的赛斯·吉尔伯特和南希·林奇发表了布鲁尔猜想的证明,使之成为一个定理

定理讨论了在两个互相矛盾的请求到达彼此连接不通的两个不同的分布式节点的时候的处理方案。

CAP针对对象

先上个图

上图中,是我们常见的系统设计,web服务集群化,mysql数据库做主从,数据库做主从可实现读写分离,分担压力。

我们看到Mysql数据库产品,可以进行分布式部署(集群方式,也支持单机),研发Mysql数据库的工程师是要完成很多业务点(如:最基本的对数据增删改查)。其中有很重要的点就是CAP定理的平衡。

所谓的CAP定理,是针对分布式系统阐述的,如在分布式环境下,Mysql是怎么平衡CAP的?

说了半天的CAP,到底什么是CAP定理?我们先看一下C、A、P各是什么含义

CAP的定义

一、C全称Consistency(一致性) 这个表示所有节点返回的数据是一致的。

如:上图用户写了一篇文章A,数据插入到主Mysql。这时其他用户读写这篇文章时,要必须能够读到。因为读取请求是走的从Mysql,就必须要求主mysql和从mysql同时更新了数据。

二、A全称Availability(可用性)每一个非故障节点,都能够对每一个请求做出响应。说白了就是某个节点坏了,不能影响其他的节点业务。

如:主mysql挂了,但他不影响从mysql节点对外提供服务,用户还是可以读取数据的,只是不能写而已。(小伙伴们就会问,那不能写了啊,还算可用性吗?这里的可用性的定义是非故障节点,对每个请求做出响应;有故障的不算)

**三、P全称Partition tolerance(分区容错性)**当系统中有节点因网络原因无法通信时,系统依然可以继续运行。

可用性和容错性的区别

很多小伙伴在这一点比较容易糊涂,很多网上的资料也是错误的,针对这一点讲的不是很清楚。可用性是针对非故障节点,如主mysql节点挂了,但从mysql没有挂,而且从mysql照样提供服务,就说明此分布式系统具有可用性。

(小伙伴们不要和mysql的主从切换混淆了,主从切换是mysql提供的高可用性一种方案,跟这里的可用性是两个纬度)

分区容错性是各个节点出现网络问题时,系统依然可用。如主Mysql和从Mysql 之间没法通信时,系统可用。

总结:可用性针对节点出现故障,系统可用;分区容错性针对网络出现问题,系统可用

CAP定理

我们了解了CAP中的三个定义,CAP定理是表示分布式系统只能满足三项中的两项,而不可能满足全部三项。即分布式系统只能满足三种情况:CA、AP、CP。

我们来分析一下,我们先看P,也就是分区容错性;在分布式系统中,网络异常是不可避免的,所以如果不保证分区容错性,除非节点间网络不会发生异常,这个是不可能的(除非单机系统,单机系统就不是分布式系统)。

分布式系统肯定要实现P,那其实CA是理论上面的,其实不存在。

取舍

看一下图

主Mysql和从Mysql之间出现了网络异常,那研发Mysql的工程师如何去做?

场景一:更新操作主Mysql成功了,就返回成功

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

那么如何才能正确的掌握Redis呢?

为了让大家能够在Redis上能够加深,所以这次给大家准备了一些Redis的学习资料,还有一些大厂的面试题,包括以下这些面试题

  • 并发编程面试题汇总

  • JVM面试题汇总

  • Netty常被问到的那些面试题汇总

  • Tomcat面试题整理汇总

  • Mysql面试题汇总

  • Spring源码深度解析

  • Mybatis常见面试题汇总

  • Nginx那些面试题汇总

  • Zookeeper面试题汇总

  • RabbitMQ常见面试题汇总

JVM常频面试:

Redis高频面试笔记:基础+缓存雪崩+哨兵+集群+Reids场景设计

Mysql面试题汇总(一)

Redis高频面试笔记:基础+缓存雪崩+哨兵+集群+Reids场景设计

Mysql面试题汇总(二)

Redis高频面试笔记:基础+缓存雪崩+哨兵+集群+Reids场景设计

Redis常见面试题汇总(300+题)

Redis高频面试笔记:基础+缓存雪崩+哨兵+集群+Reids场景设计

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
[外链图片转存中…(img-sse9e5oy-1712762916187)]

  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值