Zookeeper基礎理論

但求大資料開發一職發表於2020-10-09
Zookeeper是分散式開源協調服務, 主要用來解決分散式叢集中應用系統的一致性問題. 本質上是分散式小檔案儲存系統。
 
特性
  • 全域性資料一致性(叢集中每個伺服器儲存一份相同的資料副本,Client 無論連線到哪個伺服器,展示的資料都是一致的,這是最重要的特徵)  
  • 可靠性
  • 順序性
  • 資料更新原子性(要不成功,要不失敗),實時性
 
叢集角色
Leader
  Zookeeper 叢集工作的核心,事務請求(寫操作)的唯一排程和處理者,保證叢集事務處理的順序性; 叢集內部各個伺服器的排程者。 對於 create , setData , delete 等有寫操作的請求,則需要統一轉發給leader 處理, leader 需要決定編號、執行操作,這個過程稱為一個事務 。
Follower
  處理客戶端非事務(讀操作)請求,轉發事務請求給 Leader,參與叢集 Leader 選舉投票。 此外,針對訪問量比較大的 zookeeper 叢集,還可新增觀察者角色。
Observer
  觀察者角色,觀察 Zookeeper 叢集的最新狀態變化並將這些狀態同步過來,其對於非事務請求可以進行獨立處理,對於事務請求,則會轉發給 Leader伺服器進行處理。 不會參與任何形式的投票只提供非事務服務,通常用於在不影響叢集事務處理能力的前提下提升叢集的非事務處理能力。
  叢集搭建指的是 ZooKeeper 分散式模式安裝。通常由 2n+1臺 servers 組成。這是因為為了保證 Leader 選舉(基於 Paxos 演算法的實現)能過得到多數的支援,所以 ZooKeeper 叢集的數量一般為奇數。

 

 
資料模型
  採用樹形層次結構,每個節點稱為Znode。Znode兼具檔案和目錄兩種特點,像檔案維護著資料,元資訊等資料結構,又像目錄一樣可以作為路徑標識。Znode具有原子性操作。儲存大小有限制,1M。Znode通過路徑引用。
Znode有兩種
  • 臨時節點(不允許擁有子節點,會話結束,自動刪除,也可以手動刪除)
  • 永久節點
Znode序列化特效:如果建立的時候指定的話,該 Znode 的名字後面會自動追加一個不斷增加的序列號。序列號對於此節點的父節點來說是唯一的,這樣便會記錄每個子節點建立的先後順序。它的格式為“%10d”(10 位數字,沒有數值的數位用 0 補充,例如“0000000001”),那麼可以分為:
  • 永久序列化節點
  • 臨時序列化加點
  • 永久非序列化節點
  • 臨時非序列化節點

 

 
Watcher機制
分散式資料訂閱 / 釋出功能,Watcher機制為以下三個過程:客戶端向服務端註冊Watcher、服務端事件發生觸發 Watcher、客戶端回撥 Watcher 得到觸發事件情況
特點:一次性觸發,事件封裝,非同步傳送,先註冊再觸發
其中連線狀態事件(type=None, path=null)不需要客戶端註冊,客戶端只要有需要直接處理就行了。
 
選舉機制
選舉機制預設的演算法是 FastLeaderElection,採用投票數大於半數則勝出的邏輯(服務ID,選舉狀態,資料ID,邏輯時鐘)
全新叢集選舉:給自己投票,有一臺超過半數直接成為Leader。
非全新叢集選舉 :對於執行正常的 zookeeper 叢集,中途有機器 down 掉,需要重新選舉時,選舉過程就需要加入以下
  • 資料 ID:資料新的 version 就大,資料每次更新都會更新 version。
  • 伺服器 ID:就是我們配置的 myid 中的值,每個機器一個。
  • 邏輯時鐘:值從 0 開始遞增,每次選舉對應一個值. 同一次選舉中,這個值是一致的。
這樣選舉的標準就變成:
  1. 邏輯時鐘小的選舉結果被忽略,重新投票;
  2. 統一邏輯時鐘後,資料 id 大的勝出;
  3. 資料 id 相同的情況下,伺服器 id 大的勝出;
 
獨佔鎖:寫操作,所有客戶端來獲取鎖, 只有一個可以獲得, 使用臨時節點實現,資料物件只對一個事務可見
共享鎖:讀操作,使用臨時節點實現,資料對所有事務都可見
控制時序:所有人都可以得到鎖, 只不過有個順序, 某個節點下的臨時順序子節點實現
Zokeeper適合分散式鎖的原因:每個節點都是天然的順序發號器;節點具有遞增性,可以規定最小的獲得鎖;節點監聽機制,可以保障佔有鎖方式有序且高效。
 
ZK在分散式叢集中的作用

 

相關文章