Dubbo框架————整體架構

愛我的程式人生發表於2018-08-16

 

上圖中,左邊是serviceConsumer使用的介面和類;右邊是serviceProvider使用的介面和類;中間是雙方均要使用的介面和類。總體上將整個架構分成三大層,分別是Business層、RPC層、Remoting層。其中:

Business層是應用層的介面和實現類,完成應用層的業務邏輯。對於消費端應用層則是利用config配置層的功能在實現類中呼叫Proxy層實現的代理類(即為遠端服務的引用);對於服務端應用層則是實現業務邏輯然後通過Proxy層的Invoker封裝之後,利用config配置層的功能將服務暴露給消費端使用。

RPC層是Dubbo框架的核心,提供透明化的服務釋出和服務引用,裡面可以細分為如下六層:

1)config配置層:使用這一層提供的@註解,xml配置等方法來暴露服務和為服務消費端生成遠端服務代理類;主要是為了方便應用層的使用,提供了與Spring框架的融合功能。

2)proxy服務代理層:服務介面透明代理,可以像調本地服務一樣調遠端服務。在服務暴露的過程中,為服務實現類建立Invoker的代理,在代理類中主要是根據接受到的類名、方法名、引數值等資訊通過反射的方式完成對服務實現類的呼叫。在服務引用過程中,為遠端服務引用Invoker物件(通過從註冊中心獲取服務地址並建立的Invoker物件)建立代理,在應用層呼叫該代理時,由代理類負責呼叫服務引用Invoker物件。

3)registry註冊中心層:完成服務地址的註冊與發現。目前支援的註冊協議有dubbo、multicast、zookeeper、redis。在服務暴露過程中,將服務地址釋出到註冊中心上。在服務引用過程中,對註冊中心進行監聽與訂閱,發現註冊中心上面的所有服務地址,並且在服務地址發生變動時能及時地通知服務消費端更新服務引用Invoker。

4)cluster層:主要是將相同的服務封裝成叢集,在服務呼叫的過程中完成對服務的路由、負載均衡等邏輯處理,最終選擇合適的服務提供者。該層主要是消費端使用,在服務引用過程中,將相同的服務封裝成叢集物件,當呼叫服務時,該叢集物件負責進行路由選擇和負載均衡策略邏輯處理,從服務引用Invoker列表中選擇一個Invoker物件發起遠端服務呼叫。

5)monitor監控層:RPC呼叫次數和呼叫時間監控,傳送資料到monitor監控中心。主要是在服務暴露和服務引用時,為Invoker新增過濾器鏈時將MonitorFilter過濾器放入過濾器鏈中,從而將服務名稱、服務方法、呼叫耗時、併發數等資訊記錄下來,其中服務消費端記錄服務提供者的資訊,服務提供端記錄服務消費者的資訊。

6)protocol遠端呼叫層:封裝RPC呼叫,抽象各種協議,目前支援的協議有dubbo、mock、injvm、rmi、hessian、thrift、memcached、redis、rest。在該層實現各種協議,主要是實現各協議建立服務容器、接受請求並將請求向上層傳遞以及傳送響應訊息等通訊層面的業務邏輯。目前Dubbo框架為擴充套件協議的實現提供了介面及抽象類。

Remoting層主要實現dubbo協議,若使用hessian或其他協議,就不會用到這一層;具體細分為三層:

1)exchange資訊交換層:封裝請求響應模式,同步轉非同步,封裝Request-Response語義。

2)transport網路傳輸層:對Mina,Netty,Grizzly的抽象,socket TCP,UDP程式設計。

3)serialize資料序列化層,將請求訊息或響應訊息進行序列化之後傳送到通訊線路上,對收到的訊息進行反序列化之後提供給上層進行處理。

想了解可以私信我哦!

1 SpringBoot+ 高併發訊息處理 EDM?專案 實戰

2 SpringBoot ELK?分散式 資料分析

3 Netty?高 併發 UTS?專案實戰

4 SpringCloud?微服務+NoSQL+ 負載均衡平臺設計

相關文章