国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

dubbo源碼解析(一)Hello,Dubbo

evin2016 / 2294人閱讀

摘要:英文全名為,也叫遠程過程調用,其實就是一個計算機通信協議,它是一種通過網絡從遠程計算機程序上請求服務而不需要了解底層網絡技術的協議。

Hello,Dubbo

你好,dubbo,初次見面,我想和你交個朋友。

Dubbo你到底是什么?

先給出一套官方的說法:Apache Dubbo是一款高性能、輕量級基于Java的RPC開源框架。

那么什么是RPC?
文檔地址:http://dubbo.apache.org/zh-cn...

文檔簡短形象的對單一應用架構、垂直應用架構、分布式服務架構、流動計算架構做了一個對比,可以很明白的看出這四個架構所適用的場景,因為業務需求越來越復雜,才會有這一系列的演變。

RPC英文全名為Remote Procedure Call,也叫遠程過程調用,其實就是一個計算機通信協議,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。計算機通信協議有很多種,對于開發來說,很多熟悉的是HTTP協議,我這里就做個簡單的比較,HTTP協議是屬于應用層的,而RPC跨越了傳輸層和應用層。HTTP本身的三次握手協議,每發送一次請求,都會有一次建立連接的過程,就會帶來一定的延遲,并且HTTP本身的報文龐大,而RPC可以按需連接,調用結束后就斷掉,也可以是長鏈接,多個遠程過程調用共享同一個鏈接,可以看出來RPC的效率要高于HTTP,但是相對于開發簡單快速的HTTP服務,RPC服務就會顯得復雜一些。

回到原先的話題,繼續來聊聊dubbo。關于dubbo 的特點分別有連通性、健壯性、伸縮性、以及向未來架構的升級性。特點的詳細介紹也可以參考上述鏈接的官方文檔。官方文檔擁有的內容我在這就不一一進行闡述了。

因為接下來需要對dubbo各個模塊的源碼以及原理進行解析,所以介紹一下dubbo的源碼庫,dubbo框架已經交由Apache基金會進行孵化,被掛在github開源。

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版本。

dubbo框架設計介紹

dubbo的官方文檔真的寫的太好了,我在這里還是要夸贊一下。接下來我對整個框架設計的介紹是基于官方文檔的基礎上進行擴充,盡量做到更加通俗易懂。

我們先來看看把源碼clone下來后的結構:

可以看到Dubbo被拆分成很多的Maven項目(右邊的我還沒有截全)接下來我會介紹左邊每個模塊的大致作用。

如果看過dubbo官方文檔的朋友肯定看到過以下這個圖:

?從以上這個圖我們可以清晰的看到各個模塊之間依賴關系,其實以上的圖只是展示了關鍵的模塊依賴關系,還有部分模塊比如dubbo-bootstrap清理模塊等,下面我會對各個模塊做個簡單的介紹,至少弄明白各個模塊的作用。

?先來講講上圖的幾個模塊:

(一)dubbo-registry——注冊中心模塊

官方文檔的解釋:基于注冊中心下發地址的集群方式,以及對各種注冊中心的抽象。

我的理解是:dubbo的注冊中心實現有Multicast注冊中心、Zookeeper注冊中心、Redis注冊中心、Simple注冊中心(具體怎么實現我在后面文章中會介紹),這個模塊就是封裝了dubbo所支持的注冊中心的實現。

看看registry目錄結構:

dubbo-registry-api:抽象了注冊中心的注冊和發現,實現了一些公用的方法,讓子類只關注部分關鍵方法。

以下四個包是分別是四種注冊中心實現方法的封裝,其中dubbo-registry-default就是官方文檔里面的Simple注冊中心。

(二)dubbo-cluster——集群模塊

官方文檔的解釋:將多個服務提供方偽裝為一個提供方,包括:負載均衡, 容錯,路由等,集群的地址列表可以是靜態配置的,也可以是由注冊中心下發。

我的理解:它就是一個解決出錯情況采用的策略,這個模塊里面封裝了多種策略的實現方法,并且也支持自己擴展集群容錯策略,cluster把多個Invoker偽裝成一個Invoker,并且在偽裝過程中加入了容錯邏輯,失敗了,重試下一個。

看看cluster的目錄結構:

configurator包:配置包,dubbo的基本設計原則是采用URL作為配置信息的統一格式,所有拓展點都通過傳遞URL攜帶配置信息,這個包就是用來根據統一的配置規則生成配置信息。

directory包:Directory 代表了多個 Invoker,并且它的值會隨著注冊中心的服務變更推送而變化 。這里介紹一下Invoker,Invoker是Provider的一個調用Service的抽象,Invoker封裝了Provider地址以及Service接口信息。

loadbalance包:封裝了負載均衡的實現,負責利用負載均衡算法從多個Invoker中選出具體的一個Invoker用于此次的調用,如果調用失敗,則需要重新選擇。

