dubbo框架學前原理介紹

2021-08-16 01:12:39 字數 2548 閱讀 4521

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

基本原理如圖:

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

本文只說dubbo,原理如下:

配置中心,和每個server/client之間會作乙個實時的心跳檢測(因為它們都是建立的socket長連線),比如幾秒鐘檢測一次。收集每個server提供的服務的資訊,每個client的資訊,整理出乙個服務列表,如:

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

順便說一下,hadoop裡面的中心節點跟這裡的configserver作用類似,在維護節點列表方面,不過它的相關計算都需要通過中心節節點,讓它來分配任務。

Dubbo(二十) dubbo 原理 框架設計

1 框架設計 business也就是service層,是使用者程式設計所涉及的部分。以下的rpc和remoting都是原理部分。config層就是封裝配置檔案的資訊,就是配置檔案的記憶體表示。config層下面是proxy 服務 層 它會生成客戶端的 物件,生成服務端的 物件。物件互相呼叫方法。pr...

Dubbo框架設計原理

參考文件 整體分為三層 業務邏輯層,只有一層service 面向介面程式設計,乙個介面,對應乙個實現 遠端呼叫,通過呼叫介面,來呼叫介面實現 用於完成遠端過程呼叫,分為很多層 配置層 用於封裝配置檔案中,解析的一些資訊 比如,referenceconfig serviceconfig 每乙個標籤,都...

alibaba遠端呼叫框架dubbo原理

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