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
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。