Day1:手写zk配置中心
- 入门
- zk分布式经典应用场景-配置中心
- 手写配置中心
- zk特性揭秘
一、简介
简介:zookeeper提供了一种集中式信息存储服务,可以看做是一个数据库。
特点:数据存储在内存中,类似文件系统的树形结构(文件和目录)
二、安装
1.单机版安装:
复制zoo.cfg配置文件,即可安装。
三.基础
1.常用命令
可使用help获取命令指南:
- ls 获取子节点
create 创建节点 - delete 删除节点,无法删除带子节点的节点
- rmr 删除节点,包括子节点
- get 从指定节点读取数据
- set 将数据存入指定节点
- ls2 查询指定节点之下的子节点,包括节点的元数据信息
- sync 等待数据进行同步
2.znode-构成
- 节点数据:存储的协调数据(状态信息、配置、位置信息等)
- 节点元数据:(stat结构)
- 数据大小上限:1M
3.stat结构
节点上的元数据信息
cZxid 创建该节点的zxid
ctime 该节点的创建时间
mZxid 该节点的最后修改zxid
mtime 该节点的最后修改时间
pZxid 该节点的最后子节点修改zxid
cversion 该节点的子节点变更次数
dataVersion 该节点数据被修改次数
aclVersion 该节点的ACL变更次数
ephemeralOwner 临时节点所有者会话ID,非临时节点为0
dataLength 该节点数据长度
numChildren 子节点数
除了ephemeralOwner、dataLength、numChild,其他属性都体现了顺序
4.znode-节点类型
5.临时节点-session
- 一个客户端连接一个会话,由zk分配唯一的会话id
- 客户端以特定的时间间隔发送心跳以保持会话有效,ticktime
- 超过会话超时时间未收到客户端的心跳,则判断客户端死了;默认2倍ticktime
- 会话中的请求按fifo顺序执行
四、zk配置中心应用
1.配置中心
2.配置中心更新流程
3.java Client
4.watch机制
客户端可以在znodes上设置watch,监听znode的变化
两类watch
- data watch 监听数据变更
- child watch 监听子节点变化
触发watch事件
created event:
enabled with a call to exists.
deleted event:
enabled with a call to exists,getdata and getchildren.
changed event:
enabled with a call to exists and getdata.
child event:
enabled with a call getchildren
5.watch深入
watch重要特性
- 一次性触发:watch触发后即被删除。要持续监控变化,则需要持续设置watch
- 有序性:客户端先得到watch通知,后才会看到变化结果
注意事项:
- watch是一次性触发器,如果您获得了一个watch事件,并且希望得到关于未来更改的通知,则必须设置另外一个watch
- 因为是一次性的,并且获取事件和发送watch新请求之间存在延迟,所以不能可靠地得到节点发生的每个更改
- 一个watch对象只会被特定的通知触发一次。如果一个watch对象同时注册了exists、getdata、当节点被删除时,删除事件对exists、getdata都有效,但是只会调用watch一次。
6.zookeeper实现配置中心
配置中心操作流程
配置方式1
配置方式2