• zookeeper的通知机制


    一、znode

    Zookeeper维护一个类似文件系统的数据结构。简单来说,有点类似windows中注册表的结构,有名称,有树节点,有Key(键)/Value(值)对的关系,可以看做一个树形结构的数据库,分布在不同的机器上做名称管理。

    Znode维护了一个stat结构,这个stat包含数据变化的版本号、访问控制列表变化、还有时间戳。版本号和时间戳一起,可让Zookeeper验证缓存和协调更新。每次znode的数据发生了变化,版本号就增加。

    例如,无论何时客户端检索数据,它也一起检索数据的版本号。并且当客户端执行更新或删除时,客户端必须提供他正在改变的znode的版本号。如果它提供的版本号和真实的数据版本号不一致,更新将会失败。

     二、通知机制

    客户端注册监听他关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,zookeeper会通知客户端。

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

    watcher的特点:

    • 轻量级:一个callback函数。

    • 异步性:不会block正常的读写请求。

    • 主动推送:Watch被触发时,由Zookeeper服务端主动将更新推送给客户端。

    • 一次性:数据变化时,Watch只会被触发一次。如果客户端想得到后续更新的通知,必须要在 Watch 被触发后重新注册一个 Watch。

    • 仅通知:仅通知变更类型,不附带变更后的结果。

    • 顺序性:如果多个更新触发了多个Watch,那 Watch 被触发的顺序与更新顺序一致。

    使用watch的注意事项:

    • 由于watcher是一次性的,所以需要自己去实现永久watch

    • 如果被watch的节点频繁更新,会出现“丢数据”的情况

    • watcher数量过多会导致性能下降

  • 相关阅读:
    内存分析工具MAT(Memory Analyzer Tool)从安装到使用
    java 技术分享
    FreeMarker三宗罪之优缺点
    100+经典Java面试题及答案解析
    java中使用SimpleDateFormat实现字符串和日期的相互转换
    SQLSERVER还原数据库失败:错误: 3154
    值不能为null.参数名: viewInfo,如何解决
    java中判断Object对象类型
    ajax图片上传(asp.net +jquery+ashx)
    ElasticSearch 入门介绍
  • 原文地址:https://www.cnblogs.com/jxxblogs/p/14906213.html
Copyright © 2020-2023  润新知