076. Zookeeper 典型应用场景

2021-03-03 10:42:36 浏览数 (1)

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


何为配置中心
  • 如何解决系统参数配置,及动态改参问题?
    • 配置中心。
用 ZooKeeper 实现配置中心
  • znode 能存储数据。
  • watch 能监听数据改变。
  • 一个配置项一个 znode。
  • 一个配置文件一个 znode。

2. 命名服务


何为命名服务?
  • 如何解决服务 A 可以动态得到服务 B 的调用地址?
    • ZooKeeper
  • 服务 A 对节点 /serviceB 添加 watch。
  • 服务 B 开发完成,注册 /serviceB 节点。
  • 服务 A 就可动态获取到服务 B 的信息。

3. Master 选举


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

4. 分布式队列


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

5. 分布式锁


ZooKeeper 实现分布式锁方式一
  • 原理:节点不可重名 watch
  • 争抢创建临时节点,未争抢到锁的实例添加 watch。
  • 创建了临时节点,就执行相关方法,执行完成之后,删除临时节点,释放锁。
  • 其他节点再次争抢创建临时节点。

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

  • 缺点:惊群效应
    • 假如有 1000 个节点,此时,有节点争抢到锁,其他节点会进入等待。锁释放,999 个节点会醒来,争抢锁。
  • 适用于并发小的情况。
ZooKeeper 实现分布式锁方式二
  • 原理:取号 最小号获得锁 watch
  • 每个节点只需要关注它的前一个节点即可。

0 人点赞