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 連通性 註冊中心負責服務位址的註冊與查詢,相當於目錄...