Apache頂級項目介紹3 - ZooKeeper

今天介紹Apache著名頂級項目ZooKeeper,簡稱zk。如封面所示,管理zoo的兇猛野獸可不是簡單之事。之所以先介紹zk是因爲其影響力之大,範圍之廣,在後續的頂級項目中但凡設計分佈式幾乎都與其關聯,所以還是及早鋪墊爲妙。


官網介紹,zk是一個分佈式的,開源的分佈式應用程序協調服務,爲分佈式應用提供了一致性服務,核心功能包括:配置維護,命名服務,分佈式同步,組服務等。前半句比較繞口,大意爲,zk本身設計,架構也是分佈式的,同時它的核心功能也是爲分佈式應用提供服務的。呵呵,這年代,技術標榜中不提及分佈式都不敢出來混。

另外,其實zk是Google的項目Chubby的開源實現,這裏拋幾個引子,google可謂是dt時代身後大師,很多知名的項目包括hadoop,hbase以及zk都是根據google的幾篇論文而來,zk是來自“The Chubby lock service for loosely-coupled distributed system”。說的直白一點,google本身在大型分佈式領域經過了多年技術沉澱,早早領先於業界,首先用google本身都是採用閉源商業開發,所以只好拋幾篇paper出來,然而僅僅這2,3片paper就對整個世界都起了大變化,業界的大師以及各it公司如獲至寶,茅塞頓開,包括facebook以及中國的阿里與騰訊,紛紛實現Google的開源軟件,以至於後來的發展已經超出了google的預計,甚至倒逼Google後來的一些開源,如Go, Kubernetes等,也不知是google成就了dt還是雙贏。向Google致敬,帶着濃濃的硅谷底蘊,算一家偉大的技術公司!國內的巨頭,目前還在霸道,土豪的成長中,帶着濃濃的商業氣息。

zk目前stable版本是3.4,系統數據模型如下:


可以看出分佈式的設計,其核心數據模型理念類似文件目錄結構(通過/分割),其中每一個節點zk中稱之爲znodes,每個節點都可以用根path來決定,總體提供一個分佈式環境共享的hierarchal命名空間,這樣分佈式服務process就可以通過這個命名空間協調。另外,與文件目錄的差異,這個數據模型是動態kept in-memory,目的是提供高併發,低延遲。注意,最近的業界,流行提到孿生術語“高併發,低延遲”。zk自己的分佈式體現在它的架構設計。



zk的分佈式結構,znodes之間通過in-memory,以及也支持持久化transaction logs,snapshots, 同時顯然支持replicated。

zk客戶端通過tcp鏈接一個zk服務器,zk客戶端通過持續發送request,獲得response,監控events,以及發送heart beats,即心跳脈衝,如果連接斷掉,會重新自動連接新的server。不用擔心,zk客戶端通常會被封裝在其它高端產品中。


繼續回到上邊的znodes,這個是其核心之一。zonde可以保存狀態信息,配置信息,location信息等。所以每個znode大小很小,幾個字節-幾k而已。znodes維護了structure的狀態信息,版本,acl變化。每次znode數據變化會自動加版本,zk客戶端同樣可以收到版本信息。znode有一個重要的概念ephemeral nodes,中文意思是指一些短暫生命週期的節點。ephemeral nodes非常有用,它的生命週期是當session創建時激活,session結束了就刪除。

另一個zk的功力是watches,zk客戶可以監控znodes,一個watch event將被激活當有任何的znode變化,進而zk客戶端可以做進一步處理,比如發現某些server不可用,zk客戶端可以負載均衡等。


zk的API也清晰簡單,create,delete,exists,get,sync等,與普通數據庫活着文件系統類似。

zk的replication如下圖所示

值得注意的是,zk的replicaitn數據庫是in-memory包含整個data tree。 zk的讀請求會從local replica服務數據庫獲取,zk的write請求會通過agreement protocol:所有的write請求會轉發到single server,zk術語叫leader,其它的zk server術語叫followers,哪裏都有領導啊?哈哈。消息層負責重新選舉leader,以及同步leader到followers。

zk性能統計:


放心,性能不好官網也不敢上圖了。此統計圖來自Yahoo! 注意,囉嗦一下,yahoo後面的!是yahoo的一部分哦。

好了,來點乾貨,run一下吧,當然要分佈式run了,先來3個server吧。Running Replicated ZooKeeper, 單機模式很簡單,replicated模式是生產環境必備模式。zk中一個replicated group叫做quorum,replicated模式下,所有的quorum服務器都複製相同配置文件。


別忘了建一個data目錄,創建一個myid文件,裏面標示server數字如1.

run run run zk


創建一個node吧,run一些命令


可以故意刪除一些server,如刪除server2,然後繼續連接,測試zk的分佈式集羣。不高興弄了。大家可以自己玩。

再上一個watch的java用例,來自官網。


好了,先拋轉頭到這裏吧,有興趣的可以繼續深入研究。如zk的分佈式鎖,以fast paxos爲基礎的變種ZAB協議,以及leader選舉算法。


總結一下,zk目前已經儼然成爲分佈式集羣管理的必不可少的一個模塊,包括hadoop,hbase等用它來管理namenode, hbase裏的master election,server狀態同步。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章