美文网首页
zookeeper场景运用及原理

zookeeper场景运用及原理

作者: 北海北_6dc3 | 来源:发表于2020-03-20 16:32 被阅读0次

    ZooKeeper提供了什么?

    1. 文件系统
    2. 通知机制
    3. Zookeeper文件系统

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

    Zookeeper能做什么

    • 分布式锁

    前面我谈过,zookeeper中存在4种类型的Znode节点,分别对应:

    PERSISTENT:永久节点
    EPHEMERAL:临时节点
    PERSISTENT_SEQUENTIAL:永久节点 序列化
    EPHEMERAL_SEQUENTIAL:临时节点序列化

    根据这个特性,我们就可实现分布式锁,原理是使用:临时节点序列化。

    1. 客户端连接 Zookeeper,并在 /lock 下创建临时且有序(即EPHEMERAL_SEQUENTIAL)的子节点,如,第一个子节点为 /lock/lock-000,第二个为 /lock/lock-001,以此类推;
    2. 创建成功后,获取 /lock 下的子节点列表,判断刚创建的子节点在列表中是否是序号最小的子节点,如果是,则认为是获得锁,否则,监听刚创建的子节点的前一位子节点的删除消息,等获得该子节点的变更通知后,重复此步骤,直至获得锁为止;
    3. 执行业务代码;
    4. 完成业务代码后,删除对应子节点释放锁;

    与redis实现分布式锁区别:

    1. Redis 需要自己实现重试逻辑,比较消耗性能;
    2. zk 重试获取锁,对节点注册监听器即可,不需要主动尝试,性能开销小;【前面节点变化,通知】
    3. 如果 Redis 获取锁的客户端挂了,就不能主动删除 key,只能等待 key 的超时到期,而 zk 会主动发现客户端断连,并将临时 znode 删除,触发后面的监听器。

    参考资料
    详解Zookeeper原理与应用场景

    • 队列管理

    和分布式锁服务中的控制时序场景基本原理一致,入列有编号,出列按编号。

    • 命名服务、配置管理

    其中命名服务和配置管理可以考虑为一个公共的数据库,这个数据库能检测数据变化,会话状态,并发布通知

    • 集群管理

    同队列管理相似功能

    参考资料:
    大白话讲Zookeeper能做什么?(一):命名服务与配置管理
    zookeeper命名服务
    ZOOkeeper 详解(转)

    常见框架中的zookeeper应用

    dubbo

    作为注册中心

    kafka

    存储kafka的meta数据

    相关文章

      网友评论

          本文标题:zookeeper场景运用及原理

          本文链接:https://www.haomeiwen.com/subject/nhbjyhtx.html