ZooKeeper(概念篇):ZooKeeper簡介

用了好久zk了,只會用,也沒系統總結一下

Apache ZooKeeper致力於開發和維護開源服務器,實現高度可靠的分佈式協調。

前段時間總結過CAP,感興趣的大家可以過去看看:https://blog.csdn.net/Soinice/article/details/96784994

什麼是ZooKeeper?

ZooKeeper 簡稱zk,中文名:動物園管理者

ZooKeeper是一種集中式服務,用於維護配置信息命名提供分佈式同步提供組服務。所有這些類型的服務都以分佈式應用程序的某種形式使用。每次實施它們都需要做很多工作來修復不可避免的錯誤和競爭條件。由於難以實現這些類型的服務,應用程序最初通常會吝嗇它們,這使得它們在變化的情況下變得脆弱並且難以管理。即使正確完成,這些服務的不同實現也會在部署應用程序時導致管理複雜性。所以,這時候就產生了ZK。

它是一個分佈式服務框架,是Apache Hadoop的一個子項目,它主要是用來解決分佈式應用中經常遇到的一些數據管理問題,如:統一命名服務,集羣管理,分佈式應用配置項的管理等

ZooKeeper:分佈式應用程序的分佈式協調服務

ZooKeeper是一種用於分佈式應用程序的分佈式開源協調服務。它公開了一組簡單的原語,分佈式應用程序可以構建這些原語,以實現更高級別的服務,以實現同步,配置維護以及組和命名。它被設計爲易於編程,並使用在熟悉的文件系統目錄樹結構之後設計的數據模型。它在Java中運行,並且具有Java和C的綁定。

衆所周知,協調服務很難做到。他們特別容易出現比賽條件和死鎖等錯誤。ZooKeeper背後的動機是減輕分佈式應用程序從頭開始實施協調服務的責任。

設計目標

簡單的

ZooKeeper允許分佈式進程通過共享的分層命名空間相互協調,該命名空間的組織方式與標準文件系統類似。名稱空間由數據寄存器組成 - 在ZooKeeper用語中稱爲znodes - 這些與文件和目錄類似。與專爲存儲而設計的典型文件系統不同,ZooKeeper數據保存在內存中,這意味着ZooKeeper可以實現高吞吐量和低延遲數量。

ZooKeeper實現非常重視高性能,高可用性,嚴格有序的訪問。ZooKeeper的性能方面意味着它可以在大型分佈式系統中使用。可靠性方面使其不會成爲單點故障。嚴格的排序意味着可以在客戶端實現複雜的同步原語。

可複製

與它協調的分佈式進程一樣,ZooKeeper本身也可以在稱爲集合的一組主機上進行復制。

組成ZooKeeper服務的服務器必須彼此瞭解。它們維護內存中的狀態圖像,以及持久性存儲中的事務日誌和快照。只要大多數服務器可用,ZooKeeper服務就可用。

客戶端連接到單個ZooKeeper服務器。客戶端維護TCP連接,通過該連接發送請求,獲取響應,獲取監視事件以及發送心跳。如果與服務器的TCP連接中斷,則客戶端將連接到其他服務器。

有序的

ZooKeeper使用反映所有ZooKeeper事務順序的數字標記每個更新。後續操作可以使用該順序來實現更高級別的抽象,例如同步原語。

快速的

它在“讀取主導”工作負載中特別快。

ZooKeeper應用程序在數千臺計算機上運行,​​並且在讀取比寫入更常見的情況下表現最佳,比率大約爲10:1。

總之,ZK是數據庫

ZooKeeper 是一個數據庫

啓動服務端

ZKServer.sh start

啓動客戶端

zkCli.sh

默認連接任意一臺服務器 localhost:2181

創建節點

create /soinice 666

查詢節點值

get /soinice
666

簡單的API

ZooKeeper的設計目標之一是提供一個非常簡單的編程接口。因此,它僅支持以下操作:

  • create:在樹中的某個位置創建一個節點

  • delete:刪除節點

  • exists:測試某個位置是否存在節點

  • get data:從節點讀取數據

  • set data:將數據寫入節點

  • get children:檢索節點的子節點列表

  • sync:等待傳播數據

ZooKeeper是一個擁有文件系統特點的數據庫

數據模型和分層命名空間

ZooKeeper提供的名稱空間非常類似於標準文件系統。名稱是由斜槓(/)分隔的路徑元素序列。ZooKeeper名稱空間中的每個節點都由路徑標識。

ZooKeeper的分層命名空間

創建節點必須 / 開始,和文件目錄很相像。

節點和臨時節點

與標準文件系統不同,ZooKeeper命名空間中的每個節點都可以包含與之關聯的數據以及子項。這就像擁有一個允許文件也是目錄的文件系統。(ZooKeeper旨在存儲協調數據:狀態信息,配置,位置信息等,因此存儲在每個節點的數據通常很小,在字節到千字節範圍內。)我們使用術語znode來說明我們正在談論ZooKeeper數據節點。

Znodes維護一個stat結構,其中包括數據更改,ACL(訪問數據列表)更改和時間戳的版本號,以允許緩存驗證和協調更新。每次znode的數據更改時,版本號都會增加。例如,每當客戶端檢索數據時,它也接收數據的版本。

存儲在命名空間中每個znode的數據以原子方式讀取和寫入。讀取獲取與znode關聯的所有數據字節,寫入替換所有數據。每個節點都有一個訪問控制列表(ACL),限制誰可以做什麼。

ZooKeeper也有臨時節點的概念。只要創建znode的會話處於活動狀態,就會存在這些znode。會話結束時,znode將被刪除。當您想要實現[tbd]時,臨時節點很有用。

ZooKeeper是一個解決了一致性問題的分佈式數據庫

數據同步,數據一致性。

ZooKeeper是一個具有發佈和訂閱功能的分佈式數據庫(watch)

有條件的更新和手錶

ZooKeeper支持手錶的概念。

客戶端可以在znode上設置監視。當znode更改時,將觸發並刪除手錶。觸發監視時,客戶端會收到一個數據包,指出znode已更改。如果客戶端與其中一個ZooKeeper服務器之間的連接中斷,則客戶端將收到本地通知。這些可以用於[tbd]

總之,zk是數據庫,是一個具有發佈和訂閱功能的,解決了數據一致性問題的,擁有文件系統特點的分佈式數據庫。

ZooKeeper特點

ZooKeeper非常快速而且非常簡單。但是,由於其目標是構建更復雜的服務(如同步)的基礎,因此它提供了一系列保證。這些是:

  • 順序一致性 - 客戶端的更新將按發送順序應用。
  • 原子性 - 更新成功或失敗。沒有部分結果。
  • 單系統映像 - 無論服務器連接到哪個服務器,客戶端都將看到相同的服務視圖。
  • 可靠性 - 一旦應用了更新,它將從那時起持續到客戶端覆蓋更新。
  • 及時性 - 系統的客戶視圖保證在特定時間範圍內是最新的。

文章大多數翻譯自:http://zookeeper.apache.org/doc/current/zookeeperOver.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章