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