zookeeper簡介

zookeeper簡介

zookeeper主要是一個分佈式服務協調框架,實現同步服務,配置維護和命名服務等分佈式應用。是一個高性能的分佈式數據一致性解決方案。
zookeeper是一個高可用的分佈式管理與協調框架,給予ZAB算法(原子消息廣播協議)的實現。該框架能很好的保證分佈式環境中數據的一致性。也正是由於這樣的特性,使得zookeeper成爲了解決分佈式一致性問題的利器。
順序一致性 從客戶端發起的事物請求,最終將嚴格按照其發起的順序被應用的zookeeper中去

原子性: 所有事物請求的處理結果在整個集羣中所有機器上的應用情況是一致的。也就是說,要麼整個集羣所有機器都成功應用了某一事物,要麼沒有應用,不會出現部分機器應用了事物,而另一部分機器沒有應用的情況
單一視圖: 無論客戶端連接的是哪一個zookeeper服務器,其看到的服務器端數據模型都是一致的。
可靠性: 一旦服務器成功地應用了一個事物,並完成對客戶端的響應,那麼該事物鎖引起的服務器端狀態將會被一致保留下來。除非有另外一個事物對其更改
實時性: 一旦事物被成功應用,那麼客戶端能立即從服務器上獲取變更後的新數據,zookeeper僅僅能保證在一段時間內,客戶端最終一定能從服務器讀取最新的數據狀態。

zookeeper設計目標

  • 目標1:簡單的數據結構。zookeeper就是以簡單的屬性結構來進行相互協調的(也叫樹形名字空間)
  • 目標2:可以構建集羣。一般zookeeper集羣通常由一組機器構成,一般3–5臺機器就可以組成一個zookeeper集羣了。只要集羣中超過半數以上的機器能正常工作,那麼整個集羣就能夠對外提供服務。
  • 目標3:順序訪問。對於每一個客戶端的每一個請求,zookeeper都會分配一個全局唯一的遞增編號,這個編號反應了所有事物操作的新後順序,應用程序可以使用zookeeper的這個特性來實現更高層次的同步。
  • 目標4:高性能。由於zookeeper將全量數據存儲在內存中,並且直接服務於所有的非事物請求,因此尤其在讀操作爲主的場景下性能非常突出,在JMater壓力測試下(100%度請求場景下),其結果大約在12-13W的QPS。

zookeeper的結構

zookeeper樹形結構

zookeeper的結構

  • ZooKeeper目錄樹中每一個節點對應一個Znode,這個znode是被他所在路徑的唯一標識。
  • Znode可以有子節點目錄,並且每個znode可以存儲數據,注意EPHEMERAL類型的額目錄節點不能有子節點目錄
  • Znode是有版本的,每個Znode中存儲的數據可以有很多歌版本,也就是一個訪問路徑中可以存儲多份數據
  • znode的目錄名可以可以自動編號,如App1已經存在,再創建的話,將會自動命名位App2
  • znode可以被監控:包括這個目錄節點中存儲的數據的修改,子節點目錄的變化,一旦變化可以通知監控的客戶端,這個是zookeeper的核心特性,Zookeeper的很多功能都是基於這個特性實現的。

Zookeeper組成

ZK server根據其身份特性分爲三種: leader,Follower Obderver,其中Follower和Observer又統稱爲Learner(學習者)
Leader:負責客戶端的write類型請求
Follow:負責客戶端的reader類型請求,參與leader選舉等。
Observer:特殊的“Follower”,其可以接受客戶端reader請求,但不能選舉(擴容系統支撐能力,提高了讀取速度。因爲他不接受任何同步的寫入請求,只負責與leader同步數據)其實,當我們使用java代碼操作Zookeeper,那麼我們就稱我們的這個程序是Observer

典型應用場景

zookeeper從設計模式的角度來看,是一個基於觀察者模式設計的分佈式服務管理框架,他負責存儲和管理大家都關心的數據,然後接受觀察者的註冊,一旦這些數據的狀態發生變化,Zookeeper就將負責同志已經在Zookeeper上註冊的那些觀察者做出相應的反應,從而實現集羣中類似Master/Slave的管理模式
- 管理配置
比如分佈式應用環境中機器的配置列表,運行時的開關配置,數據庫配置信息等,這些配置信息通常具有以下3個特性
1. 數據量比較小
2. 數據內容在運行時動態發生變化。
3. 集羣中各個節點共享信息,配置一致
- 集羣管理
Zookeeper不僅能幫你維護當前機器中的服務狀態,而且能幫你選出一個“總管”來管理集羣,這就是Zookeeper的另一個功能,Leader,並且實現集羣容錯功能。
1. 希望知道當前集羣中究竟有多少臺機器工作
2. 對集羣中每天集羣的運行時狀態進行數據收集
3. 對集羣中每臺集羣進行上下線操作

  • 發佈與訂閱
    Zookeeper時一個典型的分佈/訂閱模式的分佈式管理與協調框架,開發人員可以使用它來進行分佈式數據的發佈與訂閱

  • 數據庫切換

  • 分佈式日誌的收集
    我們可以做一個日誌系統手機集羣中所有的日誌信息,進行統一管理

  • 分佈式鎖,隊列管理等等
    zookeeper的特性就是在分佈式場景下高可用,但是原生的API實現分佈式功能非常困難,團隊去實現也太浪費時間,即使實現了也未必穩定,那麼可以採用第三方的客戶端的完美實現,比如Curator框架,他是Apache的頂級項目。

Zookeeper開源框架應用

zookeeper使用場景非常廣泛:
如Hadoop、Storm、消息中間件、RPC服務框架、數據庫增量訂閱與消費組件(如Mysql Binlog)、分佈式數據庫同步系統,淘寶的Otter等。
所以,我們很有必要學好zookeeper!

發佈了137 篇原創文章 · 獲贊 211 · 訪問量 59萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章