Dubbo源碼學(xué)習(xí)一--Dubbo重點(diǎn)掌握模塊

Dubbo是什么


Dubbo是阿里SOA服務(wù)化治理方案的核心框架矢洲,是眾多RPC框架中卓越的框架之一读虏,它提供了注冊(cè)中心機(jī)制袁滥,解耦了消費(fèi)方和服務(wù)方動(dòng)態(tài)發(fā)現(xiàn)的問題,并提高了可靠能力呻拌。我們可以通過官方的架構(gòu)圖了解下Dubbo的工作機(jī)制和工作原理:


Dubbo架構(gòu)圖.png

架構(gòu)圖中幾個(gè)主要的角色如下:

Container:服務(wù)運(yùn)行的容器
Provider:暴露服務(wù)的服務(wù)提供方
Registry: 服務(wù)注冊(cè)與發(fā)現(xiàn)的注冊(cè)中心
Consumer: 調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費(fèi)者
Monitor: 統(tǒng)計(jì)服務(wù)的調(diào)用次數(shù)和調(diào)用時(shí)間的監(jiān)控中心

幾個(gè)角色協(xié)調(diào)運(yùn)作的過程:

Provider啟動(dòng)時(shí)會(huì)向注冊(cè)中心吧自己的元數(shù)據(jù)信息注冊(cè)上去(例如服務(wù)IP地址和端口號(hào)等)藐握,Consumer啟動(dòng)時(shí)會(huì)從注冊(cè)中心訂閱(第一次訂閱會(huì)拉取全量數(shù)據(jù))服務(wù)提供方的元數(shù)據(jù),
注冊(cè)中心發(fā)生數(shù)據(jù)變更時(shí)會(huì)將變更的數(shù)據(jù)推送給訂閱的Consumer袜炕。Consumer在獲取到元數(shù)據(jù)之后初家,可以發(fā)起RPC調(diào)用乌助,在RPC調(diào)用前后會(huì)向監(jiān)控中心上報(bào)統(tǒng)計(jì)信息(調(diào)用的接口以及并發(fā)數(shù)等信息)陌知。

Dubbo核心組件及整體調(diào)用過程

Dubbo框架的核心組件

Dubbo架構(gòu)詳細(xì)分層.png

Dubbo中體的分層主要可以分為業(yè)務(wù)層、RPC層和Remot層赏参,如果把每層進(jìn)行詳細(xì)劃分的話整體又可以分為以下幾層:

業(yè)務(wù)層:
service層:包括業(yè)務(wù)代碼的接口與實(shí)現(xiàn)沿盅,即開發(fā)者實(shí)現(xiàn)的業(yè)務(wù)代碼

RPC層:
config:配置層,主要圍繞ServiceConfig(暴露的服務(wù)配置)和ReferenceConfig(引用的服務(wù)配置)兩個(gè)類展開腰涧,初始化配置信息。
proxy:服務(wù)代理層疗锐,無論是生產(chǎn)者還是消費(fèi)者万伤,Dubbo都會(huì)生成一個(gè)代理類,這樣當(dāng)調(diào)用一個(gè)遠(yuǎn)程接口  時(shí)敌买,就像調(diào)用本地接口一樣阶界,代理層會(huì)自動(dòng)做遠(yuǎn)程調(diào)用并返回結(jié)果。
registry:注冊(cè)層芙粱,負(fù)責(zé)Dubbo框架的服務(wù)注冊(cè)與發(fā)現(xiàn)氧映。
cluster:集群容錯(cuò)層,主要負(fù)責(zé)遠(yuǎn)程調(diào)用失敗時(shí)的集群容錯(cuò)策略(如快速失敗律姨、失敗重試等)臼疫。
monitor:監(jiān)控層,負(fù)責(zé)監(jiān)控統(tǒng)計(jì)調(diào)用次數(shù)和調(diào)用時(shí)間等烫堤。
protocol:遠(yuǎn)程調(diào)用層凤价,封裝PRC調(diào)用的具體過程拔创,是Invoker暴露和引用的主要功能入口,負(fù)責(zé)管理Invoker的整個(gè)而聲名周期慢逾。

Remot層:
exchange:信息交換層躏吊,封裝請(qǐng)求響應(yīng)模式,如把同步請(qǐng)求轉(zhuǎn)換為異步請(qǐng)求胜卤。
transport:網(wǎng)絡(luò)傳輸層赁项,把網(wǎng)絡(luò)傳輸抽象為統(tǒng)一的接口。
Serialize:序列化層悠菜,將需要網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)極性序列化,轉(zhuǎn)換成二進(jìn)制流摩窃。

Dubbo服務(wù)的具體調(diào)用過程

Dubbo服務(wù)的具體調(diào)用過程.png

Dubbo服務(wù)的具體調(diào)用過程如上圖所示芬骄,從生產(chǎn)者(服務(wù)提供者)暴露自己的服務(wù)和消費(fèi)者(服務(wù)調(diào)用者)調(diào)用遠(yuǎn)程服務(wù)兩個(gè)過程進(jìn)行大致的分析:

