【面試普通人VS高手系列】Dubbo是如何動態感知服務下線的?

跟著Mic學架構 發表於 2022-05-16
面試 Dubbo

什麼情況? 一個工作了5年的Java程式設計師,竟然無法回答出這個問題?

“Dubbo是如何動態感知服務下線的”?

好吧,對於這個問題,看看普通人和高手的回答!

普通人:

嗯。。。。。。。。。。。。

高手:

好的,面試官,關於這個問題,我從幾個方面來回答。

首先,Dubbo預設採用Zookeeper實現服務的註冊與服務發現,簡單來說啊,就是多個Dubbo服務之間的通訊地址,是使用Zookeeper來維護的。

在Zookeeper上,會採用樹形結構的方式來維護Dubbo服務提供端的協議地址

image-20220418135415703

Dubbo服務消費端會從Zookeeper Server上去查詢目標服務的地址列表,從而完成服務的註冊和消費的功能。

Zookeeper會通過心跳檢測機制,來判斷Dubbo服務提供端的執行狀態,來決定是否應該把這個服務從地址列表剔除。

image-20220418135932445

當Dubbo服務提供方出現故障導致Zookeeper剔除了這個服務的地址,

那麼Dubbo服務消費端需要感知到地址的變化,從而避免後續的請求傳送到故障節點,導致請求失敗。

也就是說Dubbo要提供服務下線的動態感知能力。

這個能力是通過Zookeeper裡面提供的Watch機制來實現的

image-20220418141213603

簡單來說呢,Dubbo服務消費端會使用Zookeeper裡面的Watch來針對Zookeeper Server端的/providers節點註冊監聽,

一旦這個節點下的子節點發生變化,Zookeeper Server就會傳送一個事件通知Dubbo Client端.

Dubbo Client端收到事件以後,就會把本地快取的這個服務地址刪除,這樣後續就不會把請求傳送到失敗的節點上,完成服務下線感知。

以上就是我對這個問題的理解!

總結:

Dubbo是目前非常主流的開源RPC框架,在很多的企業都有使用。

理解這個RPC底層的工作原理很有必要,它能幫助開發者提高開發問題的解決效率。

還是想多說一句,在Java這個崗位上,如果想走得更遠,一定要花苦功夫。

本期的普通人VS高手面試系列就到這裡結束了。

有任何不懂的技術面試題,歡迎隨時私信我

file

版權宣告:本部落格所有文章除特別宣告外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Mic帶你學架構
如果本篇文章對您有幫助,還請幫忙點個關注和贊,您的堅持是我不斷創作的動力。歡迎關注同名微信公眾號獲取更多技術乾貨!