章节内容
上节我们完成了:
- ZNode的基本介绍
- ZNode节点类型的介绍
- 事务ID的介绍
- ZNode实机测试效果
背景介绍
这里是三台公网云服务器,每台 2C4G,搭建一个Hadoop的学习环境,供我学习。
之前已经在 VM 虚拟机上搭建过一次,但是没留下笔记,这次趁着前几天薅羊毛的3台机器,赶紧尝试在公网上搭建体验一下。
- 2C4G 编号 h121
- 2C4G 编号 h122
- 2C2G 编号 h123
Wacher 机制
ZooKeeper
使用Watcher机制
实现分布式
数据的发布/订阅
功能。
一个典型的发布/订阅
模型定义了一对多
的订阅关系,能够让多个订阅者
同时监听
某一个主题
对象,当这个主题
对象自身状态变化时
,会通知所有订阅者
,使他们能够做出相应的处理。
ZooKeeper 的 Watcher 机制主要包括:
- 客户端线程
- 客户端 Watcher Manager
- ZooKeeper服务器
Watcher 机制的工作原理
注册节点
客户端可以在读取或获取某个节点的数据时,选择注册一个 Watcher。
可以通过 getData()
, getChildren()
, 和exists()
等方法来注册 Watcher。
注册 Watcher 时,客户端
会发送
一个请求
到 ZooKeeper 服务器,服务器
将这个 Watcher 记录
在相应节点的 Watcher 列表
中。
触发节点
当节点发生变化时(例如节点的数据变化
、节点的创建或删除
、子节点的变化
等),ZooKeeper 服务器会触发相应节点上的 Watcher。
Watcher 触发是一次性
的。当一个 Watcher 被触发后,它就不再活跃
,如果客户端需要继续监视该节点,则需要重新注册 Watcher
。
进行通知
被触发的 Watcher 会向客户端发送一个事件通知(WatchedEvent)
。该事件包含了事件的类型(如节点创建、删除或数据变化)和受影响的节点路径。
客户端
在接收到通知
后,可以根据需要采取相应的行动
,例如重新获取节点数据
或重新注册 Watcher
。
Watcher特点
一次性
:Watcher 机制是一次性的,客户端需要在每次事件发生后重新注册 Watcher 以继续监视节点。异步通知
:Watcher 事件是异步通知的,这意味着客户端注册 Watcher 后不会阻塞等待事件的发生,而是通过事件通知机制处理事件。轻量级
:Watcher 是轻量级的,不会对 ZooKeeper 服务器带来显著的性能负担。
Watcher 使用场景
配置管理
:在分布式系统中,多个服务可能依赖同一个配置。通过 Watcher 机制,可以实现配置的动态更新,当配置变更时,所有依赖该配置的服务都能及时收到通知并进行更新。服务发现
:在服务发现机制中,客户端可以通过 Watcher 监视服务节点的变化,当有新服务加入或服务下线时,客户端能够及时感知并更新服务列表。分布式锁
:在实现分布式锁时,可以使用 Watcher 机制监控锁节点的状态,当锁被释放时,等待的客户端可以收到通知并尝试获取锁。
创建节点
永久节点
create /wzk 123456
顺序节点
create -s /wzk-order 654321
临时节点
create -e /wzk-temp 123123
读取节点
列出节点
ls /
查看数据
get /wzk
更新节点
set /wzk-temp 111222
删除节点
delete /wzk-temp