zk特性-理解watch机制

  1. watch机制一
    1. 针对每个节点的操作,都会有一个监督者 -> watcher
    2. 当监控的某个对象(znode)发生了变化,则触发watch事件
    3. zk中的watch是一次性的,触发后立即销毁
  2. watch机制二
    1. 父结点,子节点 增删改都能触发其watch
    2. 针对不同类型的操作,触发的watch事件也不同
      1. (子)节点创建事件
      2. (子)结点删除事件
      3. (子)节点数据变化事件
  3. watch命令行
    1. 通过 get path [watch] 设置watch(具体得通过help查看当前版本所需的命令行)
    2. 父结点增删改操作触发watch
      1. 创建父结点触发:NodeCreated
        1. 首先查看当前所有节点,目前还没有“watchNode”节点,所以在stat watchNode节点的时候会先提示当前不存在此节点
        2. (由于目前使用的是3.7zk版本,所以添加watch事件会提示使用最新的方法进行添加,即 stat -w path)
        3. 但是也可以提前添加watch事件
        4. 接着调用create命令将 watchNode节点创建出来
        5. 则触发了WatchEvent事件,即NodeCreated事件。如上图最下方所示
      2. 修改父结点数据触发:NodeDataChanged
        1. 首先通过get -w path方法添加watch事件
        2. 接着修改watchNode的节点
        3. 触发NodeDataChanged事件
      3. 删除父结点触发:NodeDeleted
        1. 首先对该节点设置watch事件
        2. 接着进行删除,触发了NodeDeleted事件
      4. ls为父结点设置watch,创建子节点触发:NodeChildrenChanged
        1. 首先给watchNode通过-w 指令添加 watch事件
        2. 接着添加子节点
        3. 触发NodeChildrenChanged事件
      5. ls为父结点设置watch,删除子节点触发:NodeChildrenChanged
        1. ​​​​​​​
        2. 删除节点同样触发NodeChildrenChanged事件
        3. 删除节点跟创建子节点都触发了一样的事件,表示父结点只关心节点有没有变化,至于是删除还是创建,父结点是不做进一步处理的
      6. ​​​​​​​ls为父结点设置watch,修改子节点触发事件:
        1. ​​​​​​​
        2. 首先我们先创建子节点childNode,然后赋值123
        3. 接着ls -w /watchNode 父结点watch事件
        4. 修改子节点 /childNode 的值 改为456,结果没发生任何的事件触发
        5. 所以zk给父结点设置watch事件,子节点进行修改是不进行任何事件触发的。
    3. watch的使用场景
      1. ​​​​​​​统一资源配置
        1. 例如zk集群由3台机子构成的,sqlConfig进行更新后,将里面的信息修改后,就会触发修改事件NodeDataChanged,用于更新客户端的配置。
        2. 当主机的sqlConfig节点的数据进行改变之后,其他主机的sqlConfig也会相应进行改变,它们各自也会触发各自客户端信息。
        3. 在实际中,可能有成千上百台服务器,手动进行修改的工作量是非常大的,并且不能保证统一修改正确,通过这种方式可以更快更准确的进行修改。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值