• Zookeeper初步


    目录

    Zookeeper有什么作用?

    Zookeeper数据存储

    Zookeeper常用api

    Zookeeper的节点类型

    订阅与通知

    版本号


    Zookeeper有什么作用?

    Zookeeper数据存储

     Zookeeper通过树形节点Znode(文件系统)来存储数据,在Znode处可以选择存储数据,也可以选择只存储路径,路径下可以有子路径。

    Zookeeper常用api

    方法作用

    create /path data

    在指定位置创建节点,并设置数据
    delete /path删除节点
    exists /path判断节点是否存在
    setData /path data设置节点数据
    getData /path获取节点数据
    getChildren /path获取节点的子节点

    需要注意的是,getData和setData只能是全量更新和获取,而不能追加或者部分更新。

    Zookeeper的节点类型

    持久化节点和临时节点

    • 持久化节点是Znode一旦创建就会被持久化,这个节点必须显示使用delete删除,否则持续存在。
    • 临时节点是临时创建的节点,可以被显式删除,也会因为连接中断,或者down掉而自行删除。临时节点不允许有子节点。

    持久化节点和临时节点的使用选择:

    当你需要存储一些不随着节点的消息而始终存在的数据时,需要使用持久化节点。

    当节点的存在与服务节点或者master节点的活性绑定的时候,需要使用临时节点。

    有序节点和非有序节点

    有序节点指的是按照创建顺序为你生成一个自增的id,通过id维护节点的顺序,当然,持久化节点可以是有序的,临时节点也可以是有序的。

    有序节点和非有序节点的使用选择:

    当存在资源的协调使用,或者采用Zookeeper实现分布式锁等类似的场景时,可以使用有序节点,来协调处理的顺序。

     因此可以分为:有序持久化节点、无序持久化节点、有序临时节点、无序临时节点。

    订阅与通知

    假设我们需要关注这样一个场景:我们需要检测当前某个节点下有没有数据,有数据就需要处理。

     最常规的做法就是轮询,间隔一定的时间去查询一下有没有变动。但是如果更新时间无法预测,没有规律可言,那么造成资源的浪费。

    我们就会想,如果你有数据的时候告诉我一声,我是不是就不用每次都来问你了?

     这就是Zookeeper的订阅与通知功能。

    当c1有数据操作时,因为c2事先添加了watch(订阅),所以有了步骤2通知的存在。

    需要注意的是:

    1. watch是一次性的,发生了一次变动以后,就会失效,想要新的通知需要进行新的订阅

    2. 通知是在单次发生的情况下进行的,也就是说假如c1添加了两条数据,那么通知会在第一次添加结束和第二次添加开始之前进行通知。

    3. 可以查询Zookeeper的状态来避免接受通知的过程中又发生新的数据变动。

    watch的类型:

    数据变动
    子节点变动
    节点的创建和删除

    版本号

    Zookeeper会维护一个版本号,在每次数据变化时,都会升级一次版本号。在setData和delete操作的时候,为了解决并发问题,客户端需要指定版本号,当你的版本号与当前的版本号不一致时,说明你的版本号是旧的,操作会失败。只有版本号匹配时,操作才能成功。

  • 相关阅读:
    淘宝图片搜索API / item_search_img-按图搜索淘宝商品(拍立淘)/图片搜索API调用值说明
    spring框架限制接口是否要登录过才能访问
    SQLServer如何获取客户端IP
    正则表达式
    计算机两种体系结构及指令集
    记一次centos磁盘扩容
    产品需求交付质量保证的“七重门”
    好心情受邀出席“地球克隆计划5”元宇宙大会,发表主题演讲
    03 编译Java虚拟机
    Linux 指令学习
  • 原文地址:https://blog.csdn.net/Day_and_Night_2017/article/details/127714075