当前位置:   article > 正文

zookeeper面试题分析

zookeeper面试题分析

1、什么是zookeeper?

1zookeeper是一个分布式协调技术,是分布式数据一致性解决方案的典型代表,力求做到强一致性但最终实现的是最终一致性,采用CAP理论的AP,用来构建高可用分布式主备系统

2、zookeeper能干什么?

  1. 1、数据发布/订阅
  2. 2、命名服务
  3. 3、集群管理
  4. 4、Master选举
  5. 5、分布式锁
  6. 6、分布式队列
  7. 7、负载均衡

3、zookeeper提供了什么?

  1. 1、文件系统
  2. 2、消息广播

4、简单说一下zookeeper的文件系统?

  1. 1、zookeeper集群是有一个叫做命名节点空间的概念,其中节点就是znode,在zookeeper的文件系统中有两种节点,一是数据节点,二是目录节点,但是只有数据节点能存放数据
  2. 2、zookeeper集群为了维护高吞吐和低延迟的特性,就维护了这样树状的目录结构,而且数据节点的存储量不能太大,最多为1M

5、说一下ZAB协议?

  1. 1、ZAB协议是为分布式协调技术zookeeper提供的一个支持崩溃回复的原子广播协议
  2. 2、ZAB包括两种模式即崩溃回复和消息广播
  3. 3、首先当服务刚启动的时候或者leader节点宕机或者集群内有一半以上机器不能正常工作,此时会进入leader选举状态,然后再向其它服务器同步数据(采用的是两阶段提交),只要有一般以上返回成功的结果,此时便进入消息广播模式,整个zookeeper集群就可以对外提供服务并处理客户端的请求

6、zookeeper有几种数据节点?分别是什么?

  1. 17
  2. 持久节点 除非手动删除,否则数据一直存在
  3. 临时节点 临时节点的生命周期与客户端会话绑定,当会话关闭,数据才会丢失
  4. 持久顺序节点 和持久节点类似,只是多了顺序性,该特性是由父节点维护的一个自增整型数字
  5. 临时顺序节点 和临时节点类似,只是多了顺序性,该特性是由父节点维护的一个自增整型数字
  6. 容器节点 当节点的最后一个子节点删除之后,该容器节点会被自动删除
  7. TTL节点 在节点上加了过期时间
  8. TTL顺序节点 和TTL节点类似,只是多了顺序性,该特性是由父节点维护的一个自增整型数字

7、简单说一下zookeeper Watcher机制(www.yuchengyule.com  zookeeper数据变更通知)?

  1. 1、客户端注册Watcher
  2. 2、服务端触发Watcher
  3. 3、客户端回调Watcher
  4. 首先客户端会向服务端注册一个Watcher监听,当服务端的某些指令触发了这个Watcher的话,服务端就会向客户端返回一个消息通知,客户端接收到消息之后便可以做出业务上的改变

8、客户端注册Watcher是如何实现的?

  1. 1、首先会访问getData(www.hengxun2zc.cn)/ www.anxinzc5.cn
  2. getChildren(www.yuanmenyul.cn)/exist(www.changanylzc.com)三个API,传入Watcher对象
  3. 2、标记请求request,将Watcher封装成WatcherRegistration对象
  4. 3、再封装成Packet对象,服务端发送request
  5. 4、接收到服务端的request请求之后,将Watcher注册到zkWatcherManager中进行管理
  6. 5、将结果返回给客户端,注册成功

9、服务端处理Watcher是怎样实现的?

  1. 1、首先根据客户端的请求判断是否需要注册Watcher
  2. 2、比如服务端触发了setData()/delete(www.baihuayl7.cn)/create()方法,会触发一个叫做NodeDataChanged()的事件
  3. 3、服务端会将触发的事件类型、节点的路径封装成一个叫做WatchedEvent的对象
  4. 4、再向zkWatcherManager中的WatcherTable中根据节点路径查找
  5. 若找不到,说明客户端没有注册过Watcher
  6. 若找到,将Watcher从WatcherTable中删除(说明Watcher监听是一次性的)
  7. 5、调用process方法触发Watcher,主要是通过Servercnxn的TCP连接来通知客户端

