天天看點

zookeeper的應用場景簡介

zookeeper的中文意思是動物管理者的意思,同時也是一個開放源代碼的分布式協調服務,zookeeper的設計目标是将那些複雜且容易出錯的分布式一緻性

服務封裝起來,構成一個搞笑可靠的原語集,并以一系列簡單易用的接口提供給使用者使用。zookeeper是一個典型的分布式資料一緻性的解決方案。

zookeeper可以保證如下分布式一緻性特性

1.順序一緻性

這裡的順序一緻性書中講述的比較簡單,那麼怎麼了解順序一緻性呢?順序一緻性說的是同一個用戶端送出到zookeeper的事務請求不管zookeeper伺服器端

怎麼變化選舉其follower節點與Leader節點會嚴格按照其用戶端送出的讀寫順序執行,聯想到同一個用戶端在伺服器上其實可能使用了多核技術和多線程等技術,這樣的話程式執行的順序和結果可能有很多組合,也就是說程式的正常執行順序可能會被打亂,用戶端自己無法保證程式按預期順序執行,是以zookeeper保證了順序一緻性的情況下,由用戶端決定是什麼樣的順序,由zookeeper保證這樣的順序不被打亂。

2.原子性

這裡的原子性跟資料庫的原子性類似,用戶端送出的某個事務(請求)在zookeeper叢集中要麼儲存要麼復原,不存在某些zookeeper伺服器保留了這個事務,而另外一些伺服器不保留這個事務。原子性的特性通過zookeeper的原子廣播協定實作,同時也是後面幾大特性的基礎,保證了zookeeper本身存儲的中繼資料在整體上是一緻一樣的。

3.單一視圖

正是由于原子性和zookeeper實作的ZAB原子廣播協定,讓用戶端連接配接任意一台zookeeper伺服器都可以擷取服務端的完整的資料模型。

4.可靠性

可靠性一方面也承擔着可用性,也就是說從前面三個特性來說都描述了一種可靠性和可用性,可靠性本身來說就是我送出事務,寫資料成功之後可以不用管了,其他用戶端一定可以看到送出的事務效果。

5.實時性

這裡的實時性其實是對于用戶端來說的,也就是說用戶端的送出的事務請求一旦處理其他用戶端都可以很快看到,但是zookeeper也無法保證準實時性,因為zk叢集之間也有一定延遲,做資料複制。但是zookeeper可以保證在一定的時間段内,用戶端可以讀到最終一緻的資料狀态。

那zookeeper可以幫忙實作哪些功能呢?

一、資料釋出/訂閱

資料釋出/訂閱,就是所說的配置中心,顧名思義就是釋出者将資料釋出到zookeeper的一個或者多個節點上,供訂閱者進行資料訂閱,進而達到動态擷取資料的目的。實作配置資訊的集中式管理和資料的動态更新。zookeeper采用的是推拉相結合的方式,服務端向相應的用戶端發送Watcher事件通知,用戶端主動到服務端擷取最新的資料。

二、負載均衡

zookeeper中存儲叢集的IP和端口号,服務注冊方和服務消費方均需要這些資料,

如何進行負載均衡則需要應用系統自己去負責,這裡的好處就在于不需要手動去

調整大量IP,端口号和域名了。

三、命名服務

命名服務是分布式系統最基本的公共服務之一。在分布式系統中,被命名的實體通常可以

統稱它們為名字(name),其中較為常見的就是一些分布式服務架構(如RPC,RMI)中的服務位址清單,通過使用命名服務,用戶端應用能夠根據指定名字來擷取資源的實體,服務位址和提供者的資訊等。zookeeper提供的命名服務功能與JNDI技術有相似的地方,都能夠幫助應用系統通過一個資源引用的方式來實作對資源的定位與使用。

四、分布式協調/通知

分布式協調/通知服務是分布式系統中不可缺少的一個環境,是将不同的分布式元件有機結合起來的關鍵所在。例如分布式事務的處理,機器之間的互相協調調用等。引入一個協調者便于将分布式協調的職責從應用中分離出來,進而可以大大減少系統之間的額耦合性。能夠顯著提高系統的可擴充性。zookeeper中特有的watcher注冊與異步通知機制,能夠很好的實作分布式環境下不同機器,甚至是不同系統之間的協調與通知,進而實作對資料變更的實時處理。

五、叢集管理

叢集管理包括叢集監控與叢集控制兩大塊,前者側重于對叢集運作時狀态的收集

,後者則是對叢集進行操作與控制。通常我們希望知道目前叢集中究竟有多少機器在工作;

對叢集中每台機器的運作時狀态進行資料收集;

對叢集中的機器進行上下線操作。

通過zookeeper的watcher注冊監聽機制進行通知,利用臨時節點和會話機制可以實作叢集機器存活性監控的系統。

六、Master選舉

Master選舉是一個在分布式系統中非常常見的應用場景。在分布式系統中,Master往往用來協調叢集中其他系統單元,具有對分布式系統狀态變更的決定權,比如讀寫分離的應用場景,用戶端的寫請求往往是由Master來處理的。筆者讀到的書裡提到的更複雜的場景是指定一台機器作為一個運算邏輯的單元作為Master運作,然後把結果進行

持久化,其他機器進行同步。這裡選舉Master的原理是每個機器向zookeeper中建立一個臨時節點,隻有一個用戶端能建立成功。

七、分布式鎖

分布式鎖是控制分布式系統之間同步通路共享資源的一種方式。其中一種場景就是資料庫的鎖會消耗一些性能,zookeeper通過建立臨時節點與watcher監聽通知機制可以實作。

可以通過一定的組合實作排他鎖,共享鎖,讀寫鎖等。

八、分布式隊列

zookeeper可以實作FIFO的隊列,所有用戶端向一個節點下建立順序性臨時節點,通過監聽通知機制即可實作先進先出的隊列功能。