本文介绍 zookeeper 的几个应用场景:分布式协调、分布式锁、元数据/配置信息管理、HA高可用性。
分布式协调
zookeeper 最开始就是用来解决分布式应用如何互相协调这样一个问题的。分布式协调是 zookeeper 的典型应用。
具体来说是起到这样的作用,系统 A 保存订单之后直接给用户返回结果,同时发一个消息到 MQ 里面,系统 B 订阅 MQ 里的消息,然后正式修改库存。这里有一个问题就是怎么让系统 A 知道系统 B 已经成功对库存进行了修改?
这里就用 zookeeper 来做分布式协调,具体包括下面三个步骤:
- 系统 A 创建一个订单 orderId = 1,同时在 zk 中对 orderId=1 的 node 注册一个监听;
- 系统 B 更新订单之后修改 A 订阅的 node 的状态,比如说约定好修改为 finish_update;
- 系统 A 发现它订阅的节点发生了变化,就知道系统 B 成功对库存进行操作。
分布式锁
比如说现在连续有两个请求要对一个数据进行操作,系统 A 和系统 B 各自同时接到了一个请求,但是只能一台机器执行完另外一台再执行。
这个时候就可以用到分布式锁,假设系统 A 稍快一步,接到请求之后先从 zk 中获取了分布式锁,就可以在 zk 中创建一个 znode,并执行相关操作。此时系统 B 也尝试创建这个 znode 但是会发现创建不了,就会注册一个监听,等别人释放掉锁,它再来执行。
元数据/配置信息管理
zookeeper 可以用作很多系统的配置信息的管理,比如 kafka、storm 等等都用 zk 来做一些元数据、配置信息的管理,dubbo 也推荐使用 zk 来作为注册中心。
HA高可用性
zk 也可以用来做高可用,比如说系统 A 比较重要,我们用一台机器备用。系统 A 的机器挂了,备用机器立刻补位。