在大資料和雲計算普遍的今天,越來越多的應用使用了Apache下zookeeper這個利器,舉幾個家喻戶小的,像HBase,Kafka,國内阿裡巴巴開源的Dubbo等。
首先來了解下zookeeper,原型是Google的Chubby,資料結構是樹,我個人了解其實zookeeper也是nosql的一種,是一個非關系型資料庫,裡面存儲的是樹結構的資料,包括結點與關系,還有結點上存儲的資料。不過zookeeper的強大之處還不是nosql,他的強大之處在于内部的叢集機制與事件機制,我說的叢集機制是指zookeeper的叢集中的選舉算法,涉及FAST PAXOS和兩段送出算法,相比我看過的hazelcast這個叢集下記憶體共享的元件的選舉算法要複雜。還的一點就是事件的監聽與處理機制,我在工作中使用到的包括結點的變化事件和結點的子樹變化事件等,前者适用與系統的配置的管理,後者則适用于故障監聽和失效轉移。
用我之前部落格裡的圖為例:

主要是紫色圈起來的部分,叢集中的系統部件以TCP連接配接到zookeeper上,在一個結點下建立一個臨時的子結點,當連接配接到zookeeper的部件發生故障與zookeeper之間的socket斷開後,zookeeper中的父結點會産生一個子樹發生變化的事件,這樣對于訂閱了這個父結點子樹變化的系統會收會通知。這個功能特别适用于Service的消費方與提供方之間進行可靠的選擇。
還以蘋果消息通知推送系統為例,服務消息方先訂閱事件,并做事件變化的處理:
而服務的提供方要做的就是将自己注冊到結點上:
這個功能也是zookeeper被廣泛應用的主要原理,當然,zookeeper還有很多值得研究和學習的地方,推薦大家好好的研究和使用一下zookeeper,我在工作中已經在很多場景中使用,有一個是用zookeeper做的一個系統功能的開關,也就是用他做配置管理。
相信在大資料和雲計算下zookeeper一定會被應用越來越廣,性能也會越來越好。