[b][color=olive][size=large]散仙,在前幾篇關于zookeeper的文章中,介紹了基于zookeeper實作的分布式公平鎖,以及非公平鎖,那麼本篇呢,散仙就來介紹下關于使用zookeeper如何模拟實作一個分布式隊列。
那麼為什麼需要分布式隊列呢?,我們都知道隊列,在我們的程式設計開發中,是一種比不可少的資料結構,最典型莫過于,生産者與消費者的例子了,我們在程式過經常使用的隊列是基于非分布式的環境,JAVA JDK也自帶了非常多的隊列的實作,有基于阻塞模式的,也有基于非阻塞模式的,這些我們可以在不同的場景下使用。
要想把JDK自帶的隊列給設計成分布式的隊列,是一件非常繁瑣的事,這時候我就可以輕而易舉的使用zookeeper來完成這個功能,zookeeper由于其特殊的檔案系統,是以在分布式環境下,能做許多有用的事。
[/size][/color][/b]
[b][size=large][color=green]例如在Hadoop中,map任務完成後,我們啟動reduce,我們都知道Hadoop的MapReduce是一種分布式的計算架構,是以這時候我們就可以使用zookeeper來完成這裡的分布式隊列的運用,雖然,hadoop本身用的并不是zookeeper來實作的。
代碼如下:
[/color][/size][/b]
[b][color=green][size=large]
代碼如上,散仙在代碼裡設定隊列的總數為3,就執行幹某一件事,我可以去zk的主節點上注冊臨時有序的節點,每注冊一次都會校驗,目前隊列是不是以及滿隊,如果滿隊的話,就開始執行某個任務,進而達到分布式隊列的模拟,這與JDK自帶的CountDownLatch和CyclicBarrier是非常類似的,當然我們也可也使用zk模拟,這兩個非分布式的功能,進而為我們的應用程式在分布式的環境下提供便利。
[/size][/color][/b]