什麼是 zab
zookeeper 的應用場景
zookeeper 是一種分布式協調服務,用於管理大型主機。在分布式環境中協調和管理服務是乙個複雜的過程。zookeeper 通過其簡單的架構和 api 解決了這個問題。zookeeper 允許開發人員專注於核心應用程式邏輯,而不必擔心應用程式的分布式特性。
zookeeper 的資料模型是什麼樣子呢?它很像資料結構當中的樹,也很像檔案系統的目錄。
樹是由節點所組成,zookeeper 的資料儲存也同樣是基於節點,這種節點叫做znode
但是,不同於樹的節點,znode 的引用方式是路徑引用,類似於檔案路徑:
/動物/貓
/汽車/寶馬
這樣的層級結構,讓每乙個 znode 節點擁有唯一的路徑,就像命名空間一樣對不同資訊作出清晰的隔離。
這裡需要注意一點,zookeeper 是為讀多寫少的場景所設計。znode 並不是用來儲存大規模業務資料,而是用於儲存少量的狀態和配置資訊,每個節點的資料最大不能超過 1mb
。
建立節點
create
刪除節點
delete
判斷節點是否存在
exists
獲得乙個節點的資料
getdata
設定乙個節點的資料
setdata
獲取節點下的所有子節點
getchildren
這其中,exists
,getdata
,getchildren
屬於讀操作。zookeeper 客戶端在請求讀操作的時候,可以選擇是否設定watch
我們可以把 watch 理解成是註冊在特定 znode 上的觸發器。當這個 znode 發生改變,也就是呼叫了create
,delete
,setdata
方法的時候,將會觸發 znode 上註冊的對應事件,請求 watch 的客戶端會接收到非同步通知。
具體互動過程如下:
zookeeper 身為分布式系統協調服務,如果自身掛了如何處理呢?為了防止單機掛掉的情況,zookeeper 維護了乙個集群。如下圖:
zookeeper service 集群是一主多從結構。
在更新資料時,首先更新到主節點(這裡的節點是指伺服器,不是 znode),再同步到從節點。
在讀取資料時,直接讀取任意從節點。
為了保證主從節點的資料一致性,zookeeper 採用了zab
協議,這種協議非常類似於一致性演算法paxos
和raft
。
zookeeper atomic broadcast,有效解決了zookeeper 集群崩潰恢復
,以及主從同步資料
的問題。
最大 zxid
也就是節點本地的最新事務編號,包含epoch
和計數
兩部分。epoch 是紀元的意思,相當於 raft 演算法選主時候的 term。
假如 zookeeper 當前的主節點掛掉了,集群會進行崩潰恢復。zab 的崩潰恢復分成三個階段:
選舉階段,此時集群中的節點處於 looking 狀態。它們會各自向其他節點發起投票,投票當中包含自己的伺服器 id 和最新事務 id(zxid)。
接下來,節點會用自身的 zxid 和從其他節點接收到的 zxid 做比較,如果發現別人家的 zxid 比自己大,也就是資料比自己新,那麼就重新發起投票,投票給目前已知最大的 zxid 所屬節點。
每次投票後,伺服器都會統計投票數量,判斷是否有某個節點得到半數以上的投票。如果存在這樣的節點,該節點將會成為準 leader,狀態變為 leading。其他節點的狀態變為 following。
這是為了防止某些意外情況,比如因網路原因在上一階段產生多個 leader 的情況。
所以這一階段,leader 集思廣益,接收所有 follower 發來各自的最新 epoch 值。leader 從中選出最大的 epoch,基於此值加 1,生成新的 epoch 分發給各個 follower。
各個 follower 收到全新的 epoch 後,返回 ack 給 leader,帶上各自最大的 zxid 和歷史事務日誌。leader 選出最大的 zxid,並更新自身歷史日誌。
自此,故障恢復正式完成。
broadcast
zab 的資料寫入涉及到 broadcast 階段,簡單來說,就是 zookeeper 常規情況下更新資料的時候,由 leader 廣播到所有的 follower。其過程如下:
這是雅虎研究員設計 zookeeper 的初衷。利用 zookeeper 的臨時順序節點,可以輕鬆實現分布式鎖。
利用 znode 和 watcher,可以實現分布式服務的註冊和發現。最著名的應用就是阿里的分布式 rpc 框架 dubbo。
redis 的分布式解決方案 codis,就利用了 zookeeper 來存放資料路由表和 codis-proxy 節點的元資訊。同時 codis-config 發起的命令都會通過 zookeeper 同步到各個存活的 codis-proxy。
此外,kafka、hbase、hadoop,也都依靠zookeeper同步節點資訊,實現高可用。
zookeeper基本概念
參考 1 配置管理 用的很多 將專案的配置資訊放在zookeeper進行管理 2 名字服務 和配置管理差不多 3 分布式鎖 zookeeper是一種分布式的協調服務,可以用來協調 多個分布式程序之間的活動 注意是協調程序 專案中就有用到分布式鎖,有乙個joblockannotation的註解的鎖,只...
ZooKeeper 基本概念
zookeeper 是hadoop下的乙個子專案,它是乙個針對大型分布式系統的可靠協調系統 它提供的功能包括 配置維護 名字服務 分布式同步 組服務等 它的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的介面和效能高效 功能穩定的系統提供給使用者。zookeeper乙個最常用的使用場景就是用於擔任服...
基本概念 C 基本概念
由於工作中需要用到c 編寫的一些工具,有時候需要根據需求修改或者定製工具,所以現在不得不學習一下c 的基礎語法,此為筆記,不成章法!機器語言 組合語言 高階語言 面向過程的程式設計方法 物件導向的程式設計方法 泛型程式設計方法 1 演算法設計 2 源程式編輯 3 編譯 4 連線 5 執行除錯 輸入裝...