面试官:Zookeeper怎么解决读写、双写并发不一致问题,以及共享锁的实现原理?

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 本文讲解Zookeeper怎么解决读写、双写并发不一致问题,以及共享锁的实现原理。

一、前言



今天清明假期,赶上北京玉渊潭公园樱花盛开,女朋友非要拉着我去看樱花,我头一天晚上干文章到三点半,我很想睡觉,但是没办法,军令难违呀。


来到这里犹如来到了花的海洋,让我浑身的艺术细菌开始躁动,我忍不住吟诗一首“樱花落尽子规啼、闻道龙标过五溪,我寄愁心与明月、随君直到夜郎西”,啊,美丽的樱花啊。


这时旁边的公园管理员满是疑惑的看着我,问我小伙子你的诗背错了吧,不应该是杨花落尽子规啼吗?


我只能尴尬的笑笑说,今天应景,我就自己改改词。。。


就在我尽情展示我浑身的艺术细菌的时候,突然手机响了,我一看是一个北京号码,手机尾号6543,我接通了电话


我:哈喽啊


对方:喂,是小奇吗?


我:正是在下,请问阁下是?


对方:我是某某某公司的,我在某某招聘网站上看到了你的简历,请问你还在找工作吗?


我:没错,我还在找。


对方:那你现在方便进行面试吗?


这个时候我看向了我家领导,我家领导满脸嫌弃的说,让你陪我出来逛公园,不是刮风就是下雨,面吧。


二、面试



我:面试官您好,我现在方便面试。


面试官:好,我看你简历上写的是精通zookeeper是吧。


我:不敢当,都是同行们抬爱,实在惭愧(其实心里已经膨胀起来了)。


三、读写、双写不一致问题



面试官:好,那你说一下并发情况下读写、双写不一致问题是怎么回事呢?


我:读写不一致问题是在并发情况下,多个线程对同一个数据同时进行读取和写入操作,最后导致读写不一致。


7.png


比如这里我线程A查询缓存为空,那么就要查询数据库,查询数据库name为张三,然后我就要去更缓存name为张三。


但是这个时候线程B在线程A查询数据库之后,更新缓存之前修改了数据库的数据name为李四,但是缓存name还是张三,这里就出现数据库与缓存不一致的情况了。


面试官:嗯,那双写不一致是什么情况呢?


8.png


双写不一致就是两个线程都是写的操作,结果还是造成了数据库和缓存不一致的问题。


例如线程B在线程A写入数据后、更新缓存前,进行了数据的修改,但是最终修改缓存的还是线程A,所以这时数据库和缓存不一致。


面试官:嗯,那怎么解决呢?


我:使用共享锁解决。


四、Zookeeper共享锁的实现原理



面试官:嗯,zookeeper怎么实现共享锁呢,它的实现原理是什么?


我:这个讲起来有点复杂,要不我先陪我女朋友逛公园,我们晚上回去再聊吧。


面试官:别呀,你现在已经勾起我的兴趣了,我们一下子聊完吧,我们就一面


我:好吧,zookeeper共享锁的实现原理就是如果挨着的线程都是读请求,那么他们共享同一把锁。


9.png


这里我们可以看到线程1、2、3是三个连续的读请求的操作,那么他们共享同一把锁A,也就是这个三个线程可以并发的去读取数据。


然后我们看到线程4是写请求,那么他只能等前面的所有线程执行完了才能执行自己的写操作。


这里线程5也是写请求,那么他只能等他前面的所有线程执行完了才能执行自己的写操作。


然后线程6、7、8都是读线程,那么他们获取的是同一把锁,在线程5执行完毕后,线程6、7、8可以一起执行读取操作。


这里的监听我们之前说了是为了解决羊群问题的。


面试官:小伙子真厉害啊,我这边没有什么要问的了,你还有什么问题要问我的吗


我:额。。。咱们公司加班挺严重的吧。


面试官:何以见得呢?你都没来过公司你怎么知道的?


我:因为现在是假期你还在约面试,可想而知公司的加班文化挺浓厚的吧。


面试官:嗯~,我们公司其实不提倡加班,但是员工都很爱加班


我:额。。。那我还是考虑两天吧,我感觉我可能有点不合群。。。


面试官:那你要是不过来可以帮忙推荐一些其他同学吗


我:那你先好好学学zookeeper的原理吧,不然我推荐一些小奇趣味编程系列的忠实读者的话你肯定招架不住啊。


