Zookeeper通知機(jī)制為啥用watch?他是怎樣設(shè)計的

一 前言

Zookeeper是一個廣受大家喜愛的框架,他能搞定分布式鎖,也能實現(xiàn)服務(wù)之間更好的調(diào)用,而他是通過通知機(jī)制來實現(xiàn)的,那么他是怎么實現(xiàn)的呢?下面就來一步一步聊一聊

二 Zookper的數(shù)據(jù)結(jié)構(gòu)

image.png
  1. workers是父節(jié)點,下面的每一個子節(jié)點都保存系統(tǒng)中每一個從節(jié)點的信息
  2. tasks是父節(jié)點,下面的znode子節(jié)點保存已將創(chuàng)建并等待從節(jié)點執(zhí)行任務(wù)的信息
  3. assign是父節(jié)點,下面的znode子節(jié)點保存了分派到某個從節(jié)點的一個一個任務(wù)信息

三 znode的不同類型

  • 持久節(jié)點:會持久化到硬盤
  • 臨時節(jié)點:當(dāng)超時和主動關(guān)閉就會消失,客戶端主動刪除也會消失
  • 有序持久節(jié)點:/tasks/task-1 /tasks/task-2 可以直觀的看到任務(wù)的創(chuàng)建順序
  • 臨時有序節(jié)點:就是臨時節(jié)點+有序

四 監(jiān)視與通知的設(shè)計

根據(jù)上面的知識基礎(chǔ),我們基本了解了zookeeper的面貌,下面就是他的通知機(jī)制的設(shè)計

zookeeper的客戶端向zookeeper發(fā)送要執(zhí)行的任務(wù),發(fā)完了之后一種設(shè)計是每次客戶端都去查詢這個任務(wù)有沒有被執(zhí)行,這樣查很多遍顯然是不夠聰明的

所以zookeeper采用了通知的機(jī)制,這種機(jī)制就是在zookeeper上設(shè)置一個監(jiān)視點,當(dāng)客戶端第一次訪問的時候把監(jiān)視點watcher放到zookeeper上,然后客戶端就不用管,這時候消費者,訪問了zookeeper,處理了這個任務(wù),那么watch就登場了,他會主動向客戶端發(fā)送消息,告訴客戶端任務(wù)被處理了,然后watch自己就移除掉,這樣就不用客戶端來沒一次查詢了。

這個就是watch的意義,是一種很聰明的做法,依據(jù)他就知道為什么代用zookeeper要使用watch。

五 Zookeeper的架構(gòu)

  • 獨立模式:有一個服務(wù)器,Zookeeper狀態(tài)無法復(fù)制
  • 仲裁模式:由一組服務(wù)器組成,也就是分布式的,多個服務(wù)器投票選出一個主節(jié)點
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容