【大厂面试演练】听说你很懂ZooKeeper?那我考考你

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 面试官:看你简历写了精通ZooKeeper,那我就随便考考你吧。首先我上面说的共享锁实现方式如果在集群不大的情况下是可行的,而且他实现简单实用。而如果在集群规模大的场景下,可以这样改进...

在这里插入图片描述

面试官:咳咳咳,看你简历写了精通ZooKeeper,那我就随便考考你吧


面试官:不用慌尽管说,错了也没关系😊。。。


每日分享大厂面试演练,感兴趣就关注我吧❤️

面试官:知道ZooKeeper有什么应用场景吗

嗯嗯,主要有这几种。

  1. 数据发布/订阅。可以用来实现配置中心

  2. 命名服务。类似于UUID,可以生成全局唯一的ID

  3. 集群管理。每一个服务器是一个子节点,可以用来检测到集群中机器的上/下线情况

  4. 分布式锁


面试官思考中…


面试官:你挑一个你比较熟悉的场景讲讲

嗯嗯好的,那我讲下分布式锁。

是这样的,ZooKeep的获取锁时会在/exclusive_lock节点下创建子节点,如果创建成功则获得锁。如果失败,则客户端会在该节点注册一个子节点变更的Watcher监听

同样,释放锁则删除该子节点,此时Watcher监听就会通知客户端可以重新获取了。

在这里插入图片描述


面试官思考中…


面试官:你说的是排他锁,共享锁呢

好的面试官。共享锁也是类似的场景。

每次读、写请求同样是创建子节点,是一个类似于“/shared_lock/[Hostname]-请求类型-序号”的临时顺序节点。

接着会获取子节点列表,同时注册Watcher监听

  1. 获取读锁的话,如果前面比自己小的序号没有写请求,则可以读
  2. 获取写锁的话,只有在自己是序号最小的情况下,才可以读

而共享锁的释放锁和排他锁都是一样的

在这里插入图片描述

面试官:emmmm有没听说过共享锁的羊群效应

噢噢知道的面试官,这个问题主要是出现在集群规模比较大的场景下。

其实共享锁的特别之处,在于每次读、写请求都要注册Watcher监听来获取子节点列表,特别是数量更多的读请求。

子节点列表每次变动都要通知所有的服务器客户端,造成了短时间大量的事件通知,给ZooKeeper带来很大性能消耗。


面试官思考中…


面试官:那怎么解决呢

我认为要两方面来看吧。

首先我上面说的共享锁实现方式如果在集群不大的情况下是可行的,而且他实现简单实用。而如果在集群规模大的场景下,可以这样改进

读、写请求首先获取子节点列表,但都不注册Watcher监听

  • 读请求:只向比自己序号小的最后一个写请求节点注册Watcher监听
  • 写请求:只向比自己序号小的最后一个节点注册Watcher监听

这样就可以避免羊群效应,主要是从监听子节点列表,改进为只监听某个子节点


面试官心想,还不错嘛..


面试官:Kafka应用场景呢,知道Kafka是怎么利用ZooKeeper吗

嗯嗯好的,我了解到的主要有3方面。

  1. 使用ZooKeeper来对所有Broker服务器、Topic进行管理

    Broker启动后都会到ZooKeeper上创建属于自己的临时节点,其节点路径为/broker/ids/[0…N],注册Topic节点也是一样。

  2. 另外在Kafka生产者负载均衡方面

    Kafka消息生产者会通过监听Broker节点列表,负载均衡地分发到某一个Broker。

  3. 而在Kafka防消费重复消费方面

    消费者消费消息后,都会在消息分区写入临时节点,代表该消息已消费。


面试官思考中…


面试官:你刚刚说到Kafka生产者负载均衡,那消费者负载均衡知道吗

