1 Zookeeper 概述
- 美團,餓了麼,淘寶,58 同城等等應用都是 zookeeper 的現實生活版
- 博主我開了個飯店,如何才能讓大家都能吃到我們的飯菜?需要入駐美團,這樣大家就可以在美團 app 中看到我的飯店,下訂單,從而完成一次交易
- Zookeeper 是一個開源的分散式(多臺伺服器幹一件事)的,為分散式應用提供協調服務的
Apache 專案。 - 在大資料技術生態圈中,zookeeper(動物管理員),Hadoop(大象),Hive(蜜蜂),
Pig(豬)等技術
1.2 工作機制
- Zookeeper 從設計模式角度來理解:是一個基於觀察者模式(一個人幹活,有人盯著他)設計的分
布式服務管理框架 - 它負責 儲存 和 管理 大家都關心的資料
然後接受觀察者的註冊,一旦這些資料的發生變化
Zookeeper 就將負責通知已經註冊的那些觀察者做出相應的反應
從而實現叢集中類似 Master/Slave 管理模式
Zookeeper = 檔案系統 + 通知機制
對於我們初學者來說,知到 zookeeper 的工作機制是什麼很重要。
- 首先我們可以把 zookeeper 看做一個美團
- 當我們使用者下單後,他回去通知店家準備餐品
- 我們 zookeeper 就是做他們之間的橋樑,相互去通知他們
- 商家營業併入駐
- 獲取到當前營業的飯店列表
- 伺服器節點下線
- 伺服器節點上下線事件通知
- 重新再去獲取伺服器列表,並註冊監聽
1.3 特點
- 首先我們得了解分散式和叢集的區別?
- 無論分散式和叢集,都是很多人在做事情。具體區別如下:
- 例如:我有一個飯店,越來越火爆,我得多招聘一些工作人員
- 分散式:招聘 1 個廚師,1 個服務員,1 個前臺,三個人負責的工作不一樣,但是最終目
的都是為飯店工作- 叢集:招聘 3 個服務員,3 個人的工作一樣
特點:
-
是一個
leader
和多個follower
來組成的叢集(獅群中,一頭雄獅,N頭母獅) -
叢集中只要有半數以上的節點存活
,Zookeeper就能正常工作(5臺伺服器掛2臺,沒問題;4臺服
務器掛2臺,就停止) -
全域性資料一致性
,每臺伺服器都儲存一份相同的資料副本,無論client連線哪臺server,資料都是
一致的 -
資料更新原子性
,一次資料要麼成功,要麼失敗(不成功便成仁) -
實時性
,在一定時間範圍內,client能讀取到最新資料 -
更新的請求按照順序執行
,會按照傳送過來的順序,逐一執行(發來123,執行123,而不是321
或者別的)
1.4 資料結構
ZooKeeper資料模型
的結構與linux檔案系統很類似
,整體上可以看作是一棵樹,每個節點稱做一
個ZNode
(ZookeeperNode)。- 每一個ZNode預設能夠
儲存1MB的資料
(後設資料),每個ZNode的路徑都是唯一的
後設資料
簡單理解就是祕鑰,key vaule後設資料(Metadata)
,又稱中介資料、中繼資料,為描述資料的資料(data about
data),主要是描述資料屬性(property)的資訊,用來支援如指示儲存位置、歷史資料、
資源查詢、檔案記錄等功能
- 每一個ZNode預設能夠
1.5 應用場景
- 我們的zk還提供許多的服務:統一命名服務、統一配置管理、統一叢集管理、伺服器節點動態上下線、軟負載
均衡等
1.5.1 統一命名服務
- 在分散式環境下,通常需要對應用或服務進行統一的命名,便於識別
- 例如:伺服器的IP地址不容易記,但域名相比之下卻是很容易記住
1.5.2 統一配置管理
-
分散式環境下,配置檔案做同步是必經之路
-
1000臺伺服器,如果配置檔案作出修改,那一臺一臺的修改,運維人員肯定會瘋,如何做到修改
一處就快速同步到每臺伺服器上
-
將配置管理交給Zookeeper
1、將配置資訊寫入到Zookeeper的某個節點上
2、每個客戶端都監聽這個節點
3、一旦節點中的資料檔案被修改,Zookeeper這個話匣子就會通知每臺客戶端伺服器
1.5.3 伺服器節點動態上下線
- 客戶端能實時獲取伺服器上下線的變化
- 在美團APP上實時可以看到商家是否正在營業或打樣
1.5.4 軟負載均衡
- Zookeeper會記錄每臺伺服器的訪問數,讓訪問數最少的伺服器去處理最新的客戶請求(雨露均
沾) - 都是自己的孩子,得一碗水端平