zookeeper初探

541732025發表於2014-03-12
統一名稱空間


在zookeeper裡面,所有節點都稱為znode,znode作用:
1,存放資料,上限是1M
2,ACL(access control list)訪問控制列表,哪個客戶端可以訪問該節點
許可權            允許的操作
CREATE       create(子節點)
READ          getChildren
                  getData
WRITE         setData
DELETE       delete(子節點)
ADMIN        setACL

zookeeper中的資料模型
短暫znode:當客戶端訪問時建立,當客戶端斷掉連線,znode將刪掉,生存週期僅僅為客戶端與zookeeper伺服器的一次連線裡面
持久znode:
順序號:在建立znode時在名稱後面追加一個唯一的編號
觀察:在節點上放一個觀察,當節點改變狀態時會通知客戶端

使用zookeeper構建應用
1,配置服務
在zookeeper的樹形結構中,儲存著叢集的各種配置,每個客戶端在有配置的znode上放一個watch,當一個客戶端的配置修改後,它會對zookeeper的znode進行修改(setData),znode就會通知在此放有watch的其它客戶端進行setData,這樣就同步了配置更新

2,分散式鎖

指定一個作為鎖的znode,用它來描述被鎖的實體,稱為leader,然後希望獲取鎖的客戶端建立一些短暫順序znode,作為leader的子節點,任何時候,順序號小的客戶端將持有鎖,客戶端釋放鎖,或者客戶端程式死亡,對應的短暫znode將會被刪除,然後緊跟的下一個順序號的客戶端將持有鎖,透過建立一個關於leader刪除的watch,可使客戶端在獲得鎖時得到通知。

羊群效應
在以上實現過程中,當節點發生變化,所有客戶端都會得到通知,嘗試獲取鎖,會對zookeeper伺服器造成壓力,為了避免這種情況,需要最佳化通知,僅僅只有前一個順序號的子節點消失時才會通知下一個客戶端,而不是刪除(或者建立)任何子節點時都需要通知。例如在上圖中,只有lock-2消失時才需要通知lock-3對應的客戶端,lock-1消失或者有新的子節點加入時,不需要通知lock-3。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28912557/viewspace-1109690/,如需轉載,請註明出處,否則將追究法律責任。

相關文章