哦哦说欠了,消费者负载均衡有两方面。

  • 一方面,每一个消费者服务器都会在ZooKeeper创建消费者节点。当有新消息时,Kafka就可以通过ZooKeeper的消费者节点列表负载均衡地通知某个消费者
  • 另一方面,Kafa将一个Topic分成了多个分区,多个分区由不同的Brocker处理,这是实现对Brocker的负载均衡

在这里插入图片描述

面试官抓抓脑袋,继续看你的简历......


得想想考点你不懂的😰

未完待续。。。。。。

好了,今天的分享就先到这,我们下期继续。

创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
6月前
|
监控 负载均衡 Cloud Native
ZooKeeper分布式协调服务详解:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入剖析ZooKeeper分布式协调服务原理,涵盖核心概念如Server、Client、ZNode、ACL、Watcher,以及ZAB协议在一致性、会话管理、Leader选举中的作用。讨论ZooKeeper数据模型、操作、会话管理、集群部署与管理、性能调优和监控。同时,文章探讨了ZooKeeper在分布式锁、队列、服务注册与发现等场景的应用,并在面试方面分析了与其它服务的区别、实战挑战及解决方案。附带Java客户端实现分布式锁的代码示例,助力提升面试表现。
559 2
|
6月前
|
消息中间件 负载均衡 Kafka
【Kafka面试演练】那Kafka消费者手动提交、自动提交有什么区别?
嗯嗯Ok。分区的作用主要就是为了提高Kafka处理消息吞吐量。每一个topic会被分为多个分区。假如同一个topic下有n个分区、n个消费者,这样的话每个分区就会发送消息给对应的一个消费者,这样n个消费者负载均衡地处理消息。同时生产者会发送消息给不同分区,每个分区分给不同的brocker处理,让集群平坦压力,这样大大提高了Kafka的吞吐量。面试官思考中…
169 4
|
存储 算法 Java
准备跳槽必看的这道【Java面试题】:谈谈你对Zookeeper 选举原理的理解
一位工作了 7 年的程序员,最近在面试时被问到一个关于Zookeeper的问题。因为平时很少研究,所以面试的时候只能一直说:不知道,不知道,不知道。当时,他感觉很尴尬,面试还没结束,就已经知道应该被Pass了。于是又来问我,希望我能分享一期这样的视频。
98 2
|
5月前
|
缓存 NoSQL 数据库
分布式系统面试全集通第一篇(dubbo+redis+zookeeper----分布式+CAP+BASE+分布式事务+分布式锁)
分布式系统面试全集通第一篇(dubbo+redis+zookeeper----分布式+CAP+BASE+分布式事务+分布式锁)
103 0
|
消息中间件 存储 分布式计算
程序员转型到互联网面试必问题:谈谈你对Zookeeper的理解
对一个没有接触过分布式的小伙伴来说,可能还不太清楚Zookeeper在分布式应用中的重要性,今天有位从传统行业转型到互联网的小小伙伴问我,希望跟他讲讲Zookeeper什么,能解决什么问 题?今天,我给大家详细介绍一下。
82 1
|
NoSQL 算法 Java
高频面试题实现分布式锁中,zookeeper和Redis哪种更好?
一位6年工作经验的小伙伴,在某厂面试时被问到“实现分布式锁,Zookeeper 和 Redis 哪种更好?“,这其实是一个开放性的问题。并没有标准答案。那今天呢,我给大家分享一下我的理解,希望能够帮助到大家。
260 0
高频面试题实现分布式锁中,zookeeper和Redis哪种更好?
|
2月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
2月前
|
负载均衡 Java 应用服务中间件
微服务分布式系统架构之zookeeper与dubbor-1
微服务分布式系统架构之zookeeper与dubbor-1
|
2月前
|
存储 负载均衡 Dubbo
分布式-Zookeeper(一)
分布式-Zookeeper(一)
|
4月前
|
监控 NoSQL Java
分布式锁实现原理问题之ZooKeeper的观察器(Watcher)特点问题如何解决
分布式锁实现原理问题之ZooKeeper的观察器(Watcher)特点问题如何解决