新聞中心
什么是ZooKeeper數(shù)據(jù)模型?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
麻章網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),麻章網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為麻章超過千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營銷網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的麻章做網(wǎng)站的公司定做!
1、數(shù)據(jù)結(jié)構(gòu)圖
圖中的每個節(jié)點稱為一個 Znode。 每個 Znode由 3部分組成:
(1)stat:此為狀態(tài)信息,描述該 Znode的版本,權(quán)限等信息
(2)data:與該 Znode關(guān)聯(lián)的數(shù)據(jù)
(3)children:該 Znode下的子節(jié)點
2、節(jié)點類型
Znode有兩種,分別為臨時節(jié)點和永久節(jié)點。節(jié)點的類型在創(chuàng)建時即被確定,并且不能改變。臨時節(jié)點:該節(jié)點的生命周期依賴于創(chuàng)建它們的會話。一旦會話結(jié)束,臨時節(jié)點將被自動刪除,當(dāng)然可以也可以手動刪除。臨時節(jié)點不允許擁有子節(jié)點。永久節(jié)點:該節(jié)點的生命周期不依賴于會話,并且只有在客戶端顯示執(zhí)行刪除操作的時候,他們才能被刪除。
Znode還有一個序列化的特性,如果創(chuàng)建的時候指定的話,該 Znode的名字后面會自動追加一個不斷增加的序列號。序列號對于此節(jié)點的父節(jié)點來說是唯一的,這樣便會記錄每個子節(jié)點創(chuàng)建的先后順序。它的格式為“%10d”(10位數(shù)字,沒有數(shù)值的數(shù)位用 0補充,例如“0000000001”)。
3、節(jié)點屬性
每個 znode都包含了一系列的屬性,通過命令 get,可以獲得節(jié)點的屬性。
dataVersion:數(shù)據(jù)版本號,每次對節(jié)點進(jìn)行 set操作,dataVersion的值都會增加 1(即使設(shè)置的是相同的數(shù)據(jù)),可有效避免了數(shù)據(jù)更新時出現(xiàn)的先后順序問題。
cversion:子節(jié)點的版本號。當(dāng) znode的子節(jié)點有變化時,cversion的值就會增加 1。
cZxid:Znode創(chuàng)建的事務(wù) id。
mZxid:Znode被修改的事務(wù) id,即每次對 znode的修改都會更新 mZxid。對于 zk來說,每次的變化都會產(chǎn)生一個唯一的事務(wù) id,zxid(ZooKeeper Transaction Id)。通過 zxid,可以確定更新操作的先后順序。例如,如果 zxid1小于 zxid2,說明 zxid1操作先于 zxid2發(fā)生,zxid對于整個 zk都是唯一的, 即使操作的是不同的 znode。
ctime:節(jié)點創(chuàng)建時的時間戳。
mtime:節(jié)點最新一次更新發(fā)生時的時間戳。
ephemeralOwner:如果該節(jié)點為臨時節(jié)點,ephemeralOwner值表示與該節(jié)點。綁定的 session id。如果不是,ephemeralOwner值為 0。
在 client和 server通信之前,首先需要建立連接,該連接稱為 session。連接建立后,如果發(fā)生連接超時、授權(quán)失敗,或者顯式關(guān)閉連接,連接便處于 CLOSED狀態(tài),此時 session結(jié)束。
4、ZooKeeper Watcher(監(jiān)聽機制)
ZooKeeper提供了分布式數(shù)據(jù)發(fā)布/訂閱功能,一個典型的發(fā)布/訂閱模型系統(tǒng)定義了一種一對多的訂閱關(guān)系,能讓多個訂閱者同時監(jiān)聽某一個主題對象,當(dāng)這個主題對象自身狀態(tài)變化時,會通知所有訂閱者,使他們能夠做出相應(yīng)的處理。 ZooKeeper中,引入了 Watcher機制來實現(xiàn)這種分布式的通知功能。ZooKeeper允許客戶端向服務(wù)端注冊一個 Watcher監(jiān)聽,當(dāng)服務(wù)端的一些事件觸發(fā)了這個 Watcher,那么就會向指定客戶端發(fā)送一個事件通知來實現(xiàn)分布式的通知功能。觸發(fā)事件種類很多,如:節(jié)點創(chuàng)建,節(jié)點刪除,節(jié)點改變,子節(jié)點改變等。總的來說可以概括 Watcher為以下三個過程:客戶端向服務(wù)端注冊 Watcher、服務(wù)端事件發(fā)生觸發(fā) Watcher、客戶端回調(diào) Watcher得到觸發(fā)事件情況
(1)Watch機制特點
一次性觸發(fā):事件發(fā)生觸發(fā)監(jiān)聽,一個 watcher event就會被發(fā)送到設(shè)置監(jiān)聽的客戶端, 這種效果是一次性的,后續(xù)再次發(fā)生同樣的事件,不會再次觸發(fā)。
事件封裝:ZooKeeper使用 WatchedEvent對象來封裝服務(wù)端事件并傳遞。WatchedEvent包含了每一個事件的三個基本屬性:通知狀態(tài)(keeperState),事件類型(EventType)和節(jié)點路徑(path)。
event異步發(fā)送:watcher的通知事件從服務(wù)端發(fā)送到客戶端是異步的。先注冊再觸發(fā) Zookeeper中的 watch機制,必須客戶端先去服務(wù)端注冊監(jiān)聽,這樣事件發(fā)送才會觸發(fā)監(jiān)聽,通知給客戶端。
(2)通知狀態(tài)和事件類型
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。
標(biāo)題名稱:什么是ZooKeeper數(shù)據(jù)模型
本文網(wǎng)址:http://www.ef60e0e.cn/article/pjdjpj.html