您的位置: 小王聊社会 > 读书

阿里面试之zookeeper

2020-02-14来源:小王聊社会

watch机制

Watch 机制官方声明:一个 Watch 事件是一个一次性的触发器,当被设置了 Watch 的数据发生了改变的时 候,则服务器将这个改变发送给设置了 Watch 的客户端,以便通知它们。

Zookeeper 机制的特点:

1、一次性触发数据发生改变时,一个 watcher event 会被发送到 client,但是 client 只会收到一次这样的信 息

2、watcher event 异步发送 watcher 的通知事件从 server 发送到 client 是异步的,这就存在一个问题,不同 的客户端和服务器之间通过 socket 进行通信,由于网络延迟或其他因素导致客户端在不通的时刻监听到事件, 由于 Zookeeper 本身提供了 ordering guarantee,即客户端监听事件后,才会感知它所监视 znode 发生了 变化。所以我们使用 Zookeeper 不能期望能够监控到节点每次的变化。Zookeeper 只能保证最终的一致性, 而无法保证强一致性

3、数据监视 Zookeeper 有数据监视和子数据监视 getdata() and exists()设置数据监视,getchildren()设置了 子节点监视。

4 注册 watcher exists

5 触发 watcher

6 会触发 上设置的 data watch如果 set 成功的话)一个成功的 create) 操作会触发被 创建的 上的数据 watch以及其父节点上的 child watch而一个成功的 delete操作将会同时触发一 个 的 data watch 和 child watch因为这样就没有子节点了)同时也会触发其父节点的 child watch

7、当一个客户端连接到一个新的服务器上时,watch 将会被以任意会话事件触发。当与一个服务器失去连接的 时候,是无法接收到 watch 的。而当 client 重新连接时,如果需要的话,所有先前注册过的 watch,都会被重 新注册。通常这是完全透明的。只有在一个特殊情况下,watch 可能会丢失:对于一个未创建的 znode 的 exist watch,如果在客户端断开连接期间被创建了,并且随后在客户端连接上之前又删除了,这种情况下,这 个 watch 事件可能会被丢失。

8 Watch 是轻量级的其实就是本地 JVM 的 Callback服务器端只是存了是否有设置了 Watcher 的布尔类 型

zookeeper 负载均衡和 nginx 负载均衡

zk 的负载均衡是可以调控,nginx 只是能调权重,其他需要可控的都需要自己写插件;但是 nginx 的吞吐量比 zk 大很多,应该说按业务选择用哪种

机器中为什么会有 leader

在分布式环境中,有些业务逻辑只需要集群中的某一台机器进行执行,其他的机器可以共享这个结果,这样可 以大大减少重复计算提高性能,于是就需要进行 leader 选举。

zookeeper 负载均衡和 nginx 负载均衡 区别

zk 的负载均衡是可以调控,nginx 只是能调权重,其他需要可控的都需要自己写插件;但是 nginx 的吞吐量比 zk 大很多,应该说按业务选择用哪种方式。

阿里面试之zookeeper

本文由小王聊社会整理,内容仅供参考,未经书面授权禁止转载!图片来源图虫创意,版权归原作者所有。