您好,登錄后才能下訂單哦!
這篇文章給大家介紹ZooKeeper分析是怎么樣的,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
分布式系統是同時跨越多個物理主機,獨立運行的多個軟件所組成的系統。在這樣的分布式系統中,如何保證節點信息同步和共享便是一個麻煩的事情,而ZooKeepe最主要的使用場景,便是作為分布式系統的協同服務,用來解決這些問題。
分布式的協同服務就是通過某種方式,讓每個節點的信息都能夠同步和共享。這依賴于服務進程之間的通信。通信方式有:
通過網絡進行信息共享
例:現實中開發leader在會上將任務傳達下去,組員通過聽leader的命令或查看leader的郵件知道自己要干什么。當任務分配出現變化時,leader會單獨通知組員或再次召開會議。信息通過人與人間的直接溝通,完成傳遞。
通過共享存儲
例:開發leader按照約定的時間和路徑,把任務分配表放到了SVN,組員每天去SVN上拉取最新的任務分配表,然后干活;當SVN文件版本更新時,觸發郵件通知,每個組員再去拉取最新的任務分配表。其中SVN就是共享存儲。
解決分布式協同服務有二種方式,ZooKeeper采用了共享存儲的方式解決,但實際上分布式應用也需要和存儲進行網絡通信。
通過ZooKeeper實現分布式協同的原理,跟上面SVN的例子類似。ZooKeeper就像SVN一樣存儲了任務的分配、完成情況等共享信息。每個分布式系統的節點就像是組員,訂閱了這些共享信息。當主節點(組leader),對某個從節點的分工信息作出改變時,相關訂閱的從節點得到ZooKeeper的通知,取得自己最新任務分配。從節點完成工作后,把完成的情況存儲到zookeeper,主節點訂閱了該任務的完成情況信息,所以會得到zookeeper的完工通知。
注意:Slave節點要想獲取ZooKeeper的更新通知,需要事先在關心的數據節點上設置觀察點。
如果各個節點間信息不能及時共享和同步,那么就會在協作過程中產生過各種各樣的問題。ZooKeeper解決協同問題的關鍵就在于保證分布式系統信息的一致性。
ZooKeeper是一個開源的分布式協調服務框架,其設計目標是將那些復雜的且容易出錯的分布式一致性服務封裝起來,構成一個高效的原語集,并以一些簡單的接口提供給用戶使用。分布式應用程序基于它可以實現如數據訂閱/發布、負載均衡、命名服務、集群管理、分布式鎖和分布式隊列等功能。
首先要學習ZooKeeper得大致了解下面的幾種概念:
在分布式系統中,通常構成集群的每一臺機器都有自己的角色,最典型的就是主備模式(Master/Slave),能夠處理寫的就是master機器,把通過異步復制方式獲取最新數據并提供讀服務的稱為Slave機器。而在ZooKeeper中并未采取這些概念,而是引入了Leader、Follower、Observer三種角色。
為方便理解,可以先了解下Paxos及Raft等解決分布式一致性的算法等理論知識。雖然Zookeeper并沒有直接采用Paxos算法,而是采用了一種被稱為ZAB(Zookeeper Atomic Broadcast)的一致性協議。分布式(一)——簡介及理論
Leader:zookeeper中的所有機器通過選舉來選定一臺被稱為Leader的機器,用來提供讀和寫服務。
Follower:提供讀服務、及選舉leader服務。
Observer:也能提供讀服務,區別在于不參與選舉,不參與寫操作的過半成功策略,同時作為選舉的記錄者。
session指客戶端會話,一個客戶端連接指客戶端和服務端的一個TCP長連接。
ZooKeeper對外的服務端口默認為2181,客戶端啟動時會與服務器建立一個tcp長連接,從第一次連接建立開始,客戶端會話的生命周期也就開始了。通過這個連接客戶端能夠進行心跳檢測與服務器保持有效的會話,也能夠向ZooKeeper服務器發送請求并接收響應,同時還可以通過連接接受來自服務器的watch事件通知。
分布式中通常講的節點就是指一臺機器,但在ZooKeeper中節點分為兩類:
機器節點:構成集群的機器
數據節點(ZNode );ZooKeeper將所有的數據存儲在內存中,數據模型是一顆樹(ZNode Tree),如下圖所示。
樹中的每一個節點就是一個ZNode,每個ZNode上面會保存自己的數據內容及一系列屬性信息。
對于每個ZNode,ZooKeeper都會對其維護一個叫做Stat的數據結構。這個Stat數據結構記錄了當前這個ZNode的三個數據版本:
version:當前ZNode的版本
cversion:當前ZNode子節點的版本
aversion:當前ZNode的ACL版本
Watcher事件監聽器,是ZooKeeper實現分布式協調服務的重要特性,ZooKeeper允許用戶在指定節點注冊一些Watcher,并在一些特定事件觸發時,ZooKeeper會將事件通知給感興趣的客戶端。
ZooKeeper采用ACL策略來進行權限控制,有如下五種權限:
CREATE:創建子節點的權限
READ:獲取節點數據及子節點列表的權限
WRITE:更新節點數據的權限
DELETE:刪除子節點的權限
ADMIN:設置節點ACL的權限
關于ZooKeeper分析是怎么樣的就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。