alibaba有好幾個分布式架構,主要有:進行遠端調用(類似于RMI的這種遠端調用)的(dubbo、hsf),jms消息服務(napoli、notify),KV資料庫(tair)等。這個架構/工具/産品在實作的時候,都考慮到了容災,擴充,負載均衡,于是出現一個配置中心(ConfigServer)的東西來解決這些問題。
基本原理如圖:
在我們的系統中,經常會有一些跨系統的調用,如在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會很快的感覺到它的存在并使用它。
順便說一下,hadoop裡面的中心節點跟這裡的configServer作用類似,在維護節點清單方面,不過它的相關計算都需要通過中心節節點,讓它來配置設定任務。
本文轉自左正部落格園部落格,原文連結:http://www.cnblogs.com/soundcode/p/6363936.html,如需轉載請自行聯系原作者