天天看點

Zookeeper中的基本概念

叢集角色

一般來說,有以下的角色:Leader,Follower,Observer

Leader伺服器是整個Zookeeper叢集工作機制中的核心 

Follower伺服器是Zookeeper叢集狀态的跟随者

Observer伺服器充當一個觀察者的角色

一般來說,會用到以下的倆種的設計模式:

Leader,Follower 設計模式

Observer 觀察者設計模式

會話

會話是指用戶端和ZooKeeper伺服器的連接配接,ZooKeeper中的會話叫Session,用戶端靠與伺服器建立一個TCP的長連接配接

來維持一個Session,用戶端在啟動的時候首先會與伺服器建立一個TCP連接配接,通過這個連接配接,用戶端能夠通過心跳檢測與伺服器保持有效的會話,也能向ZK伺服器發送請求并獲得響應。

資料結點

 Zookeeper中的節點有兩類:

1.叢集中的一台機器稱為一個節點

2.資料模型中的資料單元Znode,分為持久節點和臨時節點

Zookeeper的資料模型是一棵樹,樹的節點就是Znode,Znode中可以儲存資訊

我們看下圖:

Zookeeper中的基本概念

版本

在寫代碼的時候會使用到版本,當代碼出現問題時,可以復原到先前的版本。但是zookeeper的版本的含義和

SVN,GIT中的版本含義不一樣。

zookeeper中的版本是用來記錄節點資料,還有是可以記錄節點的子節點清單,還有就是權限資訊的修改次數

 如果一個節點的 version是1,表示的是從建立以來,隻被修改了一次。可以利用版本來實作分布式中的鎖服務。

如圖:

版本類型 說明
version 目前資料節點資料内容的版本号
cversion 目前資料節點子節點的版本号
aversion 目前資料節點ACL變更版本号

資料庫中的鎖:

悲觀鎖和樂觀鎖

悲觀鎖又叫悲觀并發鎖,是資料庫中一種非常嚴格的鎖政策,具有強烈的排他性,能夠避免不同僚務對同一資料并發更新造成的資料不一緻性,在上一個事務沒有完成之前,下一個事務不能通路相同的資源,适合資料更新競争非常激烈的場景

相比悲觀鎖,樂觀鎖使用的場景會更多,悲觀鎖認為事務通路相同資料的時候一定會出現互相的幹擾,是以簡單粗暴的使用排他通路的方式,而樂觀鎖認為不同僚務通路相同資源是很少出現互相幹擾的情況,是以在事務處理期間不需要進行并發控制,當然樂觀鎖也是鎖,它還是會有并發的控制!對于資料庫通常的做法是在每個表中增加一個version版本字段,事務修改資料之前先讀出資料,當然版号也順勢讀取出來,然後把這個讀取出來的版本号加入到更新語句的條件中,比如,讀取出來的版本号是1,我們修改資料的語句可以這樣寫,update 某某表 set 字段一=某某值 where id=1 and version=1,那如果更新失敗了說明以後其他事務已經修改過資料了,那系統需要抛出異常給用戶端,讓用戶端自行處理,用戶端可以選擇重試。那麼zookeeper中的版本有類似的應用。

watcher

事件監聽器

ZooKeeper允許使用者在指定節點上注冊一些Watcher,當節點資料節點發生變化的時候,ZooKeeper伺服器會把這個變化的通知發送給感興趣的用戶端

在下面的圖中,倆個client都象zookeeper注冊了事件監聽器。當zookeeper中相關節點的資料發生了

變化的時候,那麼zookeeper會把這個變化發送給相應的用戶端。

Zookeeper中的基本概念

ACL權限控制

 一個ZooKeeper 的節點(znode)存儲兩部分内容:資料和狀态,狀态中包含ACL資訊。建立一個znode 會産生一個ACL 清單

(1)清單中每個ACL 包括:

 ①權限:perms

 ②驗證模式:scheme

(2)ZooKeeper 提供了如下幾種驗證模式:

 ①Digest:Client端由使用者名和密碼驗證,譬如user:pwd

 ②Host:Client端由主機名驗證,譬如localhost

 ③Ip:Client端由IP位址驗證,譬如172.2.0.0/24

 ④World:固定使用者為anyone,為所有Client端開放權限

 (3)權限許可集合如下,注意的是,exists操作和getAcl操作并不受ACL許可控制,是以任何用戶端可以查詢節點的狀态和節點的ACL。ACL是Access Control Lists 的簡寫, ZooKeeper采用ACL政策來進行權限控制,有以下五種權限:

CREATE:建立子節點的權限

READ:擷取節點資料和子節點清單的權限

WRITE:更新節點資料的權限

DELETE:删除子節點的權限

ADMIN:設定節點ACL的權限

(4)Znode ACL 權限用一個int 型數字perms 表示,perms 的5 個二進制位分别表示:

setacl、delete、create、write、read。

例如下面的例子:

 ① adcwr=0x1f

 ② ----r=0x1

 ③ a-c-r=0x15

這些權限管理類似資訊系統中的權限管理。一個zk叢集可能會服務于很多的業務,zk中的節點會儲存很多資訊,這些節點資訊可能隻會對相關的人員開放,保證資料的安全。