10、客户端回调Watcher是怎样实现的?

  1. 1、客户端有个SendThread来接收Watcher通知的线程,接收的通知之后会交由EventThread线程处理
  2. 2、客户端的Watcher监听也是一次性的,一旦触发也会被删除

11、说一下你对zookeeper权限控制列表的认识(ACL)?

  1. 1、zookeeper的权限控制列表包含三个部分
  2. a、授权模式
  3. · IP:授权模式精确到IP粒度
  4. · Digest:相当于username:password,最常用的一种授权模式
  5. · World:相当于最特殊的Digest模式world:everyone,最开放的一种授权模式
  6. · Super:超级用户
  7. b、授权对象:被授予权限的用户例如某个IP
  8. c、权限
  9. · Create:创建
  10. · Delete:删除
  11. · Read:读
  12. · Write:写
  13. · Admin:管理

12、你知道Chroot属性是用来干什么的吗?

  1. 1、zookeeper新版本提出的一种特性,类似与namespace的说法,就是每个客户端与zookeeper的服务端之间的交互都保存在自己的namespace
  2. 2、在目前的分布式系统中,很多都是多个应用共用一个zookeeper集群,如果设置了chroot属性,那么不同应用之间就可以起到很好的隔离效果

13、zookeeper的会话管理是怎样的?

  1. 1、分桶策略:即将类似的会话分到同一个区内进行管理,这样做可以起到不同区块的分批处理以及同一区块的统一处理
  2. 2、分桶原则:下次会话超时时间点
  3. 3、计算公式:{[(当前时间+session超时时间)/(tickTime)]+1}*tickTime (其中tickTime是会话超时检查时间间隔)

14、zookeeper中的服务器角色都有哪些?分别是干什么的?

  1. 1leader
  2. a、事务的执行和调度者,保证事务的顺序性
  3. b、集群内部各服务的调度者
  4. 2follower
  5. a、处理非事务请求,将事务请求转发给leader处理
  6. b、参与集群内Proposal(提议)的投票
  7. c、参与leader选举的投票
  8. 3observer
  9. a、处理非事务请求,将事务请求转发给leader
  10. b、在不影响事务处理能力的基础上增加了处理非事务请求的能力
  11. c、不参与任何形式的投票

15、zookeeper中Server的工作状态?

  1. 1、looking:集群中leader选举的状态
  2. 2leading:说明当前服务器角色是leader节点
  3. 3、following:说明当前服务器角色是follower节点
  4. 4、observing:说明当前服务器角色是observer节点

16、zookeeper数据同步的实现方式?

  1. 1、zookeeper实现数据同步有4种方式,即直接差异化同步、先回滚再差异化同步、仅回滚同步、全量同步
  2. 2、首先先从learner(follower和observer节点的统称)节点获取最后一次操作数据的zxid,再从leader节点中获取最小的minZxid和最大的maxZxid
  3. 3、a、如果minZxid<zxid<maxZxid -->采用直接差异化同步
  4. b、如果leader服务器发现learner服务器包含了自己不存在的数据,那么learner服务器需要回滚到leader包含的数据然后在差异化处理
  5. -->先回滚再差异化同步
  6. c、如果zxid>maxZxid -->仅回滚同步即可
  7. d、如果zxid<minZxid -->全量同步

17、zookeeper是如何保证事务的顺序一致性的?

  1. 1、zookeeper采用全局递增的事务id(zxid)来保证事务的顺序一致性的
  2. 2、所有的提议在被提出的都会携带这个zxid,zxid是一个64位的数字;高32位是个epoch(时期,纪元,世,新时代)值,表示leader选举周期,每进行一次leader选举,该数字就会+1;后32位用来表示递增计数,当产生新的提议时,会依据数据库的两阶段提交过程,首先会像其它节点发送执行请求,如果超过半数以上的机器正确执行,那么该事务就可以被执行

18、分布式集群中为什么会有Master节点?

1、因为在分布式环境中,某些场景下你只需要计算一次,所有的节点都可以共享这个结果,避免重复计算,减少性能开销,所以就有了Master节点

