【大厂面试演练】知道ZooKeeper有什么应用场景吗
面试官:听说你精通ZooKeeper,那我就考考你吧
面试官:不用慌尽管说,错了也没关系😊。。。
面试官:知道ZooKeeper有什么应用场景吗
嗯嗯,主要有这几种。
-
数据发布/订阅。可以用来实现配置中心
-
命名服务。类似于UUID,可以生成全局唯一的ID
-
集群管理。每一个服务器是一个子节点,可以用来检测到集群中机器的上/下线情况
-
分布式锁
面试官思考中…
面试官:你挑一个你比较熟悉的场景讲讲
嗯嗯好的,那我讲下分布式锁。
是这样的,ZooKeep的获取锁时会在/exclusive_lock节点下创建子节点,如果创建成功则获得锁。如果失败,则客户端会在该节点注册一个子节点变更的Watcher监听。
同样,释放锁则删除该子节点,此时Watcher监听就会通知客户端可以重新获取了。
面试官思考中…
面试官:你说的是排他锁,共享锁呢
好的面试官。共享锁也是类似的场景。
每次读、写请求同样是创建子节点,是一个类似于“/shared_lock/[Hostname]-请求类型-序号”的临时顺序节点。
接着会获取子节点列表,同时注册Watcher监听。
- 获取读锁的话,如果前面比自己小的序号没有写请求,则可以读
- 获取写锁的话,只有在自己是序号最小的情况下,才可以读
而共享锁的释放锁和排他锁都是一样的。
面试官:emmmm有没听说过共享锁的羊群效应
噢噢知道的面试官,这个问题主要是出现在集群规模比较大的场景下。
其实共享锁的特别之处,在于每次读、写请求都要注册Watcher监,特别是数量更多的读请求。
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
Java Offer训练营 文章被收录于专栏
👉以贴近现实的【面试官面试】形式帮助你系统学习后端技术 👉成体系知识帮你在后端进阶,每一道问答助你怒怼大厂面试官,收获大厂offer 👉《Java Offer训练营》包含Redis系列、MySQL系列、Kafka系列、ZooKeeper系列、JVM系列、多线程系列等等 👉制作不易,各位的支持是我创作的最大动力