1. 程式人生 > 實用技巧 >RSF 分散式 RPC 服務框架的分層設計

RSF 分散式 RPC 服務框架的分層設計

>>> hot3.png

RSF 是個什麼東西?

一個高可用、高效能、輕量級的分散式服務框架。支援容災、負載均衡、叢集。一個典型的應用場景是,將同一個服務部署在多個Server上提供 request、response 訊息通知。使用RSF可以點對點呼叫,也可以分散式呼叫。部署方式上:可以搭配註冊中心,也可以獨立使用。

淵源

RSF 的核心思想參考了淘寶HSF、Dubbo 等優秀框架。功能上大體相似,但是實現邏輯完全不同。因此沒有什麼歷史包袱。總的來說對比淘寶HSF少了歷史包袱,相比Dubbo更加輕量化。而且還支援了虛擬機器房,對於多機房部署的產品可以省下大量頻寬成本,同時也降低了遠端呼叫時間。

RSF雖然在功能上與兩位前輩出入不大,使用RSF最直觀的感受就是簡單方便,配置少、依賴少,功能強大。

特點

RSF 的最大特點就是在強大的功能支援下,依然可以保持:最簡單、最輕量。我們先輕描淡寫的說一下RSF 的特點。

簡單容易(三個一):1 行程式碼釋出服務、1 行程式碼訂閱服務、1 行程式碼使用服務

體積輕薄:RSF 是基於 Hasor 構建,此外還依賴了netty 和groovy。因此包含 RSF 在內引入的JAR包總數只有 5 個,其中 RSF 只有大約 700KB 的體積。

工作原理

RSF 是專門為叢集、高可用系統進行設計的分散式 RPC 服務框架。服務提供者可以是一個叢集,服務的消費者也可以是一個叢集,兩者混合在一個叢集裡也是ok的。同時為了增強融災 RSF 的註冊中心也是支援叢集的。

所以基於 RSF 構建的服務系統不會存在任何單點問題。

框架分層

RSF 的架構設計上遵循了自頂而下明確的分層設計,每一層都有專注的工作職責。大體分為 9 個層次。他們如下所示:,你也可以理解這是 RSF 的架構設計。

第一層:是業務系統中的服務,一個服務的狀態可以是提供者(Provider)、也可以是消費者(Customer),或者兩者共存。總之在這一層,出現的不是服務介面,就是服務的介面的實現

第二層:是一個應用程式到框架的接入層。分為提供者(Provider)、消費者(Customer)兩個部分。

對於提供者(Provider)來說這一層就是框架的一個互動 API ,負責將服務介面資訊提取出來讓 RSF 框架可以識別到

。而對於消費者(Customer)來說,這一層的目的就是將服務介面進行動態代理。通過代理攔截所有遠端方法呼叫,這一點類似於AOP。

第三層:這一層中所有來自動態代理的介面呼叫都會統一轉換成 RsfRequest ,同時方法的返回值也會封裝成為 RsfResponse。可以說這一層是專門為擴充套件性設計準備的,開發者在這一層中可以圍繞著 RsfFilter、RsfRequest、RsfResponse 介面進行擴充套件。

第四層:這是一個典型的職責鏈,職責鏈的開端是承接呼叫請求,末端承接著方法的呼叫。在整個職責鏈中開發者幾乎可以為所欲為。你可以中斷整個 RPC,自己 mock 資料。也可以偷樑換柱呼叫其它服務然後返回結果。

第五層:這一層是也是消費者(Customer)專有的設計,這一層是一個比較重要的地方,它負責維護管理並且提供服務的IP地址。舉個例子:我們有 1 個服務,這個服務擁有 10 個服務提供者。那麼這 10 個服務提供者的服務地址和埠資訊都是在這一層維護的。當執行遠端呼叫的時候,這一層會提供IP地址出來。

提供IP地址這個操作,有必要稍微展開說一下。向 QoS流控,跨機房呼叫、服務路由。這些非常重要的功能都是由這一層來提供支援。這一層用一句話來表示:它就是地址管理器

第六層:這一層用“排程器”來總結說明是最貼切的。

對於提供者(Provider)來說,在這一層基於佇列提供了一個 Server 的保護屏障。這個保護屏障可以保證當遇到 Client 瘋狂的呼叫請求時,可以合理的進行回絕以保證 Server 自己不會被沖垮。對於消費者(Customer)來說,在這一層提供了請求管理器,並且提供了一個最大請求併發的控制器。

這一層可以說是 RSF 的中樞神經,因為排程器就是 RSF 執行緒模型的最終實現。有關執行緒模型在後面會有專門文章介紹一下(https://my.oschina.net/u/1166271/blog/779361)。

第七層:是提供序列化功能,開發者想自定義序列化規則。也是由這一層提供的支援。預設 RSF 採用 Hessian 4.0.7 作為預設序列化庫。同時框架內建了 Java、Json 兩個策略可以選用。

如果你請求時候使用的 Hessian,資料響應想要用 JSON 。也是可以被支援的。

第八層:這一層是最底層,負責網路資料的傳輸。因此,在這一層 RSF 內建了一套比較完整的 RSF 資料傳輸協議。文章在這裡:https://my.oschina.net/u/1166271/blog/342091

第九層:就是計算機的 Socket 網路通訊了。如果你想,這一層可以是 TCP 也可以是 UDP。不過 RSF 採用了 TCP 長連結。

轉載於:https://my.oschina.net/ta8210/blog/777571