Zookeeper的功能以及工作原理

2021-08-15 17:18:34 字數 3000 閱讀 6747

1.zookeeper是什麼?

zookeeper是乙個分布式的,開放原始碼的分布式應用程式協調服務,是google的chubby乙個開源的實現,它是集群的管理者,監視著集群中各個節點的狀態根據節點提交的反饋進行下一步合理操作。最終,將簡單易用的介面和效能高效、功能穩定的系統提供給使用者

2.zookeeper提供了什麼?

1)檔案系統

2)通知機制

3.zookeeper檔案系統

每個子目錄項如 nameservice 都被稱作為znode,和檔案系統一樣,我們能夠自由的增加、刪除znode,在乙個znode下增加、刪除子znode,唯一的不同在於znode是可以儲存資料的。 

有四種型別的znode: 

1、persistent-持久化目錄節點 

客戶端與zookeeper斷開連線後,該節點依舊存在 

2、persistent_sequential-持久化順序編號目錄節點 

客戶端與zookeeper斷開連線後,該節點依舊存在,只是zookeeper給該節點名稱進行順序編號 

3、ephemeral-臨時目錄節點 

客戶端與zookeeper斷開連線後,該節點被刪除 

4、ephemeral_sequential-臨時順序編號目錄節點 

客戶端與zookeeper斷開連線後,該節點被刪除,只是zookeeper給該節點名稱進行順序編號 

4.zookeeper通知機制

客戶端註冊監聽它關心的目錄節點,當目錄節點發生變化(資料改變、被刪除、子目錄節點增加刪除)時,zookeeper會通知客戶端。

5.zookeeper做了什麼?

1.命名服務   2.配置管理   3.集群管理   4.分布式鎖  5.佇列管理

6.zookeeper命名服務

在zookeeper的檔案系統裡建立乙個目錄,即有唯一的path。在我們使用tborg無法確定上游程式的部署機器時即可與下游程式約定好path,通過path即能互相探索發現。

7.zookeeper的配置管理

程式總是需要配置的,如果程式分散部署在多台機器上,要逐個改變配置就變得困難。現在把這些配置全部放到zookeeper上去,儲存在 zookeeper 的某個目錄節點中,然後所有相關應用程式對這個目錄節點進行監聽,一旦配置資訊發生變化,每個應用程式就會收到 zookeeper 的通知,然後從 zookeeper 獲取新的配置資訊應用到系統中就好

8.zookeeper集群管理

所謂集群管理無在乎兩點:是否有機器退出和加入、選舉master。 

對於第一點,所有機器約定在父目錄groupmembers下建立臨時目錄節點,然後監聽父目錄節點的子節點變化訊息。一旦有機器掛掉,該機器與 zookeeper的連線斷開,其所建立的臨時目錄節點被刪除,所有其他機器都收到通知:某個兄弟目錄被刪除,於是,所有人都知道:它上船了。

新機器加入也是類似,所有機器收到通知:新兄弟目錄加入,highcount又有了,對於第二點,我們稍微改變一下,所有機器建立臨時順序編號目錄節點,每次選取編號最小的機器作為master就好。

9.zookeeper分布式鎖

有了zookeeper的一致性檔案系統,鎖的問題變得容易。鎖服務可以分為兩類,乙個是保持獨佔,另乙個是控制時序。 

對於第一類,我們將zookeeper上的乙個znode看作是一把鎖,通過createznode的方式來實現。所有客戶端都去建立 /distribute_lock 節點,最終成功建立的那個客戶端也即擁有了這把鎖。用完刪除掉自己建立的distribute_lock 節點就釋放出鎖。 

對於第二類, /distribute_lock 已經預先存在,所有客戶端在它下面建立臨時順序編號目錄節點,和選master一樣,編號最小的獲得鎖,用完刪除,依次方便。

10.zookeeper佇列管理

兩種型別的佇列:

1、同步佇列,當乙個佇列的成員都聚齊時,這個佇列才可用,否則一直等待所有成員到達。 

2、佇列按照 fifo 方式進行入隊和出隊操作。 

第一類,在約定目錄下建立臨時目錄節點,監聽節點數目是否是我們要求的數目。 

第二類,和分布式鎖服務中的控制時序場景基本原理一致,入列有編號,出列按編號。

11.分布式與資料複製 

zookeeper作為乙個集群提供一致的資料服務,自然,它要在所有機器間做資料複製。資料複製的好處: 

1、容錯:乙個節點出錯,不致於讓整個系統停止工作,別的節點可以接管它的工作; 

2、提高系統的擴充套件能力 :把負載分布到多個節點上,或者增加節點來提高系統的負載能力; 

3、提高效能:讓客戶端本地訪問就近的節點,提高使用者訪問速度。 

從客戶端讀寫訪問的透明度來看,資料複製集群系統分下面兩種: 

1、寫主(writemaster) :對資料的修改提交給指定的節點。讀無此限制,可以讀取任何乙個節點。這種情況下客戶端需要對讀與寫進行區別,俗稱讀寫分離; 

2、寫任意(write any):對資料的修改可提交給任意的節點,跟讀一樣。這種情況下,客戶端對集群節點的角色與變化透明。

對zookeeper來說,它採用的方式是寫任意。通過增加機器,它的讀吞吐能力和響應能力擴充套件性非常好,而寫,隨著機器的增多吞吐能力肯定下降(這也是它建立observer的原因),而響應能力則取決於具體實現方式,是延遲複製保持最終一致性,還是立即複製快速響應。

12.zookeeper角色描述

13.zookeeper與客戶端

軟體-注重思想、邏輯

Zookeeper的功能以及工作原理

前言前面有一篇部落格講到了spring boot整合jms的使用 但是最近遇到乙個需求,需要同時使用jms的佇列和topic,於是就有了下面的測試 消費者 解決方案如下 configuration enablejms public class jmsconfig bean public jmslis...

樣式功能以及設計功能

目錄 設計樣式 樣式選單功能主要是用來簡化的重複性的文字標題格式處理工作,利用樣式選單裡面的選項卡選擇適合的樣式對目標標題進行修改。樣式選單功能在開始選單裡面。1.單行修改標題只需要將游標放在標題的最後。2.選擇點選合適的標題樣式。1.選中要修改的多行標題。2.選擇點選合適的標題樣式。檢視標題目錄可...

Flask 框架的功能 以及 重點。

flask 本身相當於乙個核心,其他幾乎所有的功能都要用到擴充套件 郵件擴充套件 flask mail 使用者認證 flask login 資料庫 flask sqlalchemy 都需要用第三方的擴充套件來實現。比如可以用 flask 擴充套件加入 orm 窗體驗證工具,檔案上傳 身份驗證等。fl...