Zookeeper-分布式队列
分布式队列可以简单分为2个大类:
一种常规的FIFO先入先出队列模型,还有一种等待队列元素聚集后统一安排处理执行的Barrier模型。
FIFO先入先出
FIFO -First Input First Output 先入先出,FIFO,先进入队列的请求操作先完成后,才会开始处理后面的请求
Zookeeper实现FIFO队列,和共享锁实现非常类似,FIFO队列就类似于一个全写的共享锁模型,
创建节点后,
- 通过调用getChildren接口来获取/queue-fifo节点下的所有子节点,获取队列中的所有元素。
- 确定自己的节点序号在所有子节点中的顺序
- 如果自己的序号不是最小,那么就需要等待,同时向比自己序号小的最后一个节点注册Watcher监听
- 接收到Watcher通知后,重复步骤1
Barrier模型
愿意是指障碍物,屏障,在分布式系统中,特指系统之间的一个协调条件,规定一个队列的元素,必须都聚集后才能统一进行安排,否则一直等待,
/queue_barrier节点是一个已经存在的默认节点,并且将节点的数据内容赋值为一个数字N来代表Barrier值,例如N=10,表示只有当/queue_barrier节点下的子节点个数达到10后,才会打开Barrier,之扣所有客户端都会到/queue_barrier节点下创建一个临时节点,
创建节点后,
- 通过调用getData接口获取/queue_barrier节点的数据内容10
- 通过调用getChildrend接口获取/queue_barrier节点下的所有子节点,同时注册子节点变更的Watcher监听
- 统计子节点的个数
- 如果子节点个数还不足10个,那么需要等待
- 接受Watcher通知扣,重复步骤2