dubbo源碼解析-zookeeper創建節點

https://www.jianshu.com/p/f42c69e4bd3e?fromApp=1

前言

在之前dubbo源碼解析-本地暴露中的前言部分提到了兩道高頻的面試題,其中一道dubbo中zookeeper做註冊中心,如果註冊中心集羣都掛掉,那發佈者和訂閱者還能通信嗎?在上週的dubbo源碼解析-zookeeper連接中已經講到,這周解析的是另一道,即服務提供者能實現失效踢出是根據什麼原理?

上週就有朋友問到我,爲什麼我的源碼解析總是偏偏要和麪試題掛上鉤呢?原因很簡單

1.dubbo源碼這麼多,試問你從哪裏做爲切入點?也就是說該從哪裏看起?所以以面試題爲切入點,你可以理解爲我是在回答"怎麼看源碼"這個問題.

2.我們研發飛機大炮並不是爲了侵略,有時候可能只是單純的想保護自己.

3.我的源碼解析雖然以面試題爲基礎,但卻不以面試爲目的.因爲面試如果問到dubbo的問題,絕大多數都是官方文檔的內容,根本就沒到需要看源碼的程度.看源碼的最終目的是爲了解決實際問題,後面我會以實際的問題爲例子,實戰講一講看源碼我究竟解決了什麼網上搜不到,必須要看源碼才能弄清楚的問題.所以現在就可以大膽在簡書關注肥朝,已免後面錯過精彩內容.

插播面試題

  • 服務提供者能實現失效踢出是什麼原理(高頻題)

  • zookeeper的有哪些節點,他們有什麼區別?講一下應用場景

直入主題

同上周的zookeeper連接一樣,這周我們講的還是一行代碼,如下圖

那麼我們打上斷點開始

下面就要開始創建節點了

現在我們雖然看完源碼了,但是還是沒法回答面試題?那麼下面就要敲黑板劃重點了

敲黑板畫重點

zookeeper中節點是有生命週期的.具體的生命週期取決於節點的類型.節點主要分爲持久節點(Persistent)臨時節點(Ephemeral),但是更詳細的話還可以加上時序節點(Sequential),創建節點中往往組合使用,因此也就是4種.

  • 持久節點
  • 持久順序節點
  • 臨時節點
  • 臨時順序節點

其實不要糾結於分爲幾種,這就和語文的斷句一樣,你斷句的方法不同,斷出來的結果也不同.那麼我們主要講講持久節點臨時節點的區別

持久節點

所謂持久節點,是指在節點創建後,就一直存在,直到有刪除操作來主動清除這個節點,也就是說不會因爲創建該節點的客戶端會話失效而消失

臨時節點

臨時節點的生命週期和客戶端會話綁定,也就是說,如果客戶端會話失效,那麼這個節點就會自動被清除掉

應用場景

zookeeper常用的應用場景我在上週已經畫了思維導圖,這裏就不重複展示了.就拿分佈式協調/通知來舉例(這個例子既是在回答第一個面試題,也是在回答第二個面試題).

在分佈式系統中,我們常常需要知道某個機器是否可用,傳統的開發中,可以通過Ping某個主機來實現,Ping得通說明對方是可用的,相反是不可用的,ZK 中我們讓所有的機其都註冊一個臨時節點,我們判斷一個機器是否可用,我們只需要判斷這個節點在ZK中是否存在就可以了,不需要直接去連接需要檢查的機器,降低系統的複雜度



作者:肥朝
鏈接:https://www.jianshu.com/p/f42c69e4bd3e
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章