Zookeeper 概念

Zookeeper 介紹

  Zookeeper 是一個高可用的分佈式數據管理與系統協做框架。基於對 Paxos 算法實現,該框架保證了分佈式環境中數據的強一致性,也正是基於這樣的特性,使得Zookeeper 能夠解決不少分佈式問題。node

  它能夠實現的功能有豐富。數據發佈/訂閱、負載均衡、命名服務、分佈式協調/通知、集羣管理、Master選舉、分佈式鎖和分佈式隊列等。 算法

概念介紹

數據發佈/訂閱

  發佈/訂閱模式是一對多的關係,多個訂閱者對象同時監聽某一主題對象,這個對象在自身狀態發生變化時會通知全部的訂閱者,使它們自動的進行狀態更新。發佈/訂閱可使得發佈方和訂閱方獨立封裝、獨立改變。發佈/訂閱模式在分佈式系統中的典型應用有配置管理服務發現、註冊設計模式

設計模式

  發佈/訂閱系統通常有兩種設計模式,分別是推(Push)模式和拉(Pull)模式。api

  推模式 是指服務器主動將數據更新發送給全部訂閱的客戶端。服務器

  拉模式 是指客戶端經過採用定時輪訓拉取數據進行對比更新。網絡

  ZooKeeper採用的是推拉相結合的方式:客戶端向服務端註冊本身須要關注的節點,一旦該節點的數據發生變動,那麼服務端就會向相應的客戶端發送Watcher事件通知,客戶端接收到這個消息通知以後,須要主動到服務端獲取最新的數據。 負載均衡

配置管理

  配置管理是指若是集羣中的機器擁有某些相同配置而且這些配置信息須要動態的改變,使用發佈/訂閱模式把配置作統一集中管理,讓這些機器格子各自訂閱配置信息的改變,當配置發生改變時,這些機器就能夠獲得通知並更新爲最新的配置。 框架

  所謂的配置中心,顧名思義就是發佈者將數據發佈到某一類數據發佈節點上,供訂閱者進行數據訂閱,進而達到動態獲取數據的目的,實現配置信息的集中式管理和數據的動態更新。 分佈式

  對配置信息的管理,通常的作法一般能夠選擇將其存儲到本地的配置中或者是內存變量中。但一遇到集羣規模比較打的狀況,兩種方式再也不可取。而咱們還須要可以快速的作到所有配置信息的變動,同時但願變動成本足夠小,所以咱們須要一種更爲分佈式的解決方案。 優化

配置存儲

  在進行配置管理以前,須要將配置存儲到Zookeeper上,能夠在Zookeeper上選取一個數據節點用於配置的存儲,將須要集中管理的配置信息寫入到該數據節點中去。

配置獲取

  集羣中每臺機器在啓動初始化階段,首先會從上面提到的Zookeeper的配置節點中讀取配置信息,同時,客戶端還須要在該節點上註冊一個數據變動Watcher監聽,一點數據節點數據變動,全部訂閱的客戶端都可以獲取數據變動通知。

配置變動

  Zookeeper相應節點配置信息的變動,Zookeeper可以幫助咱們將數據的變動通知發送到各個客戶端,每一個客戶端在接受這些變動通知到,從新進行最新數據的獲取和配置更新。

服務發現和註冊

  服務發現、註冊是指對集羣中的服務上下線作統一管理。每一個工做服務器均可以做爲數據的發佈方向集羣註冊本身的基本信息,而讓某些監控服務器做爲訂閱方,訂閱工做服務器的基本信息,當工做服務器的基本信息發生改變如上下線、服務器角色或服務範圍變動,監控服務器能夠獲得通知並響應這些變化。

  這個方面是基於ZookeeperEPHEMERAL_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就能夠做爲一個名稱。

相關文章
相關標籤/搜索