服務(wù)暴露大致過程

1、服務(wù)提供者在啟動(dòng)框架式蒂秘,初始化服務(wù)實(shí)例淘太。
2、通過Proxy組件調(diào)用具體協(xié)議(Dubbo支持多種協(xié)議)蒲牧。
3、服務(wù)端把暴露的接口封裝成Invoker显熏,然后轉(zhuǎn)換成Exporter晒屎。
4缓升、通過Registry把服務(wù)元數(shù)據(jù)注冊(cè)到注冊(cè)中心蕴轨。

消費(fèi)者調(diào)用服務(wù)的大致過程

1、從Proxy開始歧寺,Proxy持有Invoker對(duì)象棘脐,然后觸發(fā)invoke調(diào)用。
2蛀缝、在invoke調(diào)用過程中,需要使用到cluster容錯(cuò)策略嗤练,來負(fù)責(zé)調(diào)用遠(yuǎn)程服務(wù)失敗后的一些后續(xù)操作在讶。
3、Cluster在調(diào)用之前會(huì)通過Directory獲取所有可以調(diào)用的Invoker列表并且根據(jù)路由規(guī)則過濾一遍构哺。
4、經(jīng)過過濾之后的Invoker可能不止一個(gè)蝗碎,此時(shí)通過LoadBaklance負(fù)載均衡策略選出一個(gè)最終調(diào)用的Invoker旗扑。
5慈省、經(jīng)過網(wǎng)絡(luò)序列化以及傳輸將數(shù)據(jù)包送到服務(wù)提供者。
6袱衷、調(diào)用者的request被分配到線程池進(jìn)行處理笑窜,找到對(duì)應(yīng)的Exporter,經(jīng)過一系列的Filter之后得具體接口的真是實(shí)現(xiàn)并調(diào)用排截。
7辐益、調(diào)用完成之后將結(jié)果原路返回脱吱。

需要重點(diǎn)理解和掌握的核心組件

Dubbo眾多的模塊中,可能在開發(fā)過程當(dāng)中并不會(huì)全部都用到续捂,但是有幾個(gè)模塊需要重點(diǎn)掌握宦搬,

1、Dubbo的注冊(cè)中心矾克,包括注冊(cè)中心的工作流程撇簿、注冊(cè)中心的數(shù)據(jù)結(jié)構(gòu),訂閱發(fā)布實(shí)現(xiàn)的原理等四瘫。

2、Dubbo服務(wù)的啟停原理饼暑,包括生產(chǎn)者對(duì)外暴露自己服務(wù)接口的詳細(xì)過程以及消費(fèi)者調(diào)用遠(yuǎn)程接口的詳細(xì)過程洗做。

3、Dubbo的遠(yuǎn)程調(diào)用過程撰筷,包括Dubbo核心調(diào)用流程畦徘,Dubbo使用的協(xié)議以及線程模型等。

4井辆、Dubbo的集群容錯(cuò)策略,包括Directory的實(shí)現(xiàn)原理蒸播,Router的實(shí)現(xiàn)原理以及LoadBalance的實(shí)現(xiàn)原理等萍肆。

Dubbo系列博客將以最新版本源碼為基礎(chǔ)進(jìn)行分析和學(xué)習(xí)胀屿,源碼下載地址 蜡塌,分支選擇master即可選擇最新版進(jìn)行下載。

我是割草的小豬頭劳曹,不斷學(xué)習(xí)琅摩,不斷進(jìn)步,后續(xù)陸續(xù)更新Dubbo系列的文章房资,如您有興趣一起了解,歡迎關(guān)注岖沛,如文章中有不妥之處搭独,歡迎指正!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末唉俗,一起剝皮案震驚了整個(gè)濱河市配椭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌衡楞,老刑警劉巖敦姻,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡得滤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門眨业,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人卓嫂,你說我怎么就攤上這事聘殖。” “怎么了餐禁?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵突照,是天一觀的道長。 經(jīng)常有香客問我末盔,道長座慰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任隅忿,我火速辦了婚禮邦尊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蝉揍。我一直安慰自己,他們只是感情好弊仪,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布杖刷。 她就那樣靜靜地躺著,像睡著了一般役听。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上典予,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天瘤袖,我揣著相機(jī)與錄音,去河邊找鬼捂敌。 笑死艾扮,一個(gè)胖子當(dāng)著我的面吹牛栏渺,可吹牛的內(nèi)容都是我干的锐涯。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼霎终,長吁一口氣:“原來是場噩夢啊……” “哼升薯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起涎劈,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤蛛枚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蹦浦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡侥袜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年枫吧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宇色。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闽寡。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡尼酿,死狀恐怖植影,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鹿响,我是刑警寧澤谷饿,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站绸贡,受9級(jí)特大地震影響毅哗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜虑绵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望声搁。 院中可真熱鬧捕发,春花似錦、人聲如沸爬骤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坷剧。三九已至,卻和暖如春撕瞧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背丛版。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工页畦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人豫缨。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像好芭,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子舍败,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容