merger包:封裝了合并返回結果,分組聚合到方法,支持多種數據結構類型。

router包:封裝了路由規則的實現,路由規則決定了一次dubbo服務調用的目標服務器,路由規則分兩種:條件路由規則和腳本路由規則,并且支持可拓展。

support包:封裝了各類Invoker和cluster,包括集群容錯模式和分組聚合的cluster以及相關的Invoker。

(三)dubbo-common——公共邏輯模塊

官方文檔的解釋:包括 Util 類和通用模型。

我的理解:這個應該很通俗易懂,工具類就是一些公用的方法,通用模型就是貫穿整個項目的統一格式的模型,比如URL,上述就提到了URL貫穿了整個項目。

看看common的目錄:

這個類中的包含義我就不一一講了,具體的介紹會穿插在后續文章中,因為這些都是工具類的一些實現,包的含義也很明顯。

(四)dubbo-config——配置模塊

官方文檔的解釋:是 Dubbo 對外的 API,用戶通過 Config 使用Dubbo,隱藏 Dubbo 所有細節。

我的理解:用戶都是使用配置來使用dubbo,dubbo也提供了四種配置方式,包括XML配置、屬性配置、API配置、注解配置,配置模塊就是實現了這四種配置的功能。

看看config的目錄:

dubbo-config-api:實現了API配置和屬性配置的功能。

dubbo-config-spring:實現了XML配置和注解配置的功能。

(五)dubbo-rpc——遠程調用模塊

官方文檔的解釋:抽象各種協議,以及動態代理,只包含一對一的調用,不關心集群的管理。

我的理解:遠程調用,最主要的肯定是協議,dubbo提供了許許多多的協議實現,不過官方推薦時使用dubbo自己的協議,還給出了一份性能測試報告。

性能測試報告地址:http://dubbo.apache.org/zh-cn...

這個模塊依賴于dubbo-remoting模塊,抽象了各類的協議。

看看rpc的目錄:

dubbo-rpc-api:抽象了動態代理和各類協議,實現一對一的調用

另外的包都是各個協議的實現。

(六)dubbo-remoting——遠程通信模塊

官方文檔的解釋:相當于 Dubbo 協議的實現,如果 RPC 用 RMI協議則不需要使用此包。

我的理解:提供了多種客戶端和服務端通信功能,比如基于Grizzly、Netty、Tomcat等等,RPC用除了RMI的協議都要用到此模塊。

看看remoting的目錄:

dubbo-remoting-api:定義了客戶端和服務端的接口。

dubbo-remoting-grizzly:基于Grizzly實現的Client和Server。

dubbo-remoting-http:基于Jetty或Tomcat實現的Client和Server。

dubbo-remoting-mina:基于Mina實現的Client和Server。

dubbo-remoting-netty:基于Netty3實現的Client和Server。

Dubbo-remoting-netty4:基于Netty4實現的Client和Server。

dubbo-remoting-p2p:P2P服務器,注冊中心multicast中會用到這個服務器使用。

dubbo-remoting-zookeeper:封裝了Zookeeper Client ,和 Zookeeper Server 通信。

(七)dubbo-container——容器模塊

官方文檔的解釋:是一個 Standlone 的容器,以簡單的 Main 加載 Spring 啟動,因為服務通常不需要 Tomcat/JBoss 等 Web 容器的特性,沒必要用 Web 容器去加載服務。

我的理解:因為后臺服務不需要Tomcat/JBoss 等 Web 容器的功能,不需要用這些厚實的容器去加載服務提供方,既資源浪費,又增加復雜度。服務容器只是一個簡單的Main方法,加載一些內置的容器,也支持擴展容器。

看看container的目錄:

dubbo-container-api:定義了Container接口,實現了服務加載的Main方法。

其他三個分別提供了對應的容器,供Main方法加載。

(八)dubbo-monitor——監控模塊

官方文檔的解釋:統計服務調用次數,調用時間的,調用鏈跟蹤的服務。

我的理解:這個模塊很清楚,就是對服務的監控。

看看monitor的目錄:

dubbo-monitor-api:定義了monitor相關的接口,實現了監控所需要的過濾器。

dubbo-monitor-default:實現了dubbo監控相關的功能。

(九)dubbo-bootstrap——清理模塊

這個模塊只有一個類,是作為dubbo的引導類,并且在停止期間進行清理資源。具體的介紹我在后續文章中講解。

(十)dubbo-demo——示例模塊

這個模塊是快速啟動示例,其中包含了服務提供方和調用方,注冊中心用的是multicast,用XML配置方法,具體的介紹可以看官方文檔。

示例介紹地址:http://dubbo.apache.org/zh-cn...
(十一)dubbo-filter——過濾器模塊

這個模塊提供了內置的一些過濾器。

看看filter的目錄:

dubbo-filter-cache:提供緩存過濾器。

dubbo-filter-validation:提供參數驗證過濾器。

(十二)dubbo-plugin——插件模塊

