zookeeper-zookeeper的应用场景

92 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情

配置中心

前面有提到过,zookeeper可以作为分布式应用配置中心,其主要思想为:

  1. 应用连接zookeeper服务器
  2. 读取zookeeper中的配置信息,并且注册watcher监听器,将读取到的配置信息存入本地变量中
  3. 当zookeeper中的配置信息发生变化时,通过watcher的回调方法捕获数据变化事件,应用接收事件,做对应的响应处理
  4. 应用重新获取配置信息,更新应用

生成分布式唯一id

不管是在传统的单体应用,或者是单实例or多实例的微服务应用中,单表的情况下,通常都是设置字段属性为自增主键,自动为每条记录生成一个唯一的ID。 但是如果进行了分库分表,就无法在依靠数据库的auto_increment属性来唯一标识一条记录了。因为在不同表中,主键id是有可能会重复的。 要应对这种情况,对业务来说,可以对表进行设置业务主键,不利用id来进行业务代码的唯一标识,但是也可以利用zookeeper来生成分布式唯一id,其主要的设计思路:

  1. 应用连接zookeeper服务器
  2. 创建一个指定目录,用于生成临时有序节点作为子节点
  3. 每次生成id时,在指定路径下,生成临时有序的一个节点
  4. 取刚刚生成的有序节点路径,截取序列号作为分布式环境下的唯一ID

实现分布式锁

zookeeper实现分布式锁的思路很简答,因为Zookeeper本身由集群保证数据一致,并自带Watch机制、客户端过期失效检测等机制,所以也非常适合实现分布式锁。

Zookeeper实现分布式锁的方式很简单,客户端通过创建临时节点来锁定分布式锁,如果创建成功,则加锁成功,否则,说明该锁已经被其他客户端锁定,这时当前客户端监听该临时节点变化,如果该临时节点被删除,则可以再次尝试锁定该分布式锁。