分散式技術-Zookeeper概述
概述
- 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
- 將配置資訊寫到某個節點上
- 每個客戶端都監聽這個節點
- 一旦節點中的數據被修改,通知每台伺服器
伺服器節點動態上下線
- 客戶端能夠獲取伺服器節點的上下線情況
軟負載均衡
- 統計每台伺服器的訪問情況,訪問次數最少的節點去處理最新的請求(
雨露均沾)