天天看點

分布式協調服務ZooKeeper

分布式協調服務ZooKeeper

分布式協調服務是分布式應用中不可缺少的,通常擔任協調角色,比如leader選舉、負載均衡、服務發現、分布式隊列和分布式鎖

Zookeeper資料模型:

一、層級命名空間

1、data:每個znode擁有一個資料域,記錄使用者資料,該節點的資料類型為位元組數組;

2、type:zonde類型,具體分為persistent(持久化節點)、ephemeral(臨時節點)、persistent_sequential(在持久化節點後面追加一個增量的唯一數字)、ephemeral_sequential(在臨時節點後面追加一個增量的唯一數字);

3、version:znode中資料的版本号,每次資料更新版本都會加一;

4、children:znode可以包括多個子節點;

5、ACL:znode通路控制清單,使用者可以設定每個znode的通路使用者清單,以保證znode被安全通路。

二、Watcher:watcher是zookeeper提供的釋出/訂閱機制,使用者可在某個znode上注冊watcher以監聽它的變化,一旦znode被删除或者更新,zookeeper将以事件的方式将變化内容發送給監聽者,需要注意,wacther一旦觸發後就會删除,除非使用者再次注冊該watcher。

三、Session:是用戶端與zookeeper通信通道,同一個session中的消息是有序的,Session具有容錯性,如何有伺服器當機,用戶端會自動切換到其它活着服務上。

ZooKeeper基本架構

讀路徑、寫路徑、作為資料中心間的橋梁、作為消息總線。

ZooKeeper提供了Java和C語言兩種API

ZooKeeper應用案例:

leader選舉(eg:Hbase、YARN、HDFS)、分布式隊列(幫忙Master節點維護作業及worker資訊),負載均衡:Kafka是場景,Broker和Customer主要在Zookeeper中寫入資訊,eg:Broker節點注冊資訊、Consumer注冊資訊、Consumer Offset追蹤資訊。