分布式服務框架dubbo原理解析

2021-07-10 10:02:58 字數 2708 閱讀 4643

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會很快的感知到它的存在並使用它。

分布式服務框架dubbo原理解析 轉

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

初識分布式服務框架dubbo

dubbo是乙個分布式服務框架,以及soa治理方案。其功能主要包括 高效能nio通訊及多協議整合,服務動態定址與路由,軟負載均衡與容錯,依賴分析與降級等。dubbo底層是tcp協議的netty nio spring boot底層是http協議 dubbo的七大標籤 config 配置層,對外配置介面...

Dubbo (開源分布式服務框架)

provider 暴露服務方稱之為 服務提供者 consumer 呼叫遠端服務方稱之為 服務消費者 registry 服務註冊與發現的中心目錄服務稱之為 服務註冊中心 monitor 統計服務的呼叫次數和呼叫時間的日誌服務稱之為 服務監控中心 1 連通性 註冊中心負責服務位址的註冊與查詢,相當於目錄...