成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

dubbo源碼解析(一)Hello,Dubbo

evin2016 / 2386人閱讀

摘要:英文全名為,也叫遠(yuǎn)程過程調(diào)用,其實(shí)就是一個(gè)計(jì)算機(jī)通信協(xié)議,它是一種通過網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)程序上請(qǐng)求服務(wù)而不需要了解底層網(wǎng)絡(luò)技術(shù)的協(xié)議。

Hello,Dubbo

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

Dubbo你到底是什么?

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

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

文檔簡(jiǎn)短形象的對(duì)單一應(yīng)用架構(gòu)、垂直應(yīng)用架構(gòu)、分布式服務(wù)架構(gòu)、流動(dòng)計(jì)算架構(gòu)做了一個(gè)對(duì)比,可以很明白的看出這四個(gè)架構(gòu)所適用的場(chǎng)景,因?yàn)闃I(yè)務(wù)需求越來越復(fù)雜,才會(huì)有這一系列的演變。

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

回到原先的話題,繼續(xù)來聊聊dubbo。關(guān)于dubbo 的特點(diǎn)分別有連通性、健壯性、伸縮性、以及向未來架構(gòu)的升級(jí)性。特點(diǎn)的詳細(xì)介紹也可以參考上述鏈接的官方文檔。官方文檔擁有的內(nèi)容我在這就不一一進(jìn)行闡述了。

因?yàn)榻酉聛硇枰獙?duì)dubbo各個(gè)模塊的源碼以及原理進(jìn)行解析,所以介紹一下dubbo的源碼庫,dubbo框架已經(jīng)交由Apache基金會(huì)進(jìn)行孵化,被掛在github開源。

github地址:https://github.com/apache/inc...

然后講一下dubbo的版本策略:兩個(gè)大版本并行發(fā)展,2.5.x是穩(wěn)定版本,2.6.x是新功能實(shí)驗(yàn)版本。2.6上實(shí)驗(yàn)都穩(wěn)定了以后,會(huì)遷移到2.5,所以如果你想了解dubbo最新的牛逼特性,就選擇2.6,否則用2.5版本。我接下來介紹都是基于2.6.x版本。

dubbo框架設(shè)計(jì)介紹

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

我們先來看看把源碼clone下來后的結(jié)構(gòu):

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

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

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

?先來講講上圖的幾個(gè)模塊:

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

官方文檔的解釋:基于注冊(cè)中心下發(fā)地址的集群方式,以及對(duì)各種注冊(cè)中心的抽象。

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

看看registry目錄結(jié)構(gòu):

dubbo-registry-api:抽象了注冊(cè)中心的注冊(cè)和發(fā)現(xiàn),實(shí)現(xiàn)了一些公用的方法,讓子類只關(guān)注部分關(guān)鍵方法。

以下四個(gè)包是分別是四種注冊(cè)中心實(shí)現(xiàn)方法的封裝,其中dubbo-registry-default就是官方文檔里面的Simple注冊(cè)中心。

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

官方文檔的解釋:將多個(gè)服務(wù)提供方偽裝為一個(gè)提供方,包括:負(fù)載均衡, 容錯(cuò),路由等,集群的地址列表可以是靜態(tài)配置的,也可以是由注冊(cè)中心下發(fā)。

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

看看cluster的目錄結(jié)構(gòu):

configurator包:配置包,dubbo的基本設(shè)計(jì)原則是采用URL作為配置信息的統(tǒng)一格式,所有拓展點(diǎn)都通過傳遞URL攜帶配置信息,這個(gè)包就是用來根據(jù)統(tǒng)一的配置規(guī)則生成配置信息。

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

loadbalance包:封裝了負(fù)載均衡的實(shí)現(xiàn),負(fù)責(zé)利用負(fù)載均衡算法從多個(gè)Invoker中選出具體的一個(gè)Invoker用于此次的調(diào)用,如果調(diào)用失敗,則需要重新選擇。

merger包:封裝了合并返回結(jié)果,分組聚合到方法,支持多種數(shù)據(jù)結(jié)構(gòu)類型。

router包:封裝了路由規(guī)則的實(shí)現(xiàn),路由規(guī)則決定了一次dubbo服務(wù)調(diào)用的目標(biāo)服務(wù)器,路由規(guī)則分兩種:條件路由規(guī)則和腳本路由規(guī)則,并且支持可拓展。

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

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

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

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

看看common的目錄:

這個(gè)類中的包含義我就不一一講了,具體的介紹會(huì)穿插在后續(xù)文章中,因?yàn)檫@些都是工具類的一些實(shí)現(xiàn),包的含義也很明顯。

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

