ZooKeeper學習之它能幹什麼?

2021-09-23 17:04:27 字數 1968 閱讀 9440

最近在學習zookeeper(以後都用zk代稱),為了驗證自己的學習,希望對zk相關的知識進行整理,一方面檢驗學習成果,一方面進行筆記整理。

一般而言,我們學習一件東西的動機是這個東西對我們有用,不管是當前立即能帶來效用還是長遠看能帶來好的收穫。學習zk也一樣,首先要明白學習它幹嘛?我們在開發中能用zk做些什麼?通過使用zk能帶來哪些便利?能解決哪些開發中的痛點?在我的今後的開發中要不要用它?這些問題需要我們搞清楚,這樣才能提高我們的開發效率,才能真正發揮zk的優點。

(1)zk是什麼?

zk最早是由雅虎研究院的乙個研究小組研發的,當時他們面對的問題是在其內部的大型分布式系統都需要乙個分布式協調的乙個系統,早起的開發的系統往往都由單點問題,為了保證一致性往往只有乙個主節點去完成整個系統的一致性功能。後來,雅虎的開發人員就試著去開發乙個通用的無單點問題的分布式協調框架,這樣一來,開發人員就可以把精力放在業務邏輯的開發上來,而不用過多關注系統的協調問題。所以,總的來說,zk是乙個分布式的、開源的、分布式應用程式協調服務。

(2)利用zk能做些什麼工作?

光說它是乙個分布式應用程式協調服務可能不是那麼明顯,讀到這兒可能仍然會有疑惑,到底是個什麼東西。接下來通過zk可以具體實現的功能,配合zk的典型使用場景來說明它到底能幹什麼。

資料發布/訂閱系統,典型的就是所謂的配置中心,通過配置中心可以對系統中的配置資訊進行修改和推送。應用系統發布者可以把資料發布到zk的乙個或者一些列的節點上,而資訊的訂閱者可以進行訂閱,通過對這些節點的資料進行監聽,從而達到配置的動態更新等服務,實現配置資訊的集中式管理和資料的動態更新。在我工作過程中,一些小的動態的配置資訊就是通過zk進行動態配置的,乙個例子就是系統管理員資訊,通過這些配置,可以在管理員變更的時候,不重啟機器,達到管理員資訊的動態變更。

負載均衡是用來對多個計算機、網路連線、cpu、磁碟等資源進行分配的負載,主要是為了達到資源的最大化利用、最大化吞吐、最小化響應時間和避免某些伺服器過載。通過利用zk集群可以實現動態的dns網域名稱解析服務,每個應用自己解析ip和port,我們可以將dns資訊配置在zk中的節點之上,然後應用通過在節點註冊watcher來動態監聽網域名稱配置,這樣在網域名稱ip動態變化是可以監聽到,及時進行資訊更新。這種一般在公司內部開發時使用,這樣可以避免過多的本地host繫結,讓你的pe去動態維護就好了,開發只關注自己的業務邏輯即可。

命名服務也是在分布式系統中常用的一種公共服務,而利用zk可以實現一套分布式的全域性唯一id的分配機制。zk的幾點中有一種特殊的節點--順序節點。這種節點在建立完成以後,zk會自動在其名字後面加上節點的順序,zk可以保證在分布式系統中,名字的順序性,其機制就是利用zk的一致性來保證併發訪問時的節點的唯一性。

分布式協調/通知服務是分布式系統中的重要一環,將不同的分布式的組建有機的結合在一起。通過引入協調者,可以讓分布式協調的職責從應用分離,可以減小系統之間的耦合性,提高系統的可擴充套件性。這種功能的實現比較簡單,主要是利用zk的watcher機制,通過監聽節點的變化,從而感知相應的通知資訊,然後作出不同的響應處理。

集群管理的功能應用較多,可以通過zk實現集群機器執行狀態蒐集、集群機器的工作狀態、機器的上下線等操作。在我工作總,主要利用zk實現狀態蒐集、任務的上下線、機器機器工作狀態蒐集等,這些實現也相對簡單,利用zk的節點監聽的功能就可以很好的實現。

zk節點的建立有乙個特點就是:如果同時有多個客戶端請求建立同乙個節點,那麼最終只會有乙個客戶端的請求會建立成功,利用這個特點,當需要進行master選舉時,只需要都進行建立請求即可,請求成功的為master。我在工作中,在master不需要本人控制時就利用這個機制去建立。這裡建立的節點不可控,由zk決定,如果你希望可控,可以再建立乙個固定節點,把希望成為leader的節點資訊寫入,當出發選舉時,多一步判斷操作即可。

同樣利用上面的特性,需要鎖時就向特定目錄發起建立節點請求即可,不需要是就刪除該節點。

分布式佇列的實現利用zk的順序節點,在佇列節點下建立順序節點,在取資料時,首先獲得所有子節點,然後確定自己即誒單序號在子節點中的順序,如果自己不是最小的子節點,那麼就等待,同時向比自己小的最後乙個節點註冊watcher,接收到watcher通知後重複上述步驟即可。

什麼是雲伺服器,ECS它能幹什麼?

雲伺服器詳解 伺服器是我們每個人基本都會接觸到或者間接使用到的東西了,以前的概念可能就是乙個大機箱,隨著技術的進步,機箱型別的伺服器早已經不能滿足需要了,我們不可能為了執行個人部落格去專門購買乙個機箱了,不說 昂貴,僅僅從方便性上考慮就很不合適了。雲伺服器的出現不論是從經濟方面還是便捷性上都是強過傳...

zookeeper學習之簡述

概況 zookeeper是乙個分布式的,開放原始碼的分布式應用程式協調服務,是google的chubby乙個開源實現,是hadoop和hbase的重要元件。它是乙個為分布式應用提供一致性服務的軟體,提供的功能包括 配置維護 網域名稱服務 分布式同步 組服務等。用途 常用來管理資料,例如作為dubbo...

zookeeper學習之zookeeper集群

匯入zookeeper原始碼包,解壓安裝到你放置的資料夾 命令 tar zxvf 原始碼包名 進入解壓後的資料夾 conf目錄,複製zoo zample.cfg檔案並重命名 命令 cp zoo zample.cfg zoo.cfg 使用vim編輯器修改zoo.cfg檔案 命令 vim zoo.cfg...