你好,dubbo,初次見面,我想和你交個朋友。html
先給出一套官方的說法:Apache Dubbo是一款高性能、輕量級基於Java的RPC開源框架。git
文檔地址: http://dubbo.apache.org/zh-cn...
文檔簡短形象的對單一應用架構、垂直應用架構、分佈式服務架構、流動計算架構作了一個對比,能夠很明白的看出這四個架構所適用的場景,由於業務需求愈來愈複雜,纔會有這一系列的演變。github
RPC英文全名爲Remote Procedure Call,也叫遠程過程調用,其實就是一個計算機通訊協議,它是一種經過網絡從遠程計算機程序上請求服務,而不須要了解底層網絡技術的協議。計算機通訊協議有不少種,對於開發來講,不少熟悉的是HTTP協議,我這裏就作個簡單的比較,HTTP協議是屬於應用層的,而RPC跨越了傳輸層和應用層。HTTP自己的三次握手協議,每發送一次請求,都會有一次創建鏈接的過程,就會帶來必定的延遲,而且HTTP自己的報文龐大,而RPC能夠按需鏈接,調用結束後就斷掉,也能夠是長連接,多個遠程過程調用共享同一個連接,能夠看出來RPC的效率要高於HTTP,可是相對於開發簡單快速的HTTP服務,RPC服務就會顯得複雜一些。算法
回到原先的話題,繼續來聊聊dubbo。關於dubbo 的特色分別有連通性、健壯性、伸縮性、以及向將來架構的升級性。特色的詳細介紹也能夠參考上述連接的官方文檔。官方文檔擁有的內容我在這就不一一進行闡述了。spring
由於接下來須要對dubbo各個模塊的源碼以及原理進行解析,因此介紹一下dubbo的源碼庫,dubbo框架已經交由Apache基金會進行孵化,被掛在github開源。apache
github地址: https://github.com/apache/inc...
而後講一下dubbo的版本策略:兩個大版本並行發展,2.5.x是穩定版本,2.6.x是新功能實驗版本。2.6上實驗都穩定了之後,會遷移到2.5,因此若是你想了解dubbo最新的牛逼特性,就選擇2.6,不然用2.5版本。我接下來介紹都是基於2.6.x版本。bootstrap
dubbo的官方文檔真的寫的太好了,我在這裏仍是要誇讚一下。接下來我對整個框架設計的介紹是基於官方文檔的基礎上進行擴充,儘可能作到更加通俗易懂。api
能夠看到Dubbo被拆分紅不少的Maven項目(右邊的我尚未截全)接下來我會介紹左邊每一個模塊的大體做用。緩存
若是看過dubbo官方文檔的朋友確定看到過如下這個圖:服務器
從以上這個圖咱們能夠清晰的看到各個模塊之間依賴關係,其實以上的圖只是展現了關鍵的模塊依賴關係,還有部分模塊好比dubbo-bootstrap清理模塊等,下面我會對各個模塊作個簡單的介紹,至少弄明白各個模塊的做用。
先來說講上圖的幾個模塊:
官方文檔的解釋:基於註冊中心下發地址的集羣方式,以及對各類註冊中心的抽象。
個人理解是:dubbo的註冊中心實現有Multicast註冊中心、Zookeeper註冊中心、Redis註冊中心、Simple註冊中心(具體怎麼實現我在後面文章中會介紹),這個模塊就是封裝了dubbo所支持的註冊中心的實現。
看看registry目錄結構:
官方文檔的解釋:將多個服務提供方假裝爲一個提供方,包括:負載均衡, 容錯,路由等,集羣的地址列表能夠是靜態配置的,也能夠是由註冊中心下發。
個人理解:它就是一個解決出錯狀況採用的策略,這個模塊裏面封裝了多種策略的實現方法,而且也支持本身擴展集羣容錯策略,cluster把多個Invoker假裝成一個Invoker,而且在假裝過程當中加入了容錯邏輯,失敗了,重試下一個。
看看cluster的目錄結構:
官方文檔的解釋:包括 Util 類和通用模型。
個人理解:這個應該很通俗易懂,工具類就是一些公用的方法,通用模型就是貫穿整個項目的統一格式的模型,好比URL,上述就提到了URL貫穿了整個項目。
看看common的目錄:
這個類中的包含義我就不一一講了,具體的介紹會穿插在後續文章中,由於這些都是工具類的一些實現,包的含義也很明顯。
官方文檔的解釋:是 Dubbo 對外的 API,用戶經過 Config 使用Dubbo,隱藏 Dubbo 全部細節。
個人理解:用戶都是使用配置來使用dubbo,dubbo也提供了四種配置方式,包括XML配置、屬性配置、API配置、註解配置,配置模塊就是實現了這四種配置的功能。
看看config的目錄:
官方文檔的解釋:抽象各類協議,以及動態代理,只包含一對一的調用,不關心集羣的管理。
個人理解:遠程調用,最主要的確定是協議,dubbo提供了許許多多的協議實現,不過官方推薦時使用dubbo本身的協議,還給出了一份性能測試報告。
性能測試報告地址: http://dubbo.apache.org/zh-cn...
這個模塊依賴於dubbo-remoting模塊,抽象了各種的協議。
看看rpc的目錄:
官方文檔的解釋:至關於 Dubbo 協議的實現,若是 RPC 用 RMI協議則不須要使用此包。
個人理解:提供了多種客戶端和服務端通訊功能,好比基於Grizzly、Netty、Tomcat等等,RPC用除了RMI的協議都要用到此模塊。
看看remoting的目錄:
官方文檔的解釋:是一個 Standlone 的容器,以簡單的 Main 加載 Spring 啓動,由於服務一般不須要 Tomcat/JBoss 等 Web 容器的特性,不必用 Web 容器去加載服務。
個人理解:由於後臺服務不須要Tomcat/JBoss 等 Web 容器的功能,不須要用這些厚實的容器去加載服務提供方,既資源浪費,又增長複雜度。服務容器只是一個簡單的Main方法,加載一些內置的容器,也支持擴展容器。
看看container的目錄:
官方文檔的解釋:統計服務調用次數,調用時間的,調用鏈跟蹤的服務。
個人理解:這個模塊很清楚,就是對服務的監控。
看看monitor的目錄:
這個模塊只有一個類,是做爲dubbo的引導類,而且在中止期間進行清理資源。具體的介紹我在後續文章中講解。
這個模塊是快速啓動示例,其中包含了服務提供方和調用方,註冊中心用的是multicast,用XML配置方法,具體的介紹能夠看官方文檔。
示例介紹地址: http://dubbo.apache.org/zh-cn...
這個模塊提供了內置的一些過濾器。
看看filter的目錄:
該模塊提供了內置的插件。
看看plugin的目錄:
該模塊中封裝了各種序列化框架的支持實現。
看看serialization的目錄:
這個模塊封裝了針對dubbo的性能測試、兼容性測試等功能。
看看test的目錄:
讀完整篇文章後不知道對你踏入dubbo源碼解讀是否有幾分幫助,後續我將會逐步更新dubbo每一個模塊的解讀,若是我在哪一部分寫的不夠到位或者寫錯了,歡迎給我提意見,個人私人微信號碼:HUA799695226。