官方文檔的解釋:是 Dubbo 對(duì)外的 API,用戶通過 Config 使用Dubbo,隱藏 Dubbo 所有細(xì)節(jié)。

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

看看config的目錄:

dubbo-config-api:實(shí)現(xiàn)了API配置和屬性配置的功能。

dubbo-config-spring:實(shí)現(xiàn)了XML配置和注解配置的功能。

(五)dubbo-rpc——遠(yuǎn)程調(diào)用模塊

官方文檔的解釋:抽象各種協(xié)議,以及動(dòng)態(tài)代理,只包含一對(duì)一的調(diào)用,不關(guān)心集群的管理。

我的理解:遠(yuǎn)程調(diào)用,最主要的肯定是協(xié)議,dubbo提供了許許多多的協(xié)議實(shí)現(xiàn),不過官方推薦時(shí)使用dubbo自己的協(xié)議,還給出了一份性能測(cè)試報(bào)告。

性能測(cè)試報(bào)告地址:http://dubbo.apache.org/zh-cn...

這個(gè)模塊依賴于dubbo-remoting模塊,抽象了各類的協(xié)議。

看看rpc的目錄:

dubbo-rpc-api:抽象了動(dòng)態(tài)代理和各類協(xié)議,實(shí)現(xiàn)一對(duì)一的調(diào)用

另外的包都是各個(gè)協(xié)議的實(shí)現(xiàn)。

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

官方文檔的解釋:相當(dāng)于 Dubbo 協(xié)議的實(shí)現(xiàn),如果 RPC 用 RMI協(xié)議則不需要使用此包。

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

看看remoting的目錄:

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

dubbo-remoting-grizzly:基于Grizzly實(shí)現(xiàn)的Client和Server。

dubbo-remoting-http:基于Jetty或Tomcat實(shí)現(xiàn)的Client和Server。

dubbo-remoting-mina:基于Mina實(shí)現(xiàn)的Client和Server。

dubbo-remoting-netty:基于Netty3實(shí)現(xiàn)的Client和Server。

Dubbo-remoting-netty4:基于Netty4實(shí)現(xiàn)的Client和Server。

dubbo-remoting-p2p:P2P服務(wù)器,注冊(cè)中心multicast中會(huì)用到這個(gè)服務(wù)器使用。

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

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

官方文檔的解釋:是一個(gè) Standlone 的容器,以簡(jiǎn)單的 Main 加載 Spring 啟動(dòng),因?yàn)榉?wù)通常不需要 Tomcat/JBoss 等 Web 容器的特性,沒必要用 Web 容器去加載服務(wù)。

我的理解:因?yàn)楹笈_(tái)服務(wù)不需要Tomcat/JBoss 等 Web 容器的功能,不需要用這些厚實(shí)的容器去加載服務(wù)提供方,既資源浪費(fèi),又增加復(fù)雜度。服務(wù)容器只是一個(gè)簡(jiǎn)單的Main方法,加載一些內(nèi)置的容器,也支持?jǐn)U展容器。

看看container的目錄:

dubbo-container-api:定義了Container接口,實(shí)現(xiàn)了服務(wù)加載的Main方法。

其他三個(gè)分別提供了對(duì)應(yīng)的容器,供Main方法加載。

(八)dubbo-monitor——監(jiān)控模塊

官方文檔的解釋:統(tǒng)計(jì)服務(wù)調(diào)用次數(shù),調(diào)用時(shí)間的,調(diào)用鏈跟蹤的服務(wù)。

我的理解:這個(gè)模塊很清楚,就是對(duì)服務(wù)的監(jiān)控。

看看monitor的目錄:

dubbo-monitor-api:定義了monitor相關(guān)的接口,實(shí)現(xiàn)了監(jiān)控所需要的過濾器。

dubbo-monitor-default:實(shí)現(xiàn)了dubbo監(jiān)控相關(guān)的功能。

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

這個(gè)模塊只有一個(gè)類,是作為dubbo的引導(dǎo)類,并且在停止期間進(jìn)行清理資源。具體的介紹我在后續(xù)文章中講解。

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

這個(gè)模塊是快速啟動(dòng)示例,其中包含了服務(wù)提供方和調(diào)用方,注冊(cè)中心用的是multicast,用XML配置方法,具體的介紹可以看官方文檔。

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

這個(gè)模塊提供了內(nèi)置的一些過濾器。

看看filter的目錄:

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

