歡迎光臨
每天分享高質量文章

Dubbo 原始碼解析 —— Zookeeper 建立節點

作者:肥朝
原文地址:https://www.jianshu.com/p/f42c69e4bd3e

友情提示:歡迎關註公眾號【芋道原始碼】。?關註後,拉你進【原始碼圈】微信群和【肥朝】搞基嗨皮。

友情提示:歡迎關註公眾號【芋道原始碼】。?關註後,拉你進【原始碼圈】微信群和【肥朝】搞基嗨皮。

友情提示:歡迎關註公眾號【芋道原始碼】。?關註後,拉你進【原始碼圈】微信群和【肥朝】搞基嗨皮。

前言

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

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

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

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

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

插播面試題

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

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

直入主題

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

那麼我們打上斷點開始

下麵就要開始建立節點了

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

敲黑板畫重點

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

  • 持久節點

  • 持久順序節點

  • 臨時節點

  • 臨時順序節點

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

持久節點

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

臨時節點

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

應用場景

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

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

寫在最後

叢集容錯後, 服務釋出的內容講得也差不多了.下週來和大家一起對 服務釋出做一個總結.期待下週繼續與你相遇.鑒於本人才疏學淺,不對的地方還望斧正,也歡迎關註我的簡書,名稱為 肥朝

贊(0)

分享創造快樂