1. Zookeeper介紹
ZooKeeper 是一個開源的分布式協(xié)調(diào)框架,是Apache Hadoop 的一個子項目,主要用來解決分
布式集群中應(yīng)用系統(tǒng)的一致性問題。Zookeeper 的設(shè)計目標(biāo)是將那些復(fù)雜且容易出錯的分布式一致性
服務(wù)封裝起來,構(gòu)成一個高效可靠的原語集,并以一系列簡單易用的接口提供給用戶使用。
官方:https://zookeeper.apache.org/
ZooKeeper本質(zhì)上是一個分布式的小文件存儲系統(tǒng)(Zookeeper=文件系統(tǒng)+監(jiān)聽機(jī)制)。提供基
于類似于文件系統(tǒng)的目錄樹方式的數(shù)據(jù)存儲,并且可以對樹中的節(jié)點進(jìn)行有效管理,從而用來維護(hù)和
監(jiān)控存儲的數(shù)據(jù)的狀態(tài)變化。通過監(jiān)控這些數(shù)據(jù)狀態(tài)的變化,從而可以達(dá)到基于數(shù)據(jù)的集群管理、統(tǒng)
一命名服務(wù)、分布式配置管理、分布式消息隊列、分布式鎖、分布式協(xié)調(diào)等功能。
Zookeeper從設(shè)計模式角度來理解:是一個基于觀察者模式設(shè)計的分布式服務(wù)管理框架,它負(fù)責(zé)
存儲和管理大家都關(guān)心的數(shù)據(jù),然后接受觀察者的注冊,一旦這些數(shù)據(jù)的狀態(tài)發(fā)生變化,Zookeeper
就將負(fù)責(zé)通知已經(jīng)在Zookeeper上注冊的那些觀察者做出相應(yīng)的反應(yīng)。
2、ZooKeeper數(shù)據(jù)結(jié)構(gòu)
ZooKeeper 數(shù)據(jù)模型的結(jié)構(gòu)與 Unix 文件系統(tǒng)很類似,整體上可以看作是一棵樹,每個節(jié)點稱做一個
ZNode。
ZooKeeper的數(shù)據(jù)模型是層次模型,層次模型常見于文件系統(tǒng)。層次模型和key-value模型是兩種主流
的數(shù)據(jù)模型。ZooKeeper使用文件系統(tǒng)模型主要基于以下兩點考慮
1文件系統(tǒng)的樹形結(jié)構(gòu)便于表達(dá)數(shù)據(jù)之間的層次關(guān)系
2文件系統(tǒng)的樹形結(jié)構(gòu)便于為不同的應(yīng)用分配獨立的命名空間( namespace )
ZooKeeper的層次模型稱作Data Tree,Data Tree的每個節(jié)點叫作Znode。不同于文件系統(tǒng),每個節(jié)
點都可以保存數(shù)據(jù),每一個 ZNode 默認(rèn)能夠存儲 1MB 的數(shù)據(jù),每個 ZNode 都可以通過其路徑唯一
標(biāo)識,每個節(jié)點都有一個版本(version),版本從0開始計數(shù)。
一個znode可以使持久性的,也可以是臨時性的:文章來源:http://www.zghlxwxcb.cn/news/detail-766758.html
- 持久節(jié)點(PERSISTENT): 這樣的znode在創(chuàng)建之后即使發(fā)生ZooKeeper集群宕機(jī)或者client宕機(jī)
也不會丟失。 - 臨時節(jié)點(EPHEMERAL ): client宕機(jī)或者client在指定的timeout時間內(nèi)沒有給ZooKeeper集群
發(fā)消息,這樣的znode就會消失。
如果上面兩種znode具備順序性,又有以下兩種znode : - 持久順序節(jié)點(PERSISTENT_SEQUENTIAL): znode除了具備持久性znode的特點之外,znode
的名字具備順序性。 - 臨時順序節(jié)點(EPHEMERAL_SEQUENTIAL): znode除了具備臨時性znode的特點之外,zorde
的名字具備順序性。
zookeeper主要用到的是以上4種節(jié)點。 - Container節(jié)點 (3.5.3版本新增):Container容器節(jié)點,當(dāng)容器中沒有任何子節(jié)點,該容器節(jié)點
會被zk定期刪除(定時任務(wù)默認(rèn)60s 檢查一次)。 和持久節(jié)點的區(qū)別是 ZK 服務(wù)端啟動后,會有一個單
獨的線程去掃描,所有的容器節(jié)點,當(dāng)發(fā)現(xiàn)容器節(jié)點的子節(jié)點數(shù)量為 0 時,會自動刪除該節(jié)點??梢?br> 用于 leader 或者鎖的場景中。 - TTL節(jié)點: 帶過期時間節(jié)點,默認(rèn)禁用,需要在zoo.cfg中添加 extendedTypesEnabled=true 開
啟。 注意:TTL不能用于臨時節(jié)點
3、Zookeeper集群架構(gòu)
3.1 集群角色
Leader: 領(lǐng)導(dǎo)者
事務(wù)請求(寫操作)的唯一調(diào)度者和處理者,保證集群事務(wù)處理的順序性;集群內(nèi)部各個服務(wù)器的
調(diào)度者。對于create、setData、delete等有寫操作的請求,則要統(tǒng)一轉(zhuǎn)發(fā)給leader處理,leader需要
決定編號、執(zhí)行操作,這個過程稱為事務(wù)。
Follower: 跟隨者
處理客戶端非事務(wù)(讀操作)請求(可以直接響應(yīng)),轉(zhuǎn)發(fā)事務(wù)請求給Leader;參與集群Leader選舉
投票。
Observer: 觀察者
對于非事務(wù)請求可以獨立處理(讀操作),對于事務(wù)性請求會轉(zhuǎn)發(fā)給leader處理。Observer節(jié)點接收
來自leader的inform信息,更新自己的本地存儲,不參與提交和選舉投票。通常在不影響集群事務(wù)處
理能力的前提下提升集群的非事務(wù)處理能力。文章來源地址http://www.zghlxwxcb.cn/news/detail-766758.html
到了這里,關(guān)于【zookeeper特點和集群架構(gòu)】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!