dubbo-filter-validation:提供參數(shù)驗(yàn)證過濾器。

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

該模塊提供了內(nèi)置的插件。

看看plugin的目錄:

dubbo-qos:提供了在線運(yùn)維的命令。

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

該模塊中封裝了各類序列化框架的支持實(shí)現(xiàn)。

看看serialization的目錄:

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

其他的包都是實(shí)現(xiàn)了對(duì)應(yīng)的序列化框架的方法。dubbo內(nèi)置的就是這幾類的序列化框架,序列化也支持?jǐn)U展。

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

這個(gè)模塊封裝了針對(duì)dubbo的性能測(cè)試、兼容性測(cè)試等功能。

看看test的目錄:

dubbo-test-benchmark:對(duì)性能的測(cè)試。

dubbo-test-compatibility:對(duì)兼容性的測(cè)試,對(duì)spring3對(duì)兼容性測(cè)試。

dubbo-test-examples:測(cè)試所使用的示例。

dubbo-test-integration:測(cè)試所需的pom文件

下面我來講講dubbo中Maven相關(guān)的pom文件

dubbo-bom/pom.xml,利用Maven BOM統(tǒng)一定義了dubbo的版本號(hào)。dubbo-test和dubbo-demo的pom文件中都會(huì)引用dubbo-bom/pom.xml,以dubbo-demo都pom舉例子:

dubbo-dependencies-bom/pom.xml:利用Maven BOM統(tǒng)一定義了dubbo依賴的第三方庫的版本號(hào)。dubbo-parent會(huì)引入該bom:

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

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

后記

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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/71760.html

相關(guān)文章

  • dubbo源碼解析——概要篇

    摘要:服務(wù)提供者代碼上面這個(gè)類會(huì)被封裝成為一個(gè)實(shí)例,并新生成一個(gè)實(shí)例。這樣當(dāng)網(wǎng)絡(luò)通訊層收到一個(gè)請(qǐng)求后,會(huì)找到對(duì)應(yīng)的實(shí)例,并調(diào)用它所對(duì)應(yīng)的實(shí)例,從而真正調(diào)用了服務(wù)提供者的代碼。 這次源碼解析借鑒《肥朝》前輩的dubbo源碼解析,進(jìn)行源碼學(xué)習(xí)。總結(jié)起來就是先總體,后局部.也就是先把需要注意的概念先拋出來,把整體架構(gòu)圖先畫出來.讓讀者拿著地圖跟著我的腳步,并且每一步我都提醒,現(xiàn)在我們?cè)谀?我們下一...

    Meathill 評(píng)論0 收藏0
  • dubbo之SPI

    摘要:簡(jiǎn)介全稱為,是一種服務(wù)發(fā)現(xiàn)機(jī)制。的本質(zhì)是將接口實(shí)現(xiàn)類的全限定名配置在文件中,并由服務(wù)加載器讀取配置文件,加載實(shí)現(xiàn)類。不過,并未使用原生的機(jī)制,而是對(duì)其進(jìn)行了增強(qiáng),使其能夠更好的滿足需求。并未使用,而是重新實(shí)現(xiàn)了一套功能更強(qiáng)的機(jī)制。 1、SPI簡(jiǎn)介 SPI 全稱為 Service Provider Interface,是一種服務(wù)發(fā)現(xiàn)機(jī)制。SPI 的本質(zhì)是將接口實(shí)現(xiàn)類的全限定名配置在文件中...

    UnixAgain 評(píng)論0 收藏0
  • dubbo源碼解析(四十六)消費(fèi)端發(fā)送請(qǐng)求過程

    摘要:可以參考源碼解析二十四遠(yuǎn)程調(diào)用協(xié)議的八。十六的該類也是用了適配器模式,該類主要的作用就是增加了心跳功能,可以參考源碼解析十遠(yuǎn)程通信層的四。二十的可以參考源碼解析十七遠(yuǎn)程通信的一。 2.7大揭秘——消費(fèi)端發(fā)送請(qǐng)求過程 目標(biāo):從源碼的角度分析一個(gè)服務(wù)方法調(diào)用經(jīng)歷怎么樣的磨難以后到達(dá)服務(wù)端。 前言 前一篇文章講到的是引用服務(wù)的過程,引用服務(wù)無非就是創(chuàng)建出一個(gè)代理。供消費(fèi)者調(diào)用服務(wù)的相關(guān)方法。...

    fish 評(píng)論0 收藏0
  • Dubbo 源碼分析 - 集群容錯(cuò)之 Router

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

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

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

    qqlcbb 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

evin2016

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<