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


何为配置中心

image.png

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

    • 配置中心。

      用 ZooKeeper 实现配置中心

  • znode 能存储数据。

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

    2. 命名服务


何为命名服务?

image.png

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

image.png

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

    3. Master 选举


何为 Master 选举?

image.png

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

    ZooKeeper 如何来实现 Master 选举?

    image.png

  • 争抢主节点方式

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

      4. 分布式队列


ZooKeeper 实现分布式队列

image.png

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

    5. 分布式锁


ZooKeeper 实现分布式锁方式一

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

image.png

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

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

image.png

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

    ZooKeeper 实现分布式锁方式二

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

image.png

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

image.png