天天看點

Zookeeper最全詳解(看這篇就夠了)

作者:mikechen的網際網路架構
Zookeeper最全詳解(看這篇就夠了)

ZooKeeper作為 Dubbo的注冊中心為大家熟知,其實并不算陌生,今天我就一起來詳細了解一下 ZooKeeper @mikechen

Zookeeper的了解?

Zookeeper最全詳解(看這篇就夠了)

Zookeeper 是一個開源的分布式 協調服務架構,它是一個為分布式應用提供一緻性服務的軟體。

Zookeeper 緻力于提供一個高性能、高可用,且具備嚴格的順序通路控制能力的分 布式協調服務,是雅虎公司建立,是 Google 的 Chubby 一個開源的實作。

Zookeeper的角色?

Zookeeper最全詳解(看這篇就夠了)

1.leader角色

處理所有的事務請求(寫請求),可以處理讀請求,叢集中隻能有一個Leader

2. Follower角色

隻能處理讀請求,同時作為 Leader的候選節點,即如果Leader當機,Follower節點要參與到新的Leader選舉中,有可能成為新的Leader節點。

3. Observer角色

Observer:隻能處理讀請求,不能參與選舉。

Zookeeper 的資料模型?

在 Zookeeper 中,可以說 Zookeeper 中的所有存儲的資料是由 znode 組成的,節點也稱為 znode,并以 key/value 形式存儲資料。

整體結構類似于 linux 檔案系統的模式以樹形結構存儲,其中根路徑以 / 開頭。

Zookeeper最全詳解(看這篇就夠了)

提供了四種類型的資料節點 Znode:

Zookeeper最全詳解(看這篇就夠了)

1.持久節點

除非手動删除,否則節點一直存在于Zookeeper上

2.持久順序節點

基本特性同持久節點,隻是增加了順序屬性,節點名後邊會追加一個由父節點維護的自增整型數字

3.臨時節點

用戶端與Zookeeper斷開連接配接後,該節點被删除

4.臨時順序節點

基本特性同臨時節點,增加了順序屬性,節點名後邊會追加一個由父節點維護的自增整型數字

Zookeeper的核心功能?

雖然可以用Zookeeper實作很多功能,但是主要提供了三個核心功能:

1.檔案系統

zk的存儲的資料的結構,類似于一個檔案系統。

每個節點稱為znode,每個znode都是一個類似于KV的結構,每個節點名稱相當于key,每個節點中都儲存了對應的資料,類似于Key對應的value。每個znode下面都可以有多個子節點,就這樣一直延續下去,構成了類似于Linux檔案系統的架構。

Zookeeper最全詳解(看這篇就夠了)

2.通知機制

當某個client監聽某個節點時,當該節點發生變化時(有可能是增加子節點,或者節點值變了等),zk就會通知監聽該節點的用戶端來處理。

3.叢集管理機制

zk本身是一個叢集結構,有一個leader節點,負責寫請求,多個follower負責響應讀請求。并且在leader節點故障時,會自動根據選舉機制從剩下的follower中選出新的leader。

Zookeeper的架構與叢集規則?

Zookeeper最全詳解(看這篇就夠了)

叢集為2N+1台,N>0,比如N為1的情況就是3台。

為什麼是3台而不是2台呢?因為叢集需要一半以上的機器可用,是以,3台挂掉1台還能工作,2台不能。

Zookeeper的工作模式?

1.Zookeeper從設計模式的角度了解,是一個基于觀察者模式設計的分布式服務管理架構。

2.基于事件監聽通知,監聽注冊到上面的節點的動向(修改、新增、删除),會實時的通知通路用戶端。

3.選舉機制,中心化思想,分為主從操作,進行分布式控制所有slave之間的同步決策。

Zab 協定的原理可細分為四個階段:選舉(Leader Election)、發現(Discovery)、同步(Synchronization)和廣播(Broadcast)。

Zookeeper最全詳解(看這篇就夠了)

1.Leader election(選舉階段)

節點在一開始都處于選舉階段,隻要有一個節點得到超過半數節點的票數,它就可以當選準 Leader。

2.Discovery(發現階段)

在這個階段,Followers跟準Leader進行通信,同步Followers最近接收的事務提議。

3.Synchronization(同步階段)

同步階段主要是利用Leader前一階段獲得的最新提議曆史,同步叢集中所有的副本。同步完成之後準Leader才會成為真正的Leader。

4.Broadcast(廣播階段)

到了這個階段,Zookeeper叢集才能正式對外提供事務服務,并且Leader 可以進行消息廣播。同時如果有新的節點加入,還需要對新節點進行同步。

Zookeeper如何實作分布式鎖?

常見的分布式鎖實作方案裡面,除了使用redis來實作之外,使用Zookeeper也可以實作分布式鎖。

Zookeeper 分布式鎖是基于 臨時順序節點 來實作的,鎖可了解為 Zookeeper 上的一個節點,當需要擷取鎖時,就在這個鎖節點下建立一個臨時順序節點。

如下圖所示:

Zookeeper最全詳解(看這篇就夠了)

當存在多個用戶端同時來擷取鎖,就按順序依次建立多個臨時順序節點,但隻有排列序号是第一的那個節點能擷取鎖成功。

其他節點則按順序分别監聽前一個節點的變化,當被監聽者釋放鎖時,監聽者就可以馬上獲得鎖。

Zookeeper的應用場景?

Zookeeper最全詳解(看這篇就夠了)

1.命名服務Name Service

依賴Zookeeper可以生成全局唯一的節點ID,來對分布式系統中的資源進行管理。

2.分布式協調

這是Zookeeper的核心使用了。利用Wather的監聽機制,一個系統的某個節點狀态發生改變,另外系統可以得到通知。

3.叢集管理

分布式叢集中狀态的監控和管理,使用Zookeeper來存儲。

4.分布式鎖

利用Zookeeper建立臨時順序節點的特性。

以上

更多分布式架構系列、阿裡架構師進階系列,請檢視以下文章:

阿裡架構師進階從0到1全部合集(建議收藏)

Zookeeper最全詳解(看這篇就夠了)

繼續閱讀