螞蟻金服開源sofa-rpc框架源碼走讀記錄——Provider

螞蟻金服開源sofa-rpc框架源碼走讀記錄——Provider

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。

手動碼字不易,請大家尊重勞動成果,謝謝

作者:http://blog.csdn.net/wang_wbq

最近兩週在學習Hadoop源碼時研究到了rpc框架,然後在網上發現了螞蟻金服近期開源的sofa-rpc框架。這兩天正好有點空閒,就走讀了一遍源碼進行學習,並寫篇博客來記錄下。

本文不介紹模塊的使用方法,在官方github上已經有了相關示例,不過貌似不那麼全。還是需要閱讀源碼來了更深入瞭解使用方法。

上篇博客介紹了Consumer部分的初始化過程,這篇博客將介紹Provider部分的初始化過程。
相比於Consumer部分,Provider的結構就簡單多了,這裏說的簡單僅僅指rpc適配的部分,構建一個高性能高併發的服務端還是有很對細節需要去考慮的。感覺有部分功能還埋藏在sofa-bolt框架裏,之後還要深入bolt源碼來探索一番。

Provider模塊的主要類結構和初始化過程

類結構

這個圖是我在走讀Provider啓動過程時畫的圖,大致表現了Provider端的主要的一些類的加載啓動過程。

sofa-rpc在代碼中使用了類似Java中ServiceLoader的機制來進行擴展類加載,並預留了很多的擴展點來方便用戶對框架進行擴展。圖中黃色的方框就是其中的一些擴展類加載器,可以說是差不多所有模塊都可以替換了。

sofa-rpc使用了類似Builder模式的方法,用戶只用創建並填充指定的一些Config類,如ProviderConfigRegistryConfig等類,然後最後調用其指定方法即可實現其提供的功能,感覺這種方式確實很實用。

這裏寫圖片描述

Provider模塊的啓動

既然是rpc框架,自然最終是要啓動一個連接來向外提供一個服務的:

providerConfig.export();

在初始化過程中大致進行了以下動作,默認流程:
1、使用擴展工廠加載BoltProviderBootStrap類(圖中①)並調用其export方法(ProviderConfig.class)
2、做一些基本的檢查(DefaultProviderBootstrap.class)
3、創建代理調用對象ProviderProxyInvoker (圖中②),並在構造函數裏使用擴展工廠加載FilterChain *(圖中③)(DefaultProviderBootstrap.class)
4、初始化註冊中心(圖中④)
5、使用擴展工廠加載Server (圖中⑤)
6、將3中創建的代理調用對象註冊到Server裏(圖中⑥)
7、啓動Server
8、向註冊中心註冊服務提供(圖中⑦)

Consumer模塊的消息發送流程

一個消息的調用會經過幾個主要的模塊
1、bolt模塊接收到消息會調用BoltServerProcessor類進行處理
2、BoltServerProcessor調用BoltServer的findInvoker來獲取實際的服務類調用者
3、BoltServer返回對應的ProviderProxyInvoker
4、BoltServerProcessor獲取了Invoker,調用其invoke方法獲取結果
5、ProviderProxyInvoker將調用委託給FilterChain
6、FilterChain最後一個Filter爲ProviderInvoker,它會通過反射來將接口方法調用在providerConfig.getRef()所存儲的類上

由於服務提供者需要面臨高併發的場景,因此在服務端沒有看到很多的邏輯,因爲服務端重要的還是爲儘快爲客戶端提供服務返回。

到這裏sofa-rpc的簡單介紹已經做完了,這兩篇文章沒有深入分析細節,只是將整體結構進行介紹,希望能給讀者一些引導,隨着知識面的增大,每個人對細節的關注點都不一樣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章