面試題
說一下的 dubbo 的工作原理?註冊中心掛了可以繼續通訊嗎?說說一次 rpc 請求的流程?
面試官心理分析
MQ、ES、Redis、Dubbo,上來先問你一些思考性的問題、原理,比如 kafka 高可用架構原理、es 分散式架構原理、redis 執行緒模型原理、Dubbo 工作原理;之後就是生產環境裡可能會碰到的一些問題,因為每種技術引入之後生產環境都可能會碰到一些問題;再來點綜合的,就是系統設計,比如讓你設計一個 MQ、設計一個搜尋引擎、設計一個快取、設計一個 rpc 框架等等。
那既然開始聊分散式系統了,自然重點先聊聊 dubbo 了,畢竟 dubbo 是目前事實上大部分公司的分散式系統的 rpc 框架標準,基於 dubbo 也可以構建一整套的微服務架構。但是需要自己大量開發。
當然去年開始 spring cloud 非常火,現在大量的公司開始轉向 spring cloud 了,spring cloud 人家畢竟是微服務架構的全家桶式的這麼一個東西。但是因為很多公司還在用 dubbo,所以 dubbo 肯定會是目前面試的重點,何況人家 dubbo 現在重啟開源社群維護了,捐獻給了 apache,未來應該也還是有一定市場和地位的。
既然聊 dubbo,那肯定是先從 dubbo 原理開始聊了,你先說說 dubbo 支撐 rpc 分散式呼叫的架構啥的,然後說說一次 rpc 請求 dubbo 是怎麼給你完成的,對吧。
面試題剖析
dubbo 工作原理
- 第一層:service 層,介面層,給服務提供者和消費者來實現的
- 第二層:config 層,配置層,主要是對 dubbo 進行各種配置的
- 第三層:proxy 層,服務代理層,無論是 consumer 還是 provider,dubbo 都會給你生成代理,代理之間進行網路通訊
- 第四層:registry 層,服務註冊層,負責服務的註冊與發現
- 第五層:cluster 層,叢集層,封裝多個服務提供者的路由以及負載均衡,將多個例項組合成一個服務
- 第六層:monitor 層,監控層,對 rpc 介面的呼叫次數和呼叫時間進行監控
- 第七層:protocal 層,遠端呼叫層,封裝 rpc 呼叫
- 第八層:exchange 層,資訊交換層,封裝請求響應模式,同步轉非同步
- 第九層:transport 層,網路傳輸層,抽象 mina 和 netty 為統一介面
- 第十層:serialize 層,資料序列化層
工作流程
- 第一步:provider 向註冊中心去註冊
- 第二步:consumer 從註冊中心訂閱服務,註冊中心會通知 consumer 註冊好的服務
- 第三步:consumer 呼叫 provider
- 第四步:consumer 和 provider 都非同步通知監控中心
註冊中心掛了可以繼續通訊嗎?
可以,因為剛開始初始化的時候,消費者會將提供者的地址等資訊拉取到本地快取,所以註冊中心掛了可以繼續通訊。
免費Java資料需要自己領取,涵蓋了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高併發分散式等教程,一共30G。
傳送門: mp.weixin.qq.com/s/JzddfH-7y…