【面试官】知道Zookeeper有什么应用场景吗?
- 面试官:知道Zookeeper有什么应用场景吗?
- 面试官:你说的是排他锁,共享锁呢?
- 面试官:有没听说过共享锁的羊群效应?
- 面试官:那怎么解决?
- 面试官:Kafka应用场景呢,知道Kafka是怎么利用Zookeeper吗?
大家好,我是南哥。
一个Java学习与进阶的领路人,相信对你通关面试进入心心念念的公司有所帮助。
文章目录
- ZooKeeper分布式锁
- 排他锁实现分布式锁
- 共享锁实现分布式锁
- 共享锁羊群效应
- 处理羊群效应
- Kafka应用场景
- Kafka应用场景
1. ZooKeeper分布式锁
1.1 排他锁实现分布式锁
面试官:知道Zookeeper有什么应用场景吗?
目前地球村里大型公司部署的分布式技术,绝大部分都是由Zookeeper提供底层的技术支持,所以Zookeeper多么重要就不用我多说了吧。
我们可以利用Zookeeper来完成分布式系统涉及的各种核心功能,例如以下4种:
-
数据发布/订阅。可以用来实现配置中心。
-
命名服务。类似于UUID,可以生成全局唯一的ID。
-
集群管理。每一个服务器是一个子节点,可以用来检测到集群中机器的上/下线情况。
-
分布式锁。
南哥先讲下我们可以怎么利用Zookeeper来实现分布式锁,要实现分布式锁,分为获取锁和释放锁两个步骤。
ZooKeepr获取锁时会在/exclusive_lock
节点下创建子节点,如果创建成功则获得锁。如果创建失败,则访问Zookeeper的客户端会在该节点注册一个Watcher监听
,用来实时监控子节点的变更从而重新获得锁,这有点类似于线程的循环等待。
当要释放锁时,Zookeeper会删除该子节点,此时/exclusive_lock
节点下就有空位了。Watcher监听则通知客户端可以重新创建子节点来获得锁资源。
1.2 共享锁实现分布式锁
面试官:你说的是排他锁,共享锁呢?
大家有没发现,上面分布式锁的实现方式是排他锁,我们也可以使用共享锁的实现方式,来看看两者的区别。
排他锁,又称为写锁或独占锁,是一种基本的锁类型。如果事务T1对数据对象O1加上了排他锁,那么在整个加锁期间,只允许事务T1对O1进行读取和更新操作,其他任何事务都不能再对这个数据对象进行任何类型的操作——直到T1释放了排他锁。
共享锁,又称为读锁,同样是一种基本的锁类型。如果事务T1对数据对象O1加上了共享锁,那么当前事务只能对O1进行读取操作,其他事务也只
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
👉以面试官面试的形式,涵盖了你怒怼大厂面试官、拿下大厂面试所需掌握的核心知识、面试重点 👉相信一定对你顺利通关面试、拿到理想Offer有所帮助 👉花费大量精力去制作本专栏,创作不易,各位的支持就是我创作的最大动力