Zookeeper —— 初識

什麼是 Zookeeper

Zookeeper 是一個開放源代碼的分佈式協調服務,由雅虎建立,是 Google Chubby 的開源實現;node

Zookeeper 是典型的分佈式數據一致性的解決方案,分佈式應用程序能夠基於它來實現:數據發佈/訂閱負載均衡命名服務分佈式鎖等;api

Zookeeper 基本概念

集羣角色:

Zookeeper 中有 Leader、Follower 和 Observer 三種角色,Leader 爲客戶端提供讀和寫服務,Follower 和 Observer 只提供讀服務;服務器

其中 Observer 不參與 Leader 過程,也不參與寫操做的「過半寫成功」的策略,因此增長 Observer 機器能夠在不影響寫性能的狀況下增長讀性能;app

Leader:

事務請求的惟一調度和處理者,保證集羣事務處理的順序性;負載均衡

集羣內部各服務器的調度者;分佈式

Follower:

Follower 服務器是 ZK 集羣狀態的跟隨者。性能

處理客戶端非事務請求,轉發事務請求給 Leader 服務器;spa

參與事務請求 Proposal 的投票;開放源代碼

參與 Leader 選舉投票;日誌

Observer:

ZK 3.3.0 引入的全新服務器角色;

觀察 ZK 集羣的最新狀態變化並將這些狀態變動同步過來。

對於非事務請求能夠獨立處理,但事務請求會轉發給 Leader 服務器;

也不參與任何形式的投票,包括事務請求 Proposal 和 Leader 選舉投票;

Observer 只提供非事務服務;

做用:在不傷害寫性能的狀況下擴展 ZK;

數據模型

文件系統

Zookeeper 也使用文件系統組織系統中存儲的資源,結構以下所示:

  • /

  • /app1/c1

  • /app1/c2

  • /app1/c3

  • /app2/...

其並無文件和文件夾的概念,只有 Znode 概念,它既能夠做爲容器存儲數據,也能夠持有其餘 Znode 造成父子關係;

ZNode(數據節點)

ZK 的視圖結構和標準的 Unix 文件系統很是相似,如:/app1/c1

Znode 是 ZK 中數據的最小單元;

每一個 ZNode 上均可以保存數據;

同時還能夠掛載子節點,構成一個層次化的命名空間,稱之爲

ZXID(事務ID)

數據節點建立、刪除、節點內容更新和客戶端會話建立與失效等操做,都是事務操做;

每個事務請求都會爲其分配一個全局惟一的事務 ID,用 ZXID 表示,一般是 64 位數字;

ZNode 節點特性

節點類型

持久節點(persistent)

建立後一直存在於 ZK 服務器上,直到主動刪除

持久順序節點(persistent——sequential)

增長順序的特性,每一個父節點都會維護它的第一級子節點的順序;

ZK 自動會給節點名加上一個數字後綴,後綴的上限是整型的最大值;

臨時節點(ephemeral)

臨時節點的生命週期和客戶端的會話綁定,會話結束則節點消失;

臨時節點不能有子節點,即臨時節點只能做爲葉子節點;

臨時順序節點(ephemeral_sequential)

增長了順序特性;

節點狀態

looking:

  • 不肯定 leader 狀態(選主中);

  • 對外不提供服務;

following:

  • 跟隨者狀態;

  • 做爲系統的從節點,接收主節點的更新並寫入本地日誌;

leading:

  • 領導者狀態;

  • 做爲系統的主節點,接收客戶端更新,寫入本地日誌,並通知從節點複製;

observing:

  • 觀察者狀態;

  • 表示當前角色是 Observer,與 Follower 不一樣是不參與投票和選舉;

相關文章
相關標籤/搜索