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
- 每个节点只需要关注它的前一个节点即可。