Zookeepe实践与应用--分布队列

31 篇文章 0 订阅
5 篇文章 0 订阅
分布式队列
  • 接触到不少分布式队列的产品,比如,ActiveMq,RocketMQ,kafka等消息中间价,现在我们看看Zookeeper实现的分布式队列。
  • 分布式队列简单讲就可以分两个部分,一种是先进先出,另外一种是等所有元素都到齐都会统一执行的Barrier模型
FIFO先入先出
  • FIFO(First in First out,先入先出)的算法思想在计算机里面用的比较多,比如队列里面,先进入的能先执行,在Zookeeper的实现中,FIFO类似一个共享锁模型,所有客户端在节点/queue_fifo下创建临时节点/queue_fifo/192.168.1.1/1-00000001,/queue_fifo/192.168.1.1/1-00000002,/queue_fifo/192.168.1.1/1-00000003,依次安id递增的关系创建,创建后依据以下几个步骤
    1. 通过getChildren接口获取/queue_fifo下所有子节点
    2. 确认字节的节点序号在所有子节点中的顺序
    3. 如果字节不是最小的节点,那么进入等待,同时向比字节小的最后一个节点注册Watcher,如果字节是最小的节点则执行逻辑
    4. 接受Watcher通知重复1中步骤

在这里插入图片描述

Barrier:分布式屏障
  • Birrier在分布式系统中特指一个协调条件,规定一个队列中的元素都到达指定条件的时候才能够执行,大致的如下:创建屏障个数节点/queue_barrier并且赋值10,表示10个子节点同时满足,接着所有客户端在/queue_barrier下创建临时子节点,/queue_barrier/host1,/queue_barrier/host2,/queue_barrier/host3,创建后,依据如下步骤执行:
  1. 通过getData获取/queue_barrier下节点的数据内容:10
  2. 通过getChildren获取/queue_barrier下所有子节点,同时对子节点列表添加变化监听Watcher
  3. 统计子节点个数
  4. 如果子节点个数不足10,进入等待,否则进入业务处理
  5. 接受watcher通知后重复步骤2
  • 整个过程如下:
    在这里插入图片描述

上一篇Zookeeper–分布式锁实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值