zookeeper原理

一、簡介

ZooKeeper是一個分佈式的,開放源碼的分佈式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。

ZooKeeper代碼版本中,提供了分佈式獨享鎖、選舉、隊列的接口,代碼在zookeeper-3.4.3\src\recipes。其中分佈鎖和隊列有Java和C兩個版本,選舉只有Java版本

二、爲什麼要使用zk

1.應用或多或少都有一些配置信息,如果應用部署在多臺機器上,一旦涉及修改配置參數,我們需要到各個機器上一個一個修改,重複工作且容易出錯,可以將配置信息放在zookeeper上,應用監聽對應節點數據,一旦配置信息發生變化,zookeeper會通知應用進行變更

2.涉及多個系統調用,如果一個系統地址變更,需要同時通知所有調用方,可以將服務註冊在zookepper上,調用該系統服務的系統只需要監聽對應節點數據,即可獲取最新地址進行調用,dubbo使用zookeeper來註冊服務

三、數據模型和分層命名空間

ZooKeeper提供的名稱空間非常類似於標準文件系統。名稱是由斜槓(/)分隔的路徑元素序列。ZooKeeper名稱空間中的每個節點都由路徑標識。與標準文件系統不同的是,ZooKeeper命名空間中的每個節點都可以包含與之關聯的數據以及子項。節點既可以是一個文件也可以是一個目錄的文件系統。(ZooKeeper旨在存儲協調數據:狀態信息,配置,位置信息等,因此存儲在每個節點的數據通常很小,在字節到千字節範圍內。)我們使用術語 znode來表明我們正在談論ZooKeeper數據節點。

我們能夠自由的增加、刪除znode,在一個znode下增加、刪除子znode,唯一的不同在於znode是可以存儲數據的。 

三、四種類型的znode 

1、PERSISTENT-持久化目錄節點 
客戶端與zookeeper斷開連接後,該節點依舊存在 

2、PERSISTENT_SEQUENTIAL-持久化順序編號目錄節點 
客戶端與zookeeper斷開連接後,該節點依舊存在,只是Zookeeper給該節點名稱進行順序編號 

3、EPHEMERAL-臨時目錄節點 
客戶端與zookeeper斷開連接後,該節點被刪除 

4、EPHEMERAL_SEQUENTIAL-臨時順序編號目錄節點 
客戶端與zookeeper斷開連接後,該節點被刪除,只是Zookeeper給該節點名稱進行順序編號

可以根據不同的業務場景進行選擇使用不同的znode

四、通知機制

這個是zk的一個重要機制,客戶端註冊監聽它關心的目錄節點,當目錄節點發生變化(數據改變、被刪除、子目錄節點增加刪除)時,zookeeper會通知客戶端。

五、zk保證

ZooKeeper非常快速且非常簡單。但是,由於其目標是構建更復雜的服務(如同步)的基礎,因此它提供了一系列保證。這些是:

1.順序一致性 - 客戶端的更新將按發送順序應用。

2.原子性 - 更新成功或失敗。沒有部分結果。

3.單系統映像 - 無論服務器連接到哪個服務器,客戶端都將看到相同的服務視圖。

4.可靠性 - 一旦應用了更新,它將從那時起持續到客戶端覆蓋更新。

5.及時性 - 系統的客戶視圖保證在特定時間範圍內是最新的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章