Zookeeper 概念
Zookeeper 是一個高可用的分布式數據管理與系統協作框架。基於對 Paxos
算法實現,該框架保證了分布式環境中數據的強一致性,也正是基於這樣的特性,使得Zookeeper 可以解決很多分布式問題。
它可以實現的功能有豐富。數據發布/訂閱、負載均衡、命名服務、分布式協調/通知、集群管理、Master選舉、分布式鎖和分布式隊列等。
概念介紹
數據發布/訂閱
發布/訂閱模式是一對多的關系,多個訂閱者對象同時監聽某一主題對象,這個對象在自身狀態發生變化時會通知所有的訂閱者,使它們自動的進行狀態更新。發布/訂閱可以使得發布方和訂閱方獨立封裝、獨立改變。發布/訂閱模式在分布式系統中的典型應用有配置管理
設計模式
發布/訂閱系統一般有兩種設計模式,分別是推(Push)模式和拉(Pull)模式。
推模式 是指服務器主動將數據更新發送給所有訂閱的客戶端。
拉模式 是指客戶端通過采用定時輪訓拉取數據進行對比更新。
ZooKeeper采用的是推拉相結合的方式:客戶端向服務端註冊自己需要關註的節點,一旦該節點的數據發生變更,那麽服務端就會向相應的客戶端發送Watcher事件通知,客戶端接收到這個消息通知之後,需要主動到服務端獲取最新的數據。
配置管理
配置管理是指如果集群中的機器擁有某些相同配置並且這些配置信息需要動態的改變,使用發布/訂閱模式把配置做統一集中管理,讓這些機器格子各自訂閱配置信息的改變,當配置發生改變時,這些機器就可以得到通知並更新為最新的配置。
所謂的配置中心,顧名思義就是發布者將數據發布到某一類數據發布節點上,供訂閱者進行數據訂閱,進而達到動態獲取數據的目的,實現配置信息的集中式管理和數據的動態更新。
對配置信息的管理,一般的做法通常可以選擇將其存儲到本地的配置中或者是內存變量中。但一遇到集群規模比較打的情況,兩種方式不再可取。而我們還需要能夠快速的做到全部配置信息的變更,同時希望變更成本足夠小,因此我們需要一種更為分布式的解決方案。
配置存儲
在進行配置管理之前,需要將配置存儲到Zookeeper
上,可以在Zookeeper
上選取一個數據節點用於配置的存儲,將需要集中管理的配置信息寫入到該數據節點中去。
配置獲取
集群中每臺機器在啟動初始化階段,首先會從上面提到的Zookeeper
的配置節點中讀取配置信息,同時,客戶端還需要在該節點上註冊一個數據變更Watcher
監聽,一點數據節點數據變更,所有訂閱的客戶端都能夠獲取數據變更通知。
配置變更
對Zookeeper
相應節點配置信息的變更,Zookeeper
能夠幫助我們將數據的變更通知發送到各個客戶端,每個客戶端在接受這些變更通知到,重新進行最新數據的獲取和配置更新。
服務發現和註冊
服務發現、註冊是指對集群中的服務上下線做統一管理。每個工作服務器都可以作為數據的發布方向集群註冊自己的基本信息,而讓某些監控服務器作為訂閱方,訂閱工作服務器的基本信息,當工作服務器的基本信息發生改變如上下線、服務器角色或服務範圍變更,監控服務器可以得到通知並響應這些變化。
這個方面是基於Zookeeper
的EPHEMERAL_SEQUENTIAL
類型節點來實現的。服務器可以連接Zookeeper
在對應的節點下創建臨時順序節點,斷開連接後,該節點被刪除。利用這個特性可以用來實現服務的發現和註冊。
負載均衡
負載均衡(Load Balance)是一種相當常見的計算機網絡技術,用來對多個計算機(計算機集群)、網絡連接、CPU、硬盤驅動器或其他資源進行分配負載,以達到優化資源使用、最大化吞吐率、最小化響應時間和避免過載的目的。通常,負載均衡可以分為硬件和軟件負載均衡兩類。
命名服務
通過使用命名服務,客戶端應用能夠根據指定名字來獲取資源的實體、服務地址和提供者信息等。
-
所有客戶端都會根據自己的任務類型,在指定類型的任務下面通過調用create()接口來創建一個順序節點。
-
節點創建完畢後,create()接口會返回一個完整的節點名。
-
客戶端拿到這個返回值後,拼接上type類型,例如“type2-job-0000000003”,這樣就可以作為一個全局唯一的ID了。
Zookeeper 名詞
Znode節點
有四種類型的Znode:
-
PERSISTENT-持久化目錄節點
客戶端與zookeeper斷開連接後,該節點依舊存在。
-
PERSISTENT_SEQUENTIAL-持久化順序編號目錄節點
客戶端與zookeeper斷開連接後,該節點依舊存在,只是Zookeeper給該節點名稱進行順序編號。
-
EPHEMERAL-臨時目錄節點
客戶端與zookeeper斷開連接後,該節點被刪除。
-
EPHEMERAL_SEQUENTIAL-臨時順序編號目錄節點
客戶端與zookeeper斷開連接後,該節點被刪除,只是Zookeeper給該節點名稱進行順序編號。
NameService 命名服務
在zookeeper的文件系統裏創建一個目錄,即有唯一的path。在我們使用tborg無法確定上遊程序的部署機器時即可與下遊程序約定好path,通過path即能互相探索發現
這個主要是作為分布式命名服務,通過調用zk的create node api,能夠很容易創建一個全局唯一的path,這個path就可以作為一個名稱。
Zookeeper 概念