概述
- Zookeeper是一個開源的分散式的,為分散式應用提供協調服務的Apache專案
- 在大資料技術生態圈中,zookeeper(動物管理員),Hadoop(大象),Hive(蜜蜂),Pig(豬)
工作機制
- zookeeper從設計模式角度來理解:是一個基於觀察者模式設計的分散式服務管理框架
- 負責儲存和管理資料
- 接受觀察者的註冊
- 通知已經註冊的觀察者做出反應
- 實現叢集中類似Master/Slave管理模式
- zookeeper = 檔案系統 + 通知機制
- 服務上線
- 獲取當前服務列表
- 伺服器節點下線
- 伺服器節點上下線事件通知
- 重新獲取伺服器列表,註冊監聽
特點
分散式和叢集的區別:
無論分散式還是叢集,都是很多人在做事情,具體區別如下
例子:有一個飯店,越來越火爆,招聘工作人員
- 分散式:招聘一個廚師,1個服務員,1個前臺,3個人負責的工作不同,最終都是為飯店工作
- 叢集:招聘5個服務員,5個人的工作一個
- 一個leader和多個follower來組成的叢集
- 叢集中只要有半數以上的節點存活,Zookeeper就能正常工作
- 全域性資料唯一性,每臺伺服器都儲存一份相同的資料副本,無論哪臺client連線哪臺server,資料都是一致的
- 資料更新原子性,一次資料要麼成功,要麼失敗
- 實時性,在一定的時間範圍內,client能讀取到最新資料
- 更新的請求按照順序執行,會按照發過來的資料,逐一執行
資料結構
- zookeeper資料模型的結構與linux檔案系統很類似,整體上可以看作是一棵樹,每個節點稱作一個ZNode(ZookeeperNode)
- 每一個ZNode預設能夠儲存1MB的資料(後設資料),每個ZNode的路徑是唯一的
- 後設資料(Metadata),又稱中介資料,中繼資料,為描述資料的資料,主要是描述資料屬性資訊,同來支援如指示儲存位置,歷史記錄,資源查詢,檔案記錄等功能
應用場景
- 提供的服務包括:統一命名服務、統一配置管理、統一叢集管理、伺服器節點動態上下線、軟負載均衡等
統一命名服務
- 在分散式環境下,對環境進行統一命名
統一配置管理
- 分散式環境下進行配置同步
- 將配置管理交給zookeeper
- 將配置資訊寫到某個節點上
- 每個客戶端都監聽這個節點
- 一旦節點中的資料被修改,通知每臺伺服器
伺服器節點動態上下線
- 客戶端能夠獲取伺服器節點的上下線情況
軟負載均衡
- 統計每臺伺服器的訪問情況,訪問次數最少的節點去處理最新的請求(
雨露均沾)