作者:肥朝
原文地址:https://www.jianshu.com/p/f42c69e4bd3e
友情提示:歡迎關註公眾號【芋道原始碼】。?關註後,拉你進【原始碼圈】微信群和【肥朝】搞基嗨皮。
友情提示:歡迎關註公眾號【芋道原始碼】。?關註後,拉你進【原始碼圈】微信群和【肥朝】搞基嗨皮。
友情提示:歡迎關註公眾號【芋道原始碼】。?關註後,拉你進【原始碼圈】微信群和【肥朝】搞基嗨皮。
前言
在之前dubbo原始碼解析-本地暴露中的前言部分提到了兩道高頻的面試題,其中一道 dubbo中zookeeper做註冊中心,如果註冊中心叢集都掛掉,那釋出者和訂閱者還能通訊嗎?
在上週的dubbo原始碼解析-zookeeper連線中已經講到,這周解析的是另一道,即 服務提供者能實現失效踢出是根據什麼原理?
上週就有朋友問到我,為什麼我的原始碼解析總是偏偏要和麵試題掛上鉤呢?原因很簡單
1.dubbo原始碼這麼多,試問你從哪裡做為切入點?也就是說該從哪裡看起?所以以面試題為切入點,你可以理解為我是在回答”怎麼看原始碼”這個問題.
2.我們研發飛機大炮並不是為了侵略,有時候可能只是單純的想保護自己.
3.我的原始碼解析雖然以面試題為基礎,但卻不以面試為目的.因為面試如果問到 dubbo
的問題,絕大多數都是官方檔案的內容,根本就沒到需要看原始碼的程度.看原始碼的最終目的是為瞭解決實際問題,後面我會以實際的問題為例子,實戰講一講看原始碼我究竟解決了什麼網上搜不到,必須要看原始碼才能弄清楚的問題.所以現在就可以大膽在簡書關註肥朝,已免後面錯過精彩內容.
插播面試題
-
服務提供者能實現失效踢出是什麼原理(高頻題)
-
zookeeper的有哪些節點,他們有什麼區別?講一下應用場景
直入主題
同上周的 zookeeper連線
一樣,這周我們講的還是一行程式碼,如下圖
那麼我們打上斷點開始
下麵就要開始建立節點了
現在我們雖然看完原始碼了,但是還是沒法回答面試題?那麼下麵就要敲黑板劃重點了
敲黑板畫重點
zookeeper中節點是有生命週期的.具體的生命週期取決於節點的型別.節點主要分為 持久節點(Persistent)
和 臨時節點(Ephemeral)
,但是更詳細的話還可以加上 時序節點(Sequential)
,建立節點中往往組合使用,因此也就是4種.
-
持久節點
-
持久順序節點
-
臨時節點
-
臨時順序節點
其實不要糾結於分為幾種,這就和語文的斷句一樣,你斷句的方法不同,斷出來的結果也不同.那麼我們主要講講 持久節點
和 臨時節點
的區別
持久節點
所謂持久節點,是指在節點建立後,就一直存在,直到有刪除操作來主動清除這個節點,也就是說不會因為建立該節點的客戶端會話失效而消失
臨時節點
臨時節點的生命週期和客戶端會話系結,也就是說,如果客戶端會話失效,那麼這個節點就會自動被清除掉
應用場景
zookeeper常用的應用場景我在上週已經畫了思維導圖,這裡就不重覆展示了.就拿 分散式協調/通知
來舉例(這個例子既是在回答第一個面試題,也是在回答第二個面試題).
在分散式系統中,我們常常需要知道某個機器是否可用,傳統的開發中,可以透過Ping某個主機來實現,Ping得通說明對方是可用的,相反是不可用的,ZK 中我們讓所有的機其都註冊一個臨時節點,我們判斷一個機器是否可用,我們只需要判斷這個節點在ZK中是否存在就可以了,不需要直接去連線需要檢查的機器,降低系統的複雜度
寫在最後
繼 叢集容錯
後, 服務釋出
的內容講得也差不多了.下週來和大家一起對 服務釋出
做一個總結.期待下週繼續與你相遇.鑒於本人才疏學淺,不對的地方還望斧正,也歡迎關註我的簡書,名稱為 肥朝