該模塊提供了內置的插件。

看看plugin的目錄:

dubbo-qos:提供了在線運維的命令。

(十三)dubbo-serialization——序列化模塊

該模塊中封裝了各類序列化框架的支持實現。

看看serialization的目錄:

dubbo-serialization-api:定義了Serialization的接口以及數據輸入輸出的接口。

其他的包都是實現了對應的序列化框架的方法。dubbo內置的就是這幾類的序列化框架,序列化也支持擴展。

(十四)dubbo-test——測試模塊

這個模塊封裝了針對dubbo的性能測試、兼容性測試等功能。

看看test的目錄:

dubbo-test-benchmark:對性能的測試。

dubbo-test-compatibility:對兼容性的測試,對spring3對兼容性測試。

dubbo-test-examples:測試所使用的示例。

dubbo-test-integration:測試所需的pom文件

下面我來講講dubbo中Maven相關的pom文件

dubbo-bom/pom.xml,利用Maven BOM統一定義了dubbo的版本號。dubbo-test和dubbo-demo的pom文件中都會引用dubbo-bom/pom.xml,以dubbo-demo都pom舉例子:

dubbo-dependencies-bom/pom.xml:利用Maven BOM統一定義了dubbo依賴的第三方庫的版本號。dubbo-parent會引入該bom:

all/pow.xml:定義了dubbo的打包腳本,使用dubbo庫的時候,需要引入改pom文件。

dubbo-parent:是dubbo的父pom,dubbo的maven模塊都會引入該pom文件。

后記

讀完整篇文章后不知道對你踏入dubbo源碼解讀是否有幾分幫助,后續我將會逐步更新dubbo每個模塊的解讀,如果我在哪一部分寫的不夠到位或者寫錯了,歡迎給我提意見,我的私人微信號碼:HUA799695226。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71760.html

相關文章

  • dubbo源碼解析——概要篇

    摘要:服務提供者代碼上面這個類會被封裝成為一個實例,并新生成一個實例。這樣當網絡通訊層收到一個請求后,會找到對應的實例,并調用它所對應的實例,從而真正調用了服務提供者的代碼。 這次源碼解析借鑒《肥朝》前輩的dubbo源碼解析,進行源碼學習。總結起來就是先總體,后局部.也就是先把需要注意的概念先拋出來,把整體架構圖先畫出來.讓讀者拿著地圖跟著我的腳步,并且每一步我都提醒,現在我們在哪,我們下一...

    Meathill 評論0 收藏0
  • dubbo之SPI

    摘要:簡介全稱為,是一種服務發現機制。的本質是將接口實現類的全限定名配置在文件中,并由服務加載器讀取配置文件,加載實現類。不過,并未使用原生的機制,而是對其進行了增強,使其能夠更好的滿足需求。并未使用,而是重新實現了一套功能更強的機制。 1、SPI簡介 SPI 全稱為 Service Provider Interface,是一種服務發現機制。SPI 的本質是將接口實現類的全限定名配置在文件中...

    UnixAgain 評論0 收藏0
  • dubbo源碼解析(四十六)消費端發送請求過程

    摘要:可以參考源碼解析二十四遠程調用協議的八。十六的該類也是用了適配器模式,該類主要的作用就是增加了心跳功能,可以參考源碼解析十遠程通信層的四。二十的可以參考源碼解析十七遠程通信的一。 2.7大揭秘——消費端發送請求過程 目標:從源碼的角度分析一個服務方法調用經歷怎么樣的磨難以后到達服務端。 前言 前一篇文章講到的是引用服務的過程,引用服務無非就是創建出一個代理。供消費者調用服務的相關方法。...

    fish 評論0 收藏0
  • Dubbo 源碼分析 - 集群容錯之 Router

    摘要:源碼分析條件路由規則有兩個條件組成,分別用于對服務消費者和提供者進行匹配。如果服務提供者匹配條件為空,表示對某些服務消費者禁用服務。此時第六次循環分隔符,,。第二個和第三個參數來自方法的參數列表,這兩個參數分別為服務提供者和服務消費者。 1. 簡介 上一篇文章分析了集群容錯的第一部分 -- 服務目錄 Directory。服務目錄在刷新 Invoker 列表的過程中,會通過 Router...

    jcc 評論0 收藏0
  • dubbo源碼解析(四十三)2.7新特性

    摘要:大揭秘目標了解的新特性,以及版本升級的引導。四元數據改造我們知道以前的版本只有注冊中心,注冊中心的有數十個的鍵值對,包含了一個服務所有的元數據。 DUBBO——2.7大揭秘 目標:了解2.7的新特性,以及版本升級的引導。 前言 我們知道Dubbo在2011年開源,停止更新了一段時間。在2017 年 9 月 7 日,Dubbo 悄悄的在 GitHub 發布了 2.5.4 版本。隨后,版本...

    qqlcbb 評論0 收藏0

發表評論

0條評論

evin2016

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<