alibaba遠端呼叫框架dubbo原理

2021-06-23 10:01:59 字數 2620 閱讀 5893

alibaba有好幾個分布式框架,主要有:進行遠端呼叫(類似於rmi的這種遠端呼叫)的(dubbo、hsf),jms訊息服務(napoli、notify),kv資料庫(tair)等。

這個框架/工具/產品在實現的時候,都考慮到了容災,擴充套件,負載均衡,於是出現乙個配置中心(configserver)的東西來解決這些問題。

基本原理如圖:

在我們的系統中,經常會有一些跨系統的呼叫,如在a系統中要呼叫b系統的乙個服務,我們可能會使用rmi直接來進行,b系統發布乙個rmi介面服務,然後a系統就來通過rmi呼叫這個介面,為了解決容災,擴充套件,負載均衡的問題,我們可能會想很多辦法,alibaba的這個辦法感覺不錯。

本文只說dubbo,

原理如下:

配置中心,

和每個server/client之間會作乙個實時的心跳檢測(

因為它們都是

建立的socket長連線

) ,比如幾秒鐘檢測一次。

servicenameserveraddresslistclientaddresslist

userservice

192.168.0.1,192.168.0.2,192.168.0.3,192.168.0.4 

172.16.0.1,172.16.0.2

productservice

192.168.0.3,192.168.0.4,192.168.0.5,192.168.0.6

172.16.0.2,172.16.0.3

orderservice

192.168.0.10,192.168.0.12,192.168.0.5,192.168.0.6 

172.16.0.3,172.16.0.4

當某個server不可用,那麼就

更新受影響的服務對應的

serveraddresslist,即把這個server從serveraddresslist中踢出去

(從位址列表中刪除)

,同時將

推送serveraddresslist

給這些受影響的服務的

clientaddresslist

裡面的所有client

。如:192.168.0.3掛了,那麼userservice和productservice的

serveraddresslist都要把

192.168.0.3刪除掉,同時把新的列表告訴對應的client 

172.16.0.1,172.16.0.2,

172.16.0.3;

當某個client掛了,那麼

更新受影響的服務對應的clientaddresslist

configserver根據服務列表,就能提供乙個web管理介面,來檢視管理服務的提供者和使用者。

新加乙個server時,由於它會主動與configserver取得聯絡,而configserver又會將這個資訊主動傳送給client,所以

新加乙個server時,只需要啟動server,然後幾秒鐘內,client就會使用上它提供的服務

呼叫服務的機器,每個client啟動時,主動與configserver建立socket長連線,並將自己的ip等相應資訊傳送給configserver。

client在使用服務的時候根據服務名稱去configserver中獲取服務提供者資訊(這樣configserver就知道某個服務是

當前哪幾個client在使用),client拿到這些服務提供者資訊後,與它們都建立連線,後面就可以直接呼叫服務了,當有多個服務提供者的時候,client根據一定的規則來進行負載均衡,如輪詢,隨機,按權重等。

一旦client使用的服務它對應的服務提供者有變化(服務提供者有新增,刪除的情況),configserver就會把最新的服務提供者列表推送給client,client就會依據最新的服務提供者列表重新建立連線,新增的提供者建立連線,刪除的提供者丟棄連線

真正提供服務的機器,每個server啟動

時,主動與configserver建立scoket長連線,並將自己的ip,提供的服務名稱,埠等資訊直接傳送給configserver,configserver就會收集到每個server提供的服務的資訊。

優點:

1,只要在client和server啟動的時候,configserver是好的,服務就可呼叫了,如果後面

configserver掛了,那只影響

configserver掛了以後服務提供者有變化,而client還無法感知這一變化。

2,client每次呼叫服務是不經過configserver的,client只是與它建立聯絡,從它那裡獲取提供服務者列表而已

3,呼叫服務-

負載均衡:

client呼叫服務時,可以根據規則在多個服務提供者之間輪流呼叫服務。 4,

服務提供者-

容災:某乙個server掛了,client依然是可以正確的呼叫服務的,當前提是這個服務有至少2個服務提供者,client能很快的感知到服務提供者的變化,並作出相應反應。

5,服務提供者-擴充套件:新增乙個服務提供者很容易,而且client會很快的感知到它的存在並使用它。

alibaba遠端呼叫框架dubbo原理

alibaba有好幾個分布式框架,主要有 進行遠端呼叫 類似於rmi的這種遠端呼叫 的 dubbo hsf jms訊息服務 napoli notify kv資料庫 tair 等。這個框架 工具 產品在實現的時候,都考慮到了容災,擴充套件,負載均衡,於是出現乙個配置中心 configserver 的東...

遠端呼叫框架dubbo

alibaba有好幾個分布式框架,主要有 進行遠端呼叫 類似於rmi的這種遠端呼叫 的 dubbo hsf jms訊息服務 napoli notify kv資料庫 tair 等。這個框架 工具 產品在實現的時候,都考慮到了容災,擴充套件,負載均衡,於是出現乙個配置中心 configserver 的東...

遠端呼叫框架RPC

rpc就是 遠端呼叫框架 remote procedure call 遠端呼叫意思就是 被呼叫方法的具體實現不在程式執行本地,而是在別的某個遠端地方。比如 a client 呼叫 b server 提供的remoteadd方法 首先a與b之間建立乙個tcp連線 然後a把需要呼叫的方法名 這裡是rem...