19、zookeeper节点宕机了怎么办?

  1. 1、因为zookeeper本身也是一个集群,并且推荐配置集群机器不少于3
  2. 2、如果低于三台,挂了一台(无论是leader还是follower节点),集群都不能正常工作
  3. 3、如果集群机器>=3台,如果挂的是follower节点,不影响集群正常工作,如果挂的是leader节点,需要重新选举leader节点,选举完成之后还能正常工作

20、zookeeper负载均衡和nginx负载均衡的区别?

  1. 1、zookeeper的负载均衡可以调控,nginx的负载均衡只能调权重,其它可调控的方面都需要自己手写
  2. 2、但是nginx的吞吐量远大于zookeeper,所以要根据不同的场景选择合适的负载均衡方案

21、zookeeper有哪几种部署模式?

  1. 1、单机
  2. 2、伪集群
  3. 3、集群

22、zookeeper集群至少需要几台机器?集群规则是怎样的?

  1. 1、至少需要3态机器
  2. 2、规则是:2n+1(n>0的整数)

23、zookeeper集群支持动态添加机器吗?

  1. 1、动态添加机器说白了就是水平扩容,动态添加机器有以下两种方案
  2. 2、全部重启:先把集群中所有的服务都关掉,修改完配置之后再全部重启,不影响之前客户端的会话
  3. 3、逐个重启:因为zookeeper集群只要有半数以上的机器存活时,集群就能对外提供服务,因此我们可以逐个关闭机器,然后修改配置再重启

24、zookeeper集群的Watcher监听是永久的吗?为什么?

  1. 1、不是永久的(一次性的)
  2. 2、因为一旦是永久的话,服务端的每次更改数据都会发送一个消息通知给客户端,这对于网络开销和服务器端的压力都是非常大的,而且我们一般都是需要最新的一次数据,不需要每次变更数据的结果,所以zookeeper在Watcher监听这一块设置一次性的,一旦触发了Watcher,监听就会被移除,下次想触发还需要重新注册

25、zookeeper的java客户端有哪些?

  1. 1、zookeeper自带的zkClient
  2. 2、apache开源的Curator

26、chubby是什么?与zookeeper比你怎么看?

  1. 1、chubby是google的一个完全采用Paxos算法的项目,不开源
  2. 2、zookeeper可以说是chubby开源的版本,采用ZAB协议,开源

27、说几个zookeeper常用的命令?

  1. 1set /liulong 123
  2. 2get /liulong
  3. 3、ls /
  4. 4、update /liulong 456
  5. 5delete /liulong
  6. 6、stat /liulong

28、ZAB协议和Paxos算法的联系(相同点和不同点)?

  1. 1、相同点:
  2. a、都有一个leader进程,并且该leader进程负责调控lollower进程的运行
  3. bleader节点都需要经过半数以上的follower节点作出正确的反馈后,才会将一个提议提交
  4. c、在ZAB中每个提议都有一个epoll值,在Paxos中称为Ballot
  5. 2、不同点:
  6. aZAB采用AP,用来构建高可用分布式主备系统;Paxos采用CP,用来构建分布式一致性状态机系统

29、Zookeeper的典型应用场景有哪些?

  1. 1、消息发布与订阅 -->发布者发送消息供订阅者消费消息
  2. 2、命令服务 -->采用全局路径,每个路径对应一个名称用来指定相应的服务
  3. 3、master选举
  4. 4、集群管理
  5. 5、负载均衡
  6. 6、分布式锁 -->两种(保持独占/控制时序)
  7. 保持独占:每个znode都可以看作一把锁,在createZnode的时候,每个客户端都去创建/distribute_lock,最终创建成功的那个客户端就拥有了这把锁,用完之后删除/distribute_lock即可
  8. 控制时序:在/distribute_lock下面创建临时顺序节点,编号最小的拥有这把锁,用完删除
  9. 7、分布式队列: -->两种(同步队列/FIFO队列)
  10. 同步队列:当一个队列的所有成员都聚集时,这个队列才可用;只需要在约定目录下创建一个Watcher监听,当达到指定数量时,就触发Watcher通知机制
  11. FIFO队列:与分布式锁差不多,入队时有编号,出队时按编号依次出队
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/838803
推荐阅读
相关标签
  

闽ICP备14008679号