面试官:那我也赶紧看看小奇趣味编程系列,到时候就见招拆招


我:额。。。那样的话两个人都是登峰造极的状态,谁也虐不了谁属实有点尴尬。。。


五、总结



这里关于zookeeper还没有整理完毕,文章后面持续更新,建议收藏。


文章中涉及到的命令大家一定要像我一样每个都敲几遍,只有在敲的过程中才能发现自己对命令是否真正的掌握了。



相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
2月前
|
消息中间件 存储 缓存
大厂面试高频:Kafka 工作原理 ( 详细图解 )
本文详细解析了 Kafka 的核心架构和实现原理,消息中间件是亿级互联网架构的基石,大厂面试高频,非常重要,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:Kafka 工作原理 ( 详细图解 )
|
1月前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
8天前
|
Java Linux 调度
硬核揭秘:线程与进程的底层原理,面试高分必备!
嘿,大家好!我是小米,29岁的技术爱好者。今天来聊聊线程和进程的区别。进程是操作系统中运行的程序实例,有独立内存空间;线程是进程内的最小执行单元,共享内存。创建进程开销大但更安全,线程轻量高效但易引发数据竞争。面试时可强调:进程是资源分配单位,线程是CPU调度单位。根据不同场景选择合适的并发模型,如高并发用线程池。希望这篇文章能帮你更好地理解并回答面试中的相关问题,祝你早日拿下心仪的offer!
26 6
|
29天前
|
Java 数据库连接 Maven
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
自动装配是现在面试中常考的一道面试题。本文基于最新的 SpringBoot 3.3.3 版本的源码来分析自动装配的原理,并在文未说明了SpringBoot2和SpringBoot3的自动装配源码中区别,以及面试回答的拿分核心话术。
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
|
2月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
2月前
|
存储 安全 Java
面试高频:Synchronized 原理,建议收藏备用 !
本文详解Synchronized原理,包括其作用、使用方式、底层实现及锁升级机制。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
面试高频:Synchronized 原理,建议收藏备用 !
|
2月前
|
存储 运维 NoSQL
分布式读写锁的奥义:上古世代 ZooKeeper 的进击
本文作者将介绍女娲对社区 ZooKeeper 在分布式读写锁实践细节上的思考,希望帮助大家理解分布式读写锁背后的原理。
|
3月前
|
存储 监控 算法
美团面试:说说 G1垃圾回收 底层原理?说说你 JVM 调优的过程 ?
尼恩提示: G1垃圾回收 原理非常重要, 是面试的重点, 大家一定要好好掌握
美团面试:说说 G1垃圾回收 底层原理?说说你 JVM 调优的过程  ?
|
3月前
|
SQL 存储 关系型数据库
美团面试:binlog、redo log、undo log的底层原理是什么?它们分别实现ACID的哪个特性?
老架构师尼恩在其读者交流群中分享了关于 MySQL 中 redo log、undo log 和 binlog 的面试题及其答案。这些问题涵盖了事务的 ACID 特性、日志的一致性问题、SQL 语句的执行流程等。尼恩详细解释了这些日志的作用、所在架构层级、日志形式、缓存机制以及写文件方式等内容。他还提供了多个面试题的详细解答,帮助读者系统化地掌握这些知识点,提升面试表现。此外,尼恩还推荐了《尼恩Java面试宝典PDF》和其他技术圣经系列PDF,帮助读者进一步巩固知识,实现“offer自由”。
美团面试:binlog、redo log、undo log的底层原理是什么?它们分别实现ACID的哪个特性?
|
2月前
|
安全 算法 网络协议
网易面试:说说 HTTPS 原理?HTTPS 如何保证 数据安全?
45岁老架构师尼恩在其读者交流群中分享了关于HTTP与HTTPS的深入解析,特别针对近期面试中常问的HTTPS相关问题进行了详细解答。文章首先回顾了HTTP的工作原理,指出了HTTP明文传输带来的三大风险:窃听、篡改和冒充。随后介绍了HTTPS如何通过结合非对称加密和对称加密来解决这些问题,确保数据传输的安全性。尼恩还详细解释了HTTPS的握手过程,包括如何通过CA数字证书验证服务器身份,防止中间人攻击。最后,尼恩强调了掌握这些核心技术的重要性,并推荐了自己的技术资料,帮助读者更好地准备面试,提高技术水平。

热门文章

最新文章