ZooKeeper 基本概念

2021-10-07 15:37:55 字數 2147 閱讀 2947

zookeeper 是hadoop下的乙個子專案,它是乙個針對大型分布式系統的可靠協調系統;它提供的功能包括:配置維護、名字服務、分布式同步、組服務等; 它的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的介面和效能高效、功能穩定的系統提供給使用者。

zookeeper乙個最常用的使用場景就是用於擔任服務生產者和服務消費者的註冊中心,服務生產者將自己提供的服務註冊到zookeeper中心,服務的消費者在進行服務呼叫的時候先到zookeeper中查詢服務,獲取到服務生產者的詳細資訊之後,再去呼叫服務生產者的內容與資料,簡單示例圖如下:

zookeeper允許分布式程序通過共享的層次結構命名空間進行相互協調,這與標準檔案系統類似。 命名空間由zookeeper中的資料暫存器組成 - 稱為znode,這些類似於檔案和目錄。 與為儲存設計的典型檔案系統不同,zookeeper資料儲存在記憶體中,這意味著zookeeper可以實現高吞吐量和低延遲。

zookeeper層次結構命名空間示意圖如下:

1)、最終一致性:為客戶端展示同一檢視,這是 zookeeper 最重要的效能。2)、可靠性:如果訊息被一台伺服器接受,那麼它將被所有的伺服器接受。3)、實時性:zookeeper 不能保證兩個客戶端同時得到剛更新的資料,如果需要最新資料,應該在讀資料之前呼叫sync()介面。4)、等待無關(wait-free):慢的或者失效的 client 不干預快速的client的請求。5)、原子性:更新只能成功或者失敗,沒有中間其它狀態。6)、順序性:對於所有server,同一訊息發布順序一致。123456123456

1、zookeeper 系統架構

首先看一下 zookeeper 的架構圖。

zookeeper 的架構圖中我們需要了解和掌握的主要有:

(1)zookeeper分為伺服器端(server) 和客戶端(client),客戶端可以連線到整個 zookeeper服務的任意伺服器上(除非 leaderserves 引數被顯式設定, leader 不允許接受客戶端連線)。

(2)客戶端使用並維護乙個 tcp 連線,通過這個連線傳送請求、接受響應、獲取觀察的事件以及傳送心跳。如果這個 tcp 連線中斷,客戶端將自動嘗試連線到另外的 zookeeper伺服器。客戶端第一次連線到 zookeeper服務時,接受這個連線的 zookeeper伺服器會為這個客戶端建立乙個會話。當這個客戶端連線到另外的伺服器時,這個會話會被新的伺服器重新建立。

(3)上圖中每乙個server代表乙個安裝zookeeper服務的機器,即是整個提供zookeeper服務的集群(或者是由偽集群組成);

(4)組成zookeeper服務的伺服器必須彼此了解。 它們維護乙個記憶體中的狀態影象,以及持久儲存中的事務日誌和快照, 只要大多數伺服器可用,zookeeper服務就可用;

(5)zookeeper 啟動時,將從例項中選舉乙個 leader,leader 負責處理資料更新等操作,乙個更新操作成功的標誌是當且僅當大多數server在記憶體中成功修改資料。每個server 在記憶體中儲存了乙份資料。

(6)zookeeper是可以集群複製的,集群間通過zab協議(zookeeper atomic broadcast)來保持資料的一致性;

(7)zab協議包含兩個階段:leader election階段和atomic brodcast階段。

a) 集群中將選舉出乙個leader,其他的機器則稱為follower,所有的寫操作都被傳送給leader,並通過brodcast將所有的更新告訴給follower。

b) 當leader崩潰或者leader失去大多數的follower時,需要重新選舉出乙個新的leader,讓所有的伺服器都恢復到乙個正確的狀態。

c) 當leader被選舉出來,且大多數伺服器完成了 和leader的狀態同步後,leadder election 的過程就結束了,就將會進入到atomic brodcast的過程。

d) atomic brodcast同步leader和follower之間的資訊,保證leader和follower具有形同的系統狀態。

zookeeper基本概念

參考 1 配置管理 用的很多 將專案的配置資訊放在zookeeper進行管理 2 名字服務 和配置管理差不多 3 分布式鎖 zookeeper是一種分布式的協調服務,可以用來協調 多個分布式程序之間的活動 注意是協調程序 專案中就有用到分布式鎖,有乙個joblockannotation的註解的鎖,只...

基本概念 C 基本概念

由於工作中需要用到c 編寫的一些工具,有時候需要根據需求修改或者定製工具,所以現在不得不學習一下c 的基礎語法,此為筆記,不成章法!機器語言 組合語言 高階語言 面向過程的程式設計方法 物件導向的程式設計方法 泛型程式設計方法 1 演算法設計 2 源程式編輯 3 編譯 4 連線 5 執行除錯 輸入裝...

Zookeeper的基本概念與應用場景

什麼是 zab zookeeper 的應用場景 zookeeper 是一種分布式協調服務,用於管理大型主機。在分布式環境中協調和管理服務是乙個複雜的過程。zookeeper 通過其簡單的架構和 api 解決了這個問題。zookeeper 允許開發人員專注於核心應用程式邏輯,而不必擔心應用程式的分布式...