【7. ZooKeeper常见面试题】

常见面试题

ZAB 协议是什么?

ZAB 协议是为分布式协调服务 Zookeeper 专门设计的一种支持崩溃恢复的原子广播协议。

​ ZAB 协议包括两种基本的模式:崩溃恢复和消息广播。
​ 当整个 zookeeper 集群刚刚启动或者 Leader 服务器宕机、重启或者网络故障导致不存在过半的服务器与 Leader 服务器保持正常通信时,所有进程(服务器)进入崩溃恢复模式,首先选举产生新的 Leader 服务器,然后集群中 Follower 服务器开始与新的 Leader 服务器进行数据同步,当集群中超过半数机器与该 Leader 服务器完成数据同步之后退出恢复模式进入消息广播模式,Leader 服务器开始接收客户端的事务请求生成事物提案来进行事务请求处理。

崩溃恢复模式不能提供服务,目的是为了保证cp

Znode 有哪几种类型

PERSISTENT-持久节点
除非手动删除,否则节点一直存在于 Zookeeper 上

EPHEMERAL-临时节点
临时节点的生命周期与客户端会话绑定,一旦客户端会话失效(客户端与 zookeeper 连接断开不一定会话失效),那么这个客户端创建的所有临时节点都会被移除。

PERSISTENT_SEQUENTIAL-持久顺序节点
基本特性同持久节点,只是增加了顺序属性,节点名后边会追加一个由父节点维护的自增整型数字。

EPHEMERAL_SEQUENTIAL-临时顺序节点
基本特性同临时节点,增加了顺序属性,节点名后边会追加一个由父节点维护的自增整型数字。

zookeeper有哪几种类型的角色

Leader
事务请求的唯一调度和处理者,保证集群事务处理的顺序性 集群内部各服务的调度者

Follower
处理客户端的非事务请求,转发事务请求给 Leader 服务器参与事务请求 Proposal 的投票参与 Leader 选举投票

Observer
3.3.0 版本以后引入的一个服务器角色,在不影响集群事务处理能力的基础上提升集群的非事务处理能力**处理客户端的非事务请求,**转发事务请求给 Leader 服务器,不参与任何形式的投票

ACL 权限控制机制

UGO(User/Group/Others)
目前在 Linux/Unix 文件系统中使用,也是使用最广泛的权限控制方式。是一种粗粒度的文件系统权限控制模式。

ACL(Access Control List)访问控制列表包括三个方面:

权限模式(Scheme) (用户权限认证方式)
IP:从 IP 地址粒度进行权限控制
Digest:最常用,用类似于 username:password 的权限标识来进行权限配置,便于区分不同应用来进行权限控制
World:最开放的权限控制方式,是一种特殊的 digest 模式,只有一个权限标识“world:anyone”
Super:超级用户授权对象,授权对象指的是权限赋予的用户或一个指定实体,例如 IP 地址或是机器灯。的

权限 Permission (用户具体拥有什么权限)
CREATE:数据节点创建权限,允许授权对象在该 Znode 下创建子节点
DELETE:子节点删除权限,允许授权对象删除该数据节点的子节点
READ:数据节点的读取权限,允许授权对象访问该数据节点并读取其数据内容或子节点列表等
WRITE:数据节点更新权限,允许授权对象对该数据节点进行更新操作 ADMIN:数据节点管理权限,允许授权对象对该数据节点进行 ACL 相关设置操作

ZK Server 的工作状态有哪些,能否具体描述

​ 服务器具有四种状态,分别是 LOOKING、FOLLOWING、LEADING、OBSERVING。
LOOKING:寻找 Leader 状态。当服务器处于该状态时,它会认为当前集群中没有 Leader, 因此需要进入 Leader 选举状态。
FOLLOWING:跟随者状态。表明当前服务器角色是 Follower。

LEADING:领导者状态。表明当前服务器角色是 Leader。
OBSERVING:观察者状态。表明当前服务器角色是 Observer。

ZK 的 watch 机制是否永久

否, 是一次性通知的,如果调用了getData方法还想要继续获得监听,需要重新设置监听器(Watcher watcher)或者设置原有监听器继续监听, 这样做的目的是为了减少服务器不必要的网络开销, 因为多数客户端获取到一次通知后就不需要继续通知了.

ZK 的常见客户端有哪些

java客户端有: 原生的Zookeeper, ZkClient以及Apache开源的Curator

分布式锁用 zk 怎么实现

​ 这个是重点, 代码实现后续补充

用zookeeper实现分布式栅栏

​ 这个是重点, 代码实现后续补充

Zk 默认的通信框架是什么

​ 默认使用的是NIO, 可以改成Netty

消息广播的流程

在这里插入图片描述

  • Leader 接收到消息请求后,将消息赋予一个全局唯一的 64 位自增 id,叫做:zxid, 通过 zxid 的大小比较即可实现因果有序这一特性。
  • Leader 通过先进先出队列(通过 TCP 协议来实现,以此实现了全局有序这一特性)将带有 zxid 的消息作为一个提案(proposal)分发给所有 follower
  • 当 follower 接收到 proposal,先将 proposal 写到硬盘(保证持久性),写硬盘成功后再向 leader 回一个 ACK
  • 当 leader 接收到合法数量的 ACKs 后,leader 就向所有 follower 发送 COMMIT 命令,会在本地执行该消息。
  • 当 follower 收到消息的 COMMIT 命令时,就会执行该消息(有写磁盘的log, 可以保证follower的commit一定成功)

领导选举的流程

重点: 选举时候处于崩溃恢复模式,不能提供服务, 待选举完成后, 切换到广播模式才能够继续提供服务

在这里插入图片描述

  • 每个 Server 会发出一个投票,第一次都是投自己。投票信息:(myid,ZXID)
  • 收集来自各个服务器的投票
  • 处理投票并重新投票,处理逻辑:优先比较 ZXID,然后比较 myid
  • 统计投票,只要超过半数的机器接收到同样的投票信息,就可以确定 leader
  • 改变服务器状态
  • 切换到广播模式
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岁月玲珑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值