zoukankan      html  css  js  c++  java
  • 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数量过多会导致性能下降

  • 相关阅读:
    堆排序
    理解KMP算法
    C++性能提升
    论文阅读 | Pre-trained Models for Natural Language Processing: A Survey
    模型融合
    论文阅读 | COMPRESSING BERT: STUDYING THE EFFECTS OF WEIGHT PRUNING ON TRANSFER LEARNING
    论文阅读 | Compressing Large-Scale Transformer-Based Models: A Case Study on BERT
    沉淀再出发:关于netty的一些理解和使用
    沉淀再出发:mongodb的使用
    沉淀再出发:ElasticSearch的中文分词器ik
  • 原文地址:https://www.cnblogs.com/jxxblogs/p/14906213.html
Copyright © 2011-2022 走看看