Zookeeper入門(一)

 
Zookeeper是分佈式服務治理中間件
 

1、Zookeeper的簡介

 
官方文檔上這麼解釋zookeeper,它是一個分佈式服務框架,是Apache Hadoop 的一個子項目,它主要是用來解決分佈式應用中常常遇到的一些數據管理問題,如:統一命名服務、狀態同步服務、集羣管理、分佈式應用配置項的管理等。

上面的解釋有點抽象,簡單來講zookeeper=文件系統+監聽通知機制。
 

2、 ZooKeeper 的做用

1.1 配置管理

在咱們的應用中除了代碼外,還有一些就是各類配置。好比數據庫鏈接等。通常咱們都 是使用配置文件的方式,在代碼中引入這些配置文件。當咱們只有一種配置,只有一臺服務 器,而且不常常修改的時候,使用配置文件是一個很好的作法,可是若是咱們配置很是多, 有不少服務器都須要這個配置,這時使用配置文件就不是個好主意了。這個時候每每須要尋 找一種集中管理配置的方法,咱們在這個集中的地方修改了配置,全部對這個配置感興趣的 均可以得到變動。Zookeeper 就是這種服務,它使用 Zab 這種一致性協議來提供一致性。現 在有不少開源項目使用 Zookeeper 來維護配置,好比在 HBase 中,客戶端就是鏈接一個 Zookeeper,得到必要的 HBase 集羣的配置信息,而後才能夠進一步操做。還有在開源的消 息隊列 Kafka 中,也使用 Zookeeper來維護broker的信息。在 Alibaba開源的 SOA 框架Dubbo 中也普遍的使用 Zookeeper 管理一些配置來實現服務治理。html

1.2 名字服務

名字服務這個就很好理解了。好比爲了經過網絡訪問一個系統,咱們得知道對方的 IP 地址,可是 IP 地址對人很是不友好,這個時候咱們就須要使用域名來訪問。可是計算機是 不能是域名的。怎麼辦呢?若是咱們每臺機器裏都備有一份域名到 IP 地址的映射,這個倒 是能解決一部分問題,可是若是域名對應的 IP 發生變化了又該怎麼辦呢?因而咱們有了 DNS 這個東西。咱們只須要訪問一個你們熟知的(known)的點,它就會告訴你這個域名對應 的 IP 是什麼。在咱們的應用中也會存在不少這類問題,特別是在咱們的服務特別多的時候, 若是咱們在本地保存服務的地址的時候將很是不方便,可是若是咱們只須要訪問一個你們都 熟知的訪問點,這裏提供統一的入口,那麼維護起來將方便得多了。node

1.3 分佈式鎖

Zookeeper 是一個分佈式協調服務。這樣咱們就能夠利 用 Zookeeper 來協調多個分佈式進程之間的活動。好比在一個分佈式環境中,爲了提升可靠 性,咱們的集羣的每臺服務器上都部署着一樣的服務。可是,一件事情若是集羣中的每一個服 務器都進行的話,那相互之間就要協調,編程起來將很是複雜。而若是咱們只讓一個服務進 行操做,那又存在單點。一般還有一種作法就是使用分佈式鎖,在某個時刻只讓一個服務去幹活,當這臺服務出問題的時候鎖釋放,當即 fail over 到另外的服務。這在不少分佈式系統 中都是這麼作,這種設計有一個更好聽的名字叫 Leader Election(leader 選舉)。好比 HBase 的 Master 就是採用這種機制。但要注意的是分佈式鎖跟同一個進程的鎖仍是有區別的,所 以使用的時候要比同一個進程裏的鎖更謹慎的使用。數據庫

1.4 集羣管理

在分佈式的集羣中,常常會因爲各類緣由,好比硬件故障,軟件故障,網絡問題,有些 節點會進進出出。有新的節點加入進來,也有老的節點退出集羣。這個時候,集羣中其餘機 器須要感知到這種變化,而後根據這種變化作出對應的決策。好比咱們是一個分佈式存儲系 統,有一箇中央控制節點負責存儲的分配,當有新的存儲進來的時候咱們要根據如今集羣目 前的狀態來分配存儲節點。這個時候咱們就須要動態感知到集羣目前的狀態。還有,好比一 個分佈式的 SOA 架構中,服務是一個集羣提供的,當消費者訪問某個服務時,就須要採用 某種機制發現如今有哪些節點能夠提供該服務(這也稱之爲服務發現,好比 Alibaba 開源的 SOA 框架 Dubbo 就採用了 Zookeeper 做爲服務發現的底層機制)。還有開源的 Kafka 隊列就 採用了 Zookeeper 做爲 Cosnumer 的上下線管理。編程


三、 文件系統

Zookeeper維護一個相似文件系統的數據結構:小程序

 

每一個子目錄項如 NameService 都被稱做爲 znode(目錄節點),和文件系統同樣,咱們可以自由的增長、刪除znode,在一個znode下增長、刪除子znode,惟一的不一樣在於znode是能夠存儲數據的。服務器

有四種類型的znode:網絡

  • PERSISTENT-持久化目錄節點數據結構

    客戶端與zookeeper斷開鏈接後,該節點依舊存在架構

  • PERSISTENT_SEQUENTIAL-持久化順序編號目錄節點框架

    客戶端與zookeeper斷開鏈接後,該節點依舊存在,只是Zookeeper給該節點名稱進行順序編號

  • EPHEMERAL-臨時目錄節點

    客戶端與zookeeper斷開鏈接後,該節點被刪除

  • EPHEMERAL_SEQUENTIAL-臨時順序編號目錄節點

    客戶端與zookeeper斷開鏈接後,該節點被刪除,只是Zookeeper給該節點名稱進行順序編號

四、 監聽通知機制

客戶端註冊監聽它關心的目錄節點,當目錄節點發生變化(數據改變、被刪除、子目錄節點增長刪除)時,zookeeper會通知客戶端。

就這麼簡單,下面咱們看看Zookeeper能作點什麼呢?

五、Zookeeper能作什麼

zookeeper功能很是強大,能夠實現諸如分佈式應用配置管理、統一命名服務、狀態同步服務、集羣管理等功能,咱們這裏拿比較簡單的分佈式應用配置管理爲例來講明。

假設咱們的程序是分佈式部署在多臺機器上,若是咱們要改變程序的配置文件,須要逐臺機器去修改,很是麻煩,如今把這些配置所有放到zookeeper上去,保存在 zookeeper 的某個目錄節點中,而後全部相關應用程序對這個目錄節點進行監聽,一旦配置信息發生變化,每一個應用程序就會收到 zookeeper 的通知,而後從 zookeeper 獲取新的配置信息應用到系統中。

 

如上,你大體應該瞭解zookeeper是個什麼東西,大概能作些什麼了,咱們立刻來學習下zookeeper的安裝及使用,並開發一個小程序來實現zookeeper這個分佈式配置管理的功能。

相關文章
相關標籤/搜索