alibaba有好幾個分布式框架,主要有:進行遠端呼叫(類似於rmi的這種遠端呼叫)的(dubbo、hsf),jms訊息服務(napoli、notify),kv資料庫(tair)等。這個框架/工具/產品在實現的時候,都考慮到了容災,擴充套件,負載均衡,於是出現乙個配置中心(configserver)的東西來解決這些問題。
基本原理如圖:
在我們的系統中,經常會有一些跨系統的呼叫,如在a系統中要呼叫b系統的乙個服務,我們可能會使用rmi直接來進行,b系統發布乙個rmi介面服務,然後a系統就來通過rmi呼叫這個介面,為了解決容災,擴充套件,負載均衡的問題,我們可能會想很多辦法,alibaba的這個辦法感覺不錯。
配置中心,和每個server/client之間會作乙個實時的心跳檢測(
因為它們都是
建立的socket長連線
),比如幾秒鐘檢測一次。
servicename
serveraddresslist
clientaddresslist
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...