遠程調用框架dubbo


alibaba有好幾個分布式框架,主要有:進行遠程調用(類似於RMI的這種遠程調用)的(dubbo、hsf),jms消息服務(napoli、notify),KV數據庫(tair)等。 這個框架/工具/產品在實現的時候,都考慮到了容災,擴展,負載均衡,於是出現一個配置中心(ConfigServer)的東西來解決這些問題。
基本原理如圖:
alibaba遠程調用框架dubbo原理 - sun - 學無止境
在我們的系統中,經常會有一些跨系統的調用,如在A系統中要調用B系統的一個服務,我們可能會使用RMI直接來進行,B系統發布一個RMI接口服務,然后A系統就來通過RMI調用這個接口,為了解決容災,擴展,負載均衡的問題,我們可能會想很多辦法,alibaba的這個辦法感覺不錯。
 
本文只說dubbo, 原理如下:
  • ConfigServer
配置中心, 和每個Server/Client之間會作一個實時的心跳檢測( 因為它們都是 建立的Socket長連接 ,比如幾秒鍾檢測一次。 收集每個Server提供的服務的信息,每個Client的信息,整理出一個服務列表,如:
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
調用服務的機器,每個Client啟動時,主動與ConfigServer建立Socket長連接,並將自己的IP等相應信息發送給ConfigServer。
Client在使用服務的時候根據服務名稱去ConfigServer中獲取服務提供者信息(這樣ConfigServer就知道某個服務是 當前 哪幾個Client在使用),Client拿到這些服務提供者信息后,與它們都建立連接,后面就可以直接調用服務了,當有多個服務提供者的時候,Client根據一定的規則來進行負載均衡,如輪詢,隨機,按權重等。
一旦Client使用的服務它對應的服務提供者有變化(服務提供者有新增,刪除的情況),ConfigServer就會把最新的服務提供者列表推送給Client,Client就會依據最新的服務提供者列表重新建立連接,新增的提供者建立連接,刪除的提供者丟棄連接
  • Server
真正提供服務的機器,每個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會很快的感知到它的存在並使用它。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM