博客 zookeeper分布式队列

zookeeper分布式队列

   数栈君   发表于 2023-06-09 14:31  298  0

分布式队列
分布式队列可以简单分为两大类:一种是常规的FIFO先入先出队列模型,还有一种是 等待队列元素聚集后统一安排处理执行的Barrier模型。

FIFO先入先出
FIFO(First Input First Output,先入先出), FIFO 队列是一种非常典型且应用广泛的按序执行的队列模型:先进入队列的请求操作先完成后,才会开始处理后面的请求。

使用ZooKeeper实现FIFO队列,和之前提到的共享锁的实现非常类似。FIFO队列就类似于一个全写的共享锁模型,大体的设计思路其实非常简单:所有客户端都会到/queue_fifo 这个节点下面创建一个临时顺序节点,例如如/queue_fifo/host1-00000001。



创建完节点后,根据如下4个步骤来确定执行顺序:

通过调用getChildren接口来获取/queue_fifo节点的所有子节点,即获取队列中所有的元素。
确定自己的节点序号在所有子节点中的顺序。
如果自己的序号不是最小,那么需要等待,同时向比自己序号小的最后一个节点注册Watcher监听。
接收到Watcher通知后,重复步骤1。


Barrier:分布式屏障
Barrier原意是指障碍物、屏障,而在分布式系统中,特指系统之间的一个协调条件,规定了一个队列的元素必须都集聚后才能统一进行安排,否则一直等待。这往往出现在那些大规模分布式并行计算的应用场景上:最终的合并计算需要基于很多并行计算的子结果来进行。这些队列其实是在 FIFO 队列的基础上进行了增强,大致的设计思想如下:开始时,/queue_barrier 节点是一个已经存在的默认节点,并且将其节点的数据内容赋值为一个数字n来代表Barrier值,例如n=10表示只有当/queue_barrier节点下的子节点个数达到10后,才会打开Barrier。之后,所有的客户端都会到/queue_barrie节点下创建一个临时节点,例如/queue_barrier/host1,如图所示:



创建完节点后,按照如下步骤执行:

通过调用getData接口获取/queue_barrier节点的数据内容:10。
通过调用getChildren接口获取/queue_barrier节点下的所有子节点,同时注册对子节点变更的Watcher监听。
统计子节点的个数。
如果子节点个数还不足10个,那么需要等待。
接受到Wacher通知后,重复步骤2

  • 免责申明:

    本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!

  • 《数据治理行业实践白皮书》下载地址:https://fs80.cn/4w2atu


  • 《数栈V6.0产品白皮书》下载地址:https://fs80.cn/cw0iw1

  • 想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=bbs

    同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:
    https://github.com/DTStack

0条评论
上一篇:zookeeper分布式锁
社区公告
  • 大数据领域最专业的产品&技术交流社区,专注于探讨与分享大数据领域有趣又火热的信息,专业又专注的数据人园地

最新活动更多
微信扫码获取数字化转型资料
钉钉扫码加入技术交流群