什麼情況? 一個工作了5年的Java程式設計師,竟然無法回答出這個問題?
“Dubbo是如何動態感知服務下線的”?
好吧,對於這個問題,看看普通人和高手的回答!
普通人:
嗯。。。。。。。。。。。。
高手:
好的,面試官,關於這個問題,我從幾個方面來回答。
首先,Dubbo預設採用Zookeeper實現服務的註冊與服務發現,簡單來說啊,就是多個Dubbo服務之間的通訊地址,是使用Zookeeper來維護的。
在Zookeeper上,會採用樹形結構的方式來維護Dubbo服務提供端的協議地址
Dubbo服務消費端會從Zookeeper Server上去查詢目標服務的地址列表,從而完成服務的註冊和消費的功能。
Zookeeper會通過心跳檢測機制,來判斷Dubbo服務提供端的執行狀態,來決定是否應該把這個服務從地址列表剔除。
當Dubbo服務提供方出現故障導致Zookeeper剔除了這個服務的地址,
那麼Dubbo服務消費端需要感知到地址的變化,從而避免後續的請求傳送到故障節點,導致請求失敗。
也就是說Dubbo要提供服務下線的動態感知能力。
這個能力是通過Zookeeper裡面提供的Watch機制來實現的
簡單來說呢,Dubbo服務消費端會使用Zookeeper裡面的Watch來針對Zookeeper Server端的/providers
節點註冊監聽,
一旦這個節點下的子節點發生變化,Zookeeper Server就會傳送一個事件通知Dubbo Client端.
Dubbo Client端收到事件以後,就會把本地快取的這個服務地址刪除,這樣後續就不會把請求傳送到失敗的節點上,完成服務下線感知。
以上就是我對這個問題的理解!
總結:
Dubbo是目前非常主流的開源RPC框架,在很多的企業都有使用。
理解這個RPC底層的工作原理很有必要,它能幫助開發者提高開發問題的解決效率。
還是想多說一句,在Java這個崗位上,如果想走得更遠,一定要花苦功夫。
本期的普通人VS高手面試系列就到這裡結束了。
有任何不懂的技術面試題,歡迎隨時私信我
版權宣告:本部落格所有文章除特別宣告外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自Mic帶你學架構
!
如果本篇文章對您有幫助,還請幫忙點個關注和贊,您的堅持是我不斷創作的動力。歡迎關注同名微信公眾號獲取更多技術乾貨!