Zookeeper 有哪些应用场景?

Zookeeper 的功能很强大,应用场景很多,结合我们实际工作中使用 Dubbo 框架的情况,Zookeeper 主要是做注册中心用。

  • 基于 Dubbo 框架开发的提供者、消费者都向 Zookeeper 注册自己的 URL ,消费者还能拿到并订阅提供者的注册 URL ,以便在后续程序的执行中去调用提供者。
  • 而提供者发生了变动,也会通过 Zookeeper 向订阅的消费者发送通知。

当然,Zookeeper 能提供的不仅仅如此,再例如:

统一命名服务。

命名服务是指通过指定的名字来获取资源或服务的地址,利用zk创建一个全局的路径,即时唯一的路径,这个路径就可以作为一个名字,指向集群中机器或者提供服务的地址,又或者一个远程的对象等。

分布式锁服务。

这个比较好理解,Zookeeper 实现的分布式锁的可靠性会比 Redis 实现的CSDN_Stephen分布式锁高,当然相对来说,性能会低。​​​​​​​

配置管理。

例如说,这个老哥的文章就详细介绍了 实现基于 Zookeeper 的 Spring Cloud Config 的实现,提供配置中心的服务。Spring Cloud Config Zookeepericon-default.png?t=N7T8https://blog.csdn.net/CSDN_Stephen/article/details/78856323​​​​​​​

注册与发现。

是否有机器加入或退出

所有机器约定在父目录下创建临时目录节点,然后监听父目录节点下的子节点变化。一旦有机器挂掉,该机器与 ZooKeeper 的连接断开,其所创建的临时目录节点也被删除,所有其他机器都收到通知:某个节点被删除了。​​​​​​​

Master 选举。

基于 Zookeeper 实现分布式协调,从而实现主从的选举。这个在 Kafka、Elastic-Job 等等中间件,都有所使用到。

分布式锁。

有了 ZooKeeper 的一致性文件系统,锁的问题变得容易。锁服务可以分成两类,一个是保持独占,另一个是控制时序。

  •  1、保持独占,我们把 znode 看作是一把锁,通过 createZnode 的方式来实现。所有客户端都去创建 /distribute_lock 节点,最终成功创建的那个客户端也即拥有了这把锁。用完删除掉自己创建的 /distribute_lock 节点就释放出锁。
  • 2、控制时序,/distribute_lock 已经预先存在,所有客户端在它下面创建临时顺序编号目录节点,和 Master 一样,编号最小的获得锁,用完删除,依次方便。

队列管理

两种类型的队列。

    • 1、同步队列,当一个队列的成员都聚齐时,这个队列才可用,否则一直等待。在约定的目录下创建临时目录节点,监听节点数目是否是我们要求的数目。
    • 2、队列按照 FIFO 方式进行入队和出队操作。和分布式锁服务中的控制时序的场景基本原理一致,入列有编号,出列按编号。创建 PERSISTENT_SEQUENTIAL 节点,创建成功时 Watcher 通知等待的队列,队列删除序列号最小的节点以消费。此场景下,znode 用于消息存储,znode 存储的数据就是消息队列中的消息内容,SEQUENTIAL 序列号就是消息的编号,按序取出即可。由于创建的节点是持久化的,所以不必担心队列消息丢失的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值