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