一個工作了7年的粉絲,遇到了一個Zookeeper的問題。 因為接觸過Zookeeper這個技術,不知道該怎麼回答。 我說一個工作了7年的程式員,沒有接觸過主流技術,這不正常。 於是我問了他工資以後,我理解了! 好吧,關於“Zookeeper中Watch機制的實現原理”,看看普通人和高手的回答。 普 ...
一個工作了7年的粉絲,遇到了一個Zookeeper的問題。
因為接觸過Zookeeper這個技術,不知道該怎麼回答。
我說一個工作了7年的程式員,沒有接觸過主流技術,這不正常。
於是我問了他工資以後,我理解了!
好吧,關於“Zookeeper中Watch機制的實現原理”,看看普通人和高手的回答。
普通人:
嗯。。。。。。。。。。。。。。。
高手:
好的,這個問題我打算從兩個方面來回答。
Zookeeper是一個分散式協調組件,為分散式架構下的多個應用組件提供了順序訪問控制能力。
它的數據存儲採用了類似於文件系統的樹形結構,以節點的方式來管理存儲在Zookeeper上的數據。
Zookeeper提供了一個Watch機制,可以讓客戶端感知到Zookeeper Server上存儲的數據變化,這樣一種機制可以讓Zookeeper實現很多的場景,比如配置中心、註冊中心等。
Watch機制採用了Push的方式來實現,也就是說客戶端和Zookeeper Server會建立一個長連接,一旦監聽的指定節點發生了變化,就會通過這個長連接把變化的事件推送給客戶端。
Watch的具體流程分為幾個部分:
-
首先,是客戶端通過指定命令比如
exists
、get
,對特定路徑增加watch -
然後服務端收到請求以後,用HashMap保存這個客戶端會話以及對應關註的節點路徑,同時客戶端也會使用HashMap
存儲指定節點和事件回調函數的對應關係。
-
當服務端指定被watch的節點發生變化後,就會找到這個節點對應的會話,把變化的事件和節點信息發給這個客戶端。
-
客戶端收到請求以後,從ZkWatcherManager裡面對應的回調方法進行調用,完成事件變更的通知。
以上就是我對這個問題的理解!
總結
這個面試題呢,我認為考察的價值也很大,其實對於服務端的數據變更通知,
無非就是pull和push兩種方案,而這道題裡面涉及到的技術點就是push的實現。
在業務開發裡面,也可能會涉及到類似的場景,比如消息通知,掃碼登錄等。
如果你瞭解這些思想,那在解決這類問題的時候,會變得更加從容。
本期的普通人VS高手面試系列就到這裡結束了。
需要高手面試文檔(附贈阿裡內部十萬字面試文檔)或者有不懂的技術面試題想咨詢的小伙伴可以私信或者評論區留言。
版權聲明:本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自
Mic帶你學架構
!
如果本篇文章對您有幫助,還請幫忙點個關註和贊,您的堅持是我不斷創作的動力。歡迎關註「跟著Mic學架構」公眾號公眾號獲取更多技術乾貨!