zookeeper的通知機制


一、znode

Zookeeper維護一個類似文件系統的數據結構。簡單來說,有點類似windows中注冊表的結構,有名稱,有樹節點,有Key(鍵)/Value(值)對的關系,可以看做一個樹形結構的數據庫,分布在不同的機器上做名稱管理。

 

Znode維護了一個stat結構,這個stat包含數據變化的版本號、訪問控制列表變化、還有時間戳。版本號和時間戳一起,可讓Zookeeper驗證緩存和協調更新。每次znode的數據發生了變化,版本號就增加。

例如,無論何時客戶端檢索數據,它也一起檢索數據的版本號。並且當客戶端執行更新或刪除時,客戶端必須提供他正在改變的znode的版本號。如果它提供的版本號和真實的數據版本號不一致,更新將會失敗。

 二、通知機制

客戶端注冊監聽他關心的目錄節點,當目錄節點發生變化(數據改變、被刪除、子目錄節點增加刪除)時,zookeeper會通知客戶端。

client端會對某個znode建立一個watcher事件,當該znode發生變化時,zk會主動通知watch這個znode的client,然后client根據znode的變化來做出業務上的改變等。

watcher的特點:

  • 輕量級:一個callback函數。

  • 異步性:不會block正常的讀寫請求。

  • 主動推送:Watch被觸發時,由Zookeeper服務端主動將更新推送給客戶端。

  • 一次性:數據變化時,Watch只會被觸發一次。如果客戶端想得到后續更新的通知,必須要在 Watch 被觸發后重新注冊一個 Watch。

  • 僅通知:僅通知變更類型,不附帶變更后的結果。

  • 順序性:如果多個更新觸發了多個Watch,那 Watch 被觸發的順序與更新順序一致。

使用watch的注意事項:

  • 由於watcher是一次性的,所以需要自己去實現永久watch

  • 如果被watch的節點頻繁更新,會出現“丟數據”的情況

  • watcher數量過多會導致性能下降


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM