RSF 分散式 RPC 服務框架的分層設計
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 框架可以識別到
第三層:這一層中所有來自動態代理的介面呼叫都會統一轉換成 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