1. 程式人生 > >ZooKeeper重點知識總結

ZooKeeper重點知識總結

1.ZooKeeper的概念及特點

概念:ZooKeeper是一個典型的分散式資料一致性的解決方案,分散式應用程式可以基於它實現諸如資料釋出/訂閱、負載均衡、命名服務、分散式協調/通知、叢集管理、Master選舉、分散式鎖和分散式佇列等功能。

特點:

1.順序一致性:從同一個客戶端發起的事務請求,按照發起順序被應用到ZooKeeper中去。理由:因為客戶端ClientCnxn類中有兩個佇列分別為outgoingQueue和pendingQueue,它倆分別用來儲存客戶端的請求和服務端的響應。sendThread會從outgoingQueue佇列中依次傳送請求,並將packet儲存到pendingQueue,以便等待服務端響應返回後進行相應的處理,同時請求響應返回後,客戶端會從pendingQueue佇列取出一個Packet進行處理,並驗證服務端響應包含的XID來保證請求處理的順序性。整個流程都是順序一致性的。

2.原子性:所有事務請求的處理結果在整個叢集中所有機器上的應用情況是一致的。ZooKeeper基於ZAB協議的,ZooKeeper Atomic Broadcast(原子廣播協議)。

3.單一檢視:無論客戶端連線哪個ZooKeeper伺服器,其看到的服務端資料模型是一致的。

4.可靠性

5.實時性

2.ZAB協議

ZAB協議的核心:所有事務請求必須由一個全域性唯一的伺服器即Leader伺服器來協調處理,並且會為每個事務設定一個全域性遞增的ID,叫作ZXID,來保證請求處理的順序。除Leader伺服器之外的叫作Follower伺服器。Leader伺服器負責將一個客戶端事務請求轉換成一個事務Proposal,並將該Proposal分發給叢集中所有的Follower伺服器,之後Leader伺服器需要等待所有Follower伺服器的反饋,一旦半數的Follower進行了正確的反饋後,那麼Leader就會再次向所有的Follower伺服器分發Commit訊息,要求其將前一個Proposal進行提交。

ZAB:通過了過半成功寫來優化了二階段提交協議,優化了同步阻塞問題。

 

3.ZooKeeper中事務的概念

ZooKeeper中會應用並改變記憶體資料庫的操作叫作事務,比如插入節點、刪除節點、子節點列表變化等。反之,就是非事務。

在ZooKeeper中,需要注意的是,事務都由Leader處理,而Follower伺服器只能自行處理非事務。非Leader接收到事務會把事務轉發給Leader伺服器。

4.ZooKeeper中幾個重要的概念

1.節點

節點中需要注意的是臨時節點和順序節點,臨時節點主要應用於伺服器的註冊,伺服器連線斷開臨時節點便會自行清理,可以通過這個特點,判斷ZooKeeper伺服器之間的是否連線,比如Leader和Follower之間有沒有連線。順序節點則可以利用作為共享鎖,利用順序節點會自動配一個順序id的特性。從而根據順序控制來保證共享鎖的機制。

 

2.Watcher機制

ZooKeeper中的Watcher都是一次性的,即觸發之後便失效,需要每次註冊。ZKClient則是通過內部封裝改善了這個特點,內部通過使用執行事務之後便重新註冊,使得wathcer一直都存在。

Watcher會引發資料變更的通知,因此ZooKeeper引入了Watcher機制來實現分散式的通知功能。比如分散式經典的應用就是資料釋出/訂閱功能。釋出者將某個主題物件釋出在ZooKeeper上,其餘多個訂閱者則在該節點上註冊Watcher監聽,等到節點發生變化,就會通知訂閱者。