【Zookeeper面试知识<2>zookeeper工作原理?ZAB和Paxos联系区别?Zookeepe主节点状态同步?服务器状态?文件系统?通知机制?Watcher特性与机制?与Dubbo关系?】

一.知识回顾:

【0.Zookeeper专栏相关的知识帮你整理看了,点我,找你需要的看】
【1.Zookeeper常见的面试题目<1>~~~持续更新中】

二.Zookeeper常见的面试题目

2.1 Zookeeper 工作原理?

  1. Zookeeper 的核心是原子广播协议,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。
  2. Zab 协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。
  3. 当服务启动或者在领导者崩溃后,Zab 就进入了恢复模式,当领导者被选举出来,且大多数 Server 完成了和 leader 的状态同步以后,恢复模式就结束了。
  4. 状态同步保证了 leader 和 Server 具有相同的系统状态。

2.2 ZAB 和 Paxos 算法的联系与区别?

相同点:

  1. 两者都存在一个类似于 Leader 进程的角色,由其负责协调多个 Follower 进程的运行
  2. Leader 进程都会等待超过半数的 Follower 做出正确的反馈后,才会将一个提案进行提交
  3. ZAB 协议中,每个 Proposal 中都包含一个 epoch 值来代表当前的Leader周期,类似于Paxos 中名字为 Ballot

不同点:

  1. ZAB 用来构建高可用的分布式数据主备系统(Zookeeper),Paxos 是用来构建分布式一致性状态机系统。

2.3 Zookeeper 怎么保证主从节点的状态同步?

  1. Zookeeper 的核心是原子广播机制,这个机制保证了各个 server 之间的同步。 实现这个机制的协议叫做 Zab 协议。Zab 协议有两种模式,它们分别是恢复模式和广播模式。
  2. 恢复模式:当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出 来,且大多数 server 完成了和 leader 的状态同步以后,恢复模式就结束了。状态同步保证了 leader 和 server 具有相同的系统状态。
  3. 广播模式:一旦 leader 已经和多数的 follower 进行了状态同步后,它就可以开始广播消息 了,即进入广播状态。这时候当一个 server 加入 ZooKeeper 服务中,它会在恢复模式下启动,发现 leader,并和 leader 进行状态同步。待到同步结束,它也参与消息广播。ZooKeeper 服务一直维持在 Broadcast 状态,直到 leader 崩溃了或者 leader 失去了大部分的 followers 支持。

2.4 服务器的状态?

服务器具有四种状态,分别是 LOOKING、FOLLOWING、LEADING、 OBSERVING。

  1. LOOKING:寻找 Leader 状态。当服务器处于该状态时,它会认为当前集群中没有 Leader,因此需要进入 Leader 选举状态。
  2. FOLLOWING:跟随者状态。表明当前服务器角色是 Follower。
  3. LEADING:领导者状态。表明当前服务器角色是 Leader。
  4. OBSERVING:观察者状态。表明当前服务器角色是 Observer。

2.5 Zookeeper 文件系统?

  1. Zookeeper 提供一个多层级的节点命名空间(节点称为 znode)。与文件系统不同的是,这些节点都可以设置关联的数据,而文件系统中只有文件节点可以存放数据而目录节点不行。
  2. Zookeeper 为了保证高吞吐和低延迟,在内存中维护了这个树状的目录结构, 这种特性使得 Zookeeper 不能用于存放大量的数据,每个节点的存放数据上限为1M。

2.6 说一下 Zookeeper 的通知机制?

client 端会对某个 znode 建立一个 watcher 事件,当该 znode 发生变化时,这些 client 会收到 zk 的通知,然后 client 可以根据 znode 变化来做出业务上的改变等。

