076. Zookeeper 典型应用场景

原创
2020/09/17 13:50
阅读数 62

1. 数据发布订阅(配置中心)


何为配置中心

image-20200609055714205

  • 如何解决系统参数配置,及动态改参问题?
    • 配置中心。

用 ZooKeeper 实现配置中心

  • znode 能存储数据。
  • watch 能监听数据改变。
  • 一个配置项一个 znode。
  • 一个配置文件一个 znode。

2. 命名服务


何为命名服务?

image-20200609060856782

  • 如何解决服务 A 可以动态得到服务 B 的调用地址?
    • ZooKeeper

image-20200609061041859

  • 服务 A 对节点 /serviceB 添加 watch。
  • 服务 B 开发完成,注册 /serviceB 节点。
  • 服务 A 就可动态获取到服务 B 的信息。

3. Master 选举


何为 Master 选举?

image-20200609061246445

  • 当 Master 不可用时,如何自动选举出新的 Master ?

ZooKeeper 如何来实现 Master 选举?

image-20200609061423927

  • 争抢主节点方式
    • 实例 1 为Master,会创建临时主节点。
    • 当实例 1 宕机,临时主节点消失,此时实例 2 和实例 3 会争抢创建临时主节点。
    • 假如实例 2 创建了临时主节点,实例 2 变为 Master,实例 3 发现主节点已存在,不再创建,获取主节点信息。
  • 最小节点方式
    • 会将所有的节点注册到 servers 中。
    • 此时可以用最小的节点作为主节点。

4. 分布式队列


ZooKeeper 实现分布式队列

image-20200609062620750

  • 无界队列:可以实现。
  • 有界队列:入队之前需要判断子节点数量,使用到分布式锁。

5. 分布式锁


ZooKeeper 实现分布式锁方式一

  • 原理:节点不可重名 + watch

image-20200609063027136

  • 争抢创建临时节点,未争抢到锁的实例添加 watch。
  • 创建了临时节点,就执行相关方法,执行完成之后,删除临时节点,释放锁。
  • 其他节点再次争抢创建临时节点。

使用临时节点的原因:防止实例在创建临时节点之后,因各种原因宕机,此时,临时节点也能被同时删除。假如是永久节点,节点不会被删除,锁也就不会被释放。

image-20200609063433673

  • 缺点:惊群效应

    • 假如有 1000 个节点,此时,有节点争抢到锁,其他节点会进入等待。锁释放,999 个节点会醒来,争抢锁。
  • 适用于并发小的情况。

ZooKeeper 实现分布式锁方式二

  • 原理:取号 + 最小号获得锁 + watch

image-20200609064215786

  • 每个节点只需要关注它的前一个节点即可。

image-20200609064321417

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部