1. 程式人生 > 其它 >Zookeeper有什麼作用?優缺點?有什麼應用場景?

Zookeeper有什麼作用?優缺點?有什麼應用場景?

作用

Zookeeper作用包括儲存資料(檔案系統)和監聽(監聽通知機制)

優點

1)分散式協調過程簡單

2)同步:zk高度同步,這意味著伺服器程序之間既存在互斥又存在合作,同步有助於Apache HBase進行配置管理。

3)有序訊息:zk跟蹤一個數字,表示每個更新的順序,保證訊息有序

4)序列化:根據具體規則,zk對資料進行編碼。 另外,它還可確保我們的應用程式始終如一地執行。 但是,在MapReduce中,我們使用此方法(序列化)來協調佇列以執行正在執行的執行緒

5)速度:在讀請求多的情況下,能以很快的速度執行

6)可擴充套件性:此外,可以通過部署更多機器來加強zk的效能

7)有序性有何優勢?:眾所周知,zk中的訊息是有序的。所以,為了實現更高級別的抽象,需要有序性。 這就是有序性對我們有利的方式

8)快:在讀多的情況下,zk會非常快

9)可靠性:zk非常可靠,因為一旦zk更新了,更新後的資料會一直保持,直到被覆蓋更新

10)原子性:zk只有兩種情況,要麼全部成功,要麼全部失敗,沒有中間狀態的情況

11)實時性:zk保證在一定時間段內,客戶端最終一定能從伺服器上讀到最新的資料狀態

缺點

1)增加新的zk伺服器時可能導致資料丟失

在現有伺服器中,當新zk伺服器數量超過zk服務中已存在的數量時資料會丟失。 同時,向zk服務發出Start命令,新伺服器可能形成仲裁

2)不能遷移

在沒有使用者干預的情況下,zk伺服器無法從版本3.4遷移到3.3,然後再遷移到3.4。

3)節點數(其實叢集中只要存活數過半即對外可用,但是會有腦裂情況發生)

要求3或5個這樣奇數個zk節點(要求奇數是為了保證選舉的正常進行因為leader選舉要求 可用節點數量 > 總節點數/2,防止腦裂造成叢集不可用。同時在容錯能力相同的情況下,奇數個節點更節省資源)

4)機架感知複製

目前,它不支援機架放置和感知

5)縮容

不支援減少pod的數量,以防止意外資料丟失

6)磁碟變更

不支援在初始部署後更改volume要求,以防止重新分配意外丟失資料

7)虛擬網路

當服務部署在虛擬網路上時,如果沒有完全重新安裝,服務可能無法切換到主機網路。 另外,對於嘗試從主機切換到虛擬網路,它們是相同的情況

8)Kerberos

在虛擬網路上,它目前不支援啟用Kerberos

9)支援有限

對跨群集方案的支援非常有限。 但是,沒有CP系統會一直支援跨叢集。 雖然我們可以說consul似乎在這方面做得更好

應用場景

1)資料的釋出/訂閱

資料的釋出/訂閱系統,通常也用作配置中心。在分散式系統中,你可能有成千上萬個服務節點,如果想要對所有服務的某項配置進行更改,由於資料節點過多,你不可逐臺進行修改,而應該在設計時採用統一的配置中心。之後釋出者只需要將新的配置傳送到配置中心,所有服務節點即可自動下載並進行更新,從而實現配置的集中管理和動態更新。 Zookeeper通過Watcher機制可以實現資料的釋出和訂閱。分散式系統的所有的服務節點可以對某個ZNode註冊監聽,之後只需要將新的配置寫入該ZNode,所有服務節點都會收到該事件。

2)命名服務

在分散式系統中,通常需要一個全域性唯一的名字,如生成全域性唯一的訂單號等,Zookeeper可以通過順序節點的特性來生成全域性唯一ID,從而可以對分散式系統提供命名服務。

3)Master選舉

分散式系統一個重要的模式就是主從模式(Master/Salves),Zookeeper可以用於該模式下的Matser選舉。可以讓所有服務節點去競爭性地建立同一個ZNode,由於Zookeeper不能有路徑相同的ZNode,必然只有一個服務節點能夠建立成功,這樣該服務節點就可以成為Master節點。

4)分散式鎖

可以通過Zookeeper的臨時節點和Watcher機制來實現分散式鎖,這裡以排它鎖為例進行說明:分散式系統的所有服務節點可以競爭性地去建立同一個臨時ZNode,由於Zookeeper不能有路徑相同的ZNode,必然只有一個服務節點能夠建立成功,此時可以認為該節點獲得了鎖。其他沒有獲得鎖的服務節點通過在該ZNode上註冊監聽,從而當鎖釋放時再去競爭獲得鎖。鎖的釋放情況有以下兩種: 當正常執行完業務邏輯後,客戶端主動將臨時ZNode刪除,此時鎖被釋放; 當獲得鎖的客戶端發生宕機時,臨時ZNode會被自動刪除,此時認為鎖已經釋放。 當鎖被釋放後,其他服務節點則再次去競爭性地進行建立,但每次都只有一個服務節點能夠獲取到鎖,這就是排他鎖。

5)叢集管理

Zookeeper還能解決大多數分散式系統中的問題: 如可以通過建立臨時節點來建立心跳檢測機制。如果分散式系統的某個服務節點宕機了,則其持有的會話會超時,此時該臨時節點會被刪除,相應的監聽事件就會被觸發。 分散式系統的每個服務節點還可以將自己的節點狀態寫入臨時節點,從而完成狀態報告或節點工作進度彙報。 通過資料的訂閱和釋出功能,Zookeeper還能對分散式系統進行模組的解耦和任務的排程。 通過監聽機制,還能對分散式系統的服務節點進行動態上下線,從而實現服務的動態擴容。

6)事務操作

在ZooKeeper中,能改變ZooKeeper伺服器狀態的操作稱為事務操作。一般包括資料節點建立與刪除、資料內容更新和客戶端會話建立與失效等操作。 對應每一個事務請求,ZooKeeper都會為其分配一個全域性唯一的事務ID,用 ZXID 表示,通常是一個64位的數字。每一個 ZXID對應一次更新操作, 從這些 ZXID 中可以間接地識別出 ZooKeeper 處理這些事務操作請求的全域性順序。

原文連結:https://blog.csdn.net/qq_41544550/article/details/123148688