2.7 Zookeeper Watcher 机制 – 数据变更通知

  1. Zookeeper 允许客户端向服务端的某个 Znode 注册一个 Watcher 监听,当服务端的一些指定事件触发了这个 Watcher,服务端会向指定客户端发送一个事件通知来实现分布式的通知功能,然后客户端根据 Watcher 通知状态和事件类 型做出业务上的改变。
  2. 工作机制:客户端注册 watcher—>服务端处理 watcher—>客户端回调 watcher
  3. Watcher 特性总结:
    (1)一次性:无论是服务端还是客户端,一旦一个 Watcher 被触发 ,Zookeeper 都会将其从相应的存储中移除。这样的设计有效的减轻了服务端的压力,不然对于更新非常频繁的节点,服务端会不断的向客户端发送事件通知,无论对于网络还是服务端的压力都非常大。
    (2)客户端串行执行,客户端 Watcher 回调的过程是一个串行同步的过程。
    (3)轻量:Watcher 通知非常简单,只会告诉客户端发生了事件,而不会说明事件的具体内容。客户端向服务端注册 Watcher 的时候,并不会把客户端真实的 Watcher 对象实体传递到服务端,仅仅是在客户端请求中使用 boolean 类型属性进行了标记。
    (4)watcher event 异步发送 watcher 的通知事件从 server 发送到 client 是异步的,这就存在一个问题,不同的客户端和服务器之间通过 socket 进行通信,由于网络延迟或其他因素导致客户端在不通的时刻监听到事件,由于 Zookeeper 本身提供了 ordering guarantee,即客户端监听事件后,才会感知它所监视 znode发生了变化。所以我们使用 Zookeeper 不能监控到节点每次的变化。Zookeeper 只能保证最终的一致性,而无法保证强一致性。
    (5)注册 watcher的命令操作: getData、exists、getChildren
    (6)触发 watcher的命令操作: create、delete、setData
    (7)当一个客户端连接到一个新的服务器上时,watch将会被以任意会话事件触发。当与一个服务器失去连接的时候,是无法接收到 watch 的。而当 client 重新连接时,如果需要的话,所有先前注册过的 watch,都会被重新注册。通常这是完全透明的。只有在一个特殊情况下,watch 可能会丢失:对于一个未创建的 znode的 exist watch,如果在客户端断开连接期间被创建了,并且随后在客户端连接上之前又删除了,这种情况下,这个 watch 事件可能会被丢失。

2.8 Zookeeper 和 Dubbo 的关系?

Zookeeper的作用:
  1. zookeeper用来注册服务和进行负载均衡,哪一个服务由哪一个机器来提供必需让调用者知道,简单来说就是ip地址和服务名称的对应关系。当然也可以通过硬编码的方式把这种对应关系在调用方业务代码中实现,但是如果提供服务的机器挂掉调用者无法知晓,如果不更改代码会继续请求挂掉的机器提供服务。
  2. zookeeper通过心跳机制可以检测挂掉的机器并将挂掉机器的ip和服务对应关系从列表中删除。至于支持高并发,简单来说就是横向扩展,在不更改代码的情况通过添加机器来提高运算能力。通过添加新的机器向zookeeper注册服务,服务的提供者多了能服务的客户就多了。
Dubbo的作用:
  1. 是管理中间层的工具,在业务层到数据仓库间有非常多服务的接入和服务提供者需要调度,dubbo提供一个框架解决这个问题。
  2. 注意这里的dubbo只是一个框架,至于你架子上放什么是完全取决于你。这个框架中要完成调度必须要有一个分布式的注册中心,储存所有服务的元数据,你可以用zk,也可以用别的,只是大家都用zk。
  3. Zookeeper和Dubbo的关系:
    3.1 Dubbo中的注册中心进行抽象,它可以外接不同的存储媒介给注册中心提供服务,有 ZooKeeper,Memcached,Redis 等。引入了 ZooKeeper 作为存储媒介,也就把 ZooKeeper 的特性引进来。
    3.2 负载均衡,单注册中心的承载能力是有限的,在流量达到一定程度的时候就需要分流,负载均衡就是为了分流而存在的,一个 ZooKeeper集群配合相应的Web 应用就可以很容易达到负载均衡;
    3.3 资源同步,单单有负载均衡还不够,节点之间的数据和资源需要同步,ZooKeeper 集群就天然具备有这样的功能;
    3.4 命名服务,将树状结构用于维护全局的服务地址列表,服务提供者在启动的时候,向ZooKeeper 上的指定节点 /dubbo/${serviceName}/providers目录下写入自己的 URL 地址,这个操作就完成了服务的发布。
    3.5 其他特性还有 Maser选举,分布式锁等。

好了,到这里【Zookeeper面试知识<2>zookeeper工作原理?ZAB和Paxos联系区别?Zookeepe主节点状态同步?服务器状态?文件系统?通知机制?Watcher特性与机制?与Dubbo关系?】就先结束了,后续让我们继续一起学习关于zookeeper的知识!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

硕风和炜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值