Zookeeper Learning
引子?
云計算越來越流行的今天,單一機器處理能力已經不能滿足我們的需求,不得不采用大量的服務集群。服務集群對外提供服務的過程中,有很多的配置需要隨時更新,服務間需要協調工作,這些信息如何推送到各個節點?并且保證信息的一致性和可靠性?
眾所周知,分布式協調服務很難正確無誤的實現,它們很容易在競爭條件和死鎖上犯錯誤。如何在這方面節省力氣?Zookeeper是一個不錯的選擇。 Zookeeper背后的動機就是解除分布式應用在實現協調服務上的痛苦。本文在介紹Zookeeper的基本理論基礎上,用Zookeeper實現了一 個配置管理中心,利用Zookeeper將配置信息分發到各個服務節點上,并保證信息的正確性和一致性。
Zookeeper是什么?
引用官方的說法:“Zookeeper是一個高性能,分布式的,開源分布式應用協調服務。它提供了簡單原始的功能,分布式應用可以基于它實現更高級 的服務,比如同步,配置管理,集群管理,名空間。它被設計為易于編程,使用文件系統目錄樹作為數據模型。服務端跑在java上,提供java和C的客戶端 API”。
Zookeeper總體結構
Zookeeper服務自身組成一個集群(2n+1個服務允許n個失效)。Zookeeper服務有兩個角色,一個是leader,負責寫服務和數據同步,剩下的是follower,提供讀服務,leader失效后會在follower中重新選舉新的leader。
Zookeeper邏輯圖如下,
客戶端可以連接到每個server,每個server的數據完全相同。
每個follower都和leader有連接,接受leader的數據更新操作。
Server記錄事務日志和快照到持久存儲。
大多數server可用,整體服務就可用。
Zookeeper數據模型
Zookeeper表現為一個分層的文件系統目錄樹結構(不同于文件系統的是,節點可以有自己的數據,而文件系統中的目錄節點只有子節點)。
數據模型結構圖如下,
圓形節點可以含有子節點,多邊形節點不能含有子節點。一個節點對應一個應用,節點存儲的數據就是應用需要的配置信息。
Zookeeper 特點
順序一致性:按照客戶端發送請求的順序更新數據。
原子性:更新要么成功,要么失敗,不會出現部分更新。
單一性 :無論客戶端連接哪個server,都會看到同一個視圖。
可靠性:一旦數據更新成功,將一直保持,直到新的更新。
及時性:客戶端會在一個確定的時間內得到最新的數據。
Zookeeper運用場景
數據發布與訂閱 (我的業務用到這個特性,后面會有詳細介紹)
應用配置集中到節點上,應用啟動時主動獲取,并在節點上注冊一個watcher,每次配置更新都會通知到應用。
名空間服務
分布式命名服務,創建一個節點后,節點的路徑就是全局唯一的,可以作為全局名稱使用。
分布式通知/協調
不同的系統都監聽同一個節點,一旦有了更新,另一個系統能夠收到通知。
分布式鎖
Zookeeper能保證數據的強一致性,用戶任何時候都可以相信集群中每個節點的數據都是相同的。一個用戶創建一個節點作為鎖,另一個用戶檢測該節點,如果存在,代表別的用戶已經鎖住,如果不存在,則可以創建一個節點,代表擁有一個鎖。
集群管理
每個加入集群的機器都創建一個節點,寫入自己的狀態。監控父節點的用戶會受到通知,進行相應的處理。離開時刪除節點,監控父節點的用戶同樣會收到通知。
轉載于:https://blog.51cto.com/milesaway/1719316
總結
以上是生活随笔為你收集整理的Zookeeper Learning的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三星1TB硬盘MM804RS不识别加电磁
- 下一篇: 华为三月份的新品可真多!P60系列和Ma