Dubbo

分布式

Dubbo

1. 什么是Dubbo

Dubbo是一個(gè)分布式服務(wù)框架浩聋,替代了webService中的wsdl甲捏,采用消費(fèi)者與服務(wù)者在注冊(cè)中心注冊(cè)的方法來實(shí)現(xiàn)遠(yuǎn)程服務(wù)調(diào)用,是個(gè)遠(yuǎn)程服務(wù)調(diào)用的分布式框架。
Dubbo脫胎于阿里的電商系統(tǒng)银室。當(dāng)網(wǎng)站流量很小的時(shí)候鳄逾,ORM就足以滿足需求稻轨。而當(dāng)系統(tǒng)增長(zhǎng),第一步的擴(kuò)容方法就是采用MVC來垂直架構(gòu)項(xiàng)目严衬。而當(dāng)垂直應(yīng)用越來越多澄者,應(yīng)用之間的交互將不可避免,我們將核心業(yè)務(wù)抽取出來作為獨(dú)立的服務(wù)從而形成穩(wěn)定的服務(wù)中心请琳,這就是RPC分布式應(yīng)用架構(gòu)粱挡。而當(dāng)服務(wù)進(jìn)一步增長(zhǎng),我們就需要使用面向服務(wù)的SOA相關(guān)技術(shù)俄精。
而Dubbo提供高性能和透明化的RPC遠(yuǎn)程服務(wù)調(diào)用方案和SOA服務(wù)治理方案询筏,他可以每天為兩千多個(gè)服務(wù)提供大于30億次的訪問量支持,在國(guó)內(nèi)得到了極其廣泛的應(yīng)用竖慧。

參考:
《Dubbo入門---搭建一個(gè)最簡(jiǎn)單的Demo框架》
《Dubbo是什么嫌套?能做什么?》

2. 什么是RPC圾旨、如何實(shí)現(xiàn)RPC踱讨、RPC 的實(shí)現(xiàn)原理

遠(yuǎn)程過程調(diào)用(Remote Procedure Call Protocol)是一種通過網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)程序上請(qǐng)求服務(wù)器,而不需要了解底層網(wǎng)絡(luò)技術(shù)的協(xié)議砍的。
它假定某些類似TCP和UDP的傳輸協(xié)議存在痹筛,為通信程序之間攜帶信息數(shù)據(jù)。他的本質(zhì)還是底層的Socket通信廓鞠。在OSI網(wǎng)絡(luò)通信模型中帚稠,RPC跨越了傳輸層和應(yīng)用層。它使得開發(fā)包括網(wǎng)絡(luò)分布式多程序在內(nèi)的應(yīng)用程序更加容易床佳。

RPC采用客戶機(jī)/服務(wù)器模式滋早,請(qǐng)求程序是一個(gè)客戶機(jī),而服務(wù)提供程序就是一個(gè)服務(wù)器砌们,首先杆麸,客戶機(jī)調(diào)用進(jìn)程發(fā)送一個(gè)有進(jìn)程參數(shù)的調(diào)用信息到服務(wù)進(jìn)程搁进,然后等待應(yīng)答信息。在服務(wù)器端昔头,進(jìn)程保持睡眠狀態(tài)直到調(diào)用信息到達(dá)為止拷获。當(dāng)一個(gè)調(diào)用信息到達(dá)服務(wù)器獲得進(jìn)程參數(shù),計(jì)算機(jī)國(guó)减细,發(fā)送答復(fù)信息匆瓜,然后等待下一個(gè)調(diào)用信息。最后未蝌,客戶端調(diào)用進(jìn)程接收DAU信息驮吱,獲得進(jìn)程結(jié)果,然后調(diào)用執(zhí)行繼續(xù)進(jìn)行萧吠。

RPC需要注意的是左冬,服務(wù)的調(diào)用方和服務(wù)的提供方之間傳輸?shù)臄?shù)據(jù)需要進(jìn)行序列化和反序列化操作,因?yàn)樯婕暗皆诰W(wǎng)絡(luò)上進(jìn)行傳輸纸型,任何類型的數(shù)據(jù)都需要轉(zhuǎn)化為二進(jìn)制拇砰,也就是序列化。序列化和反序列化的方式很多狰腌,可以使用Java本身內(nèi)置的序列化方式除破,JSON,XML等琼腔。

參考:
《Dubbo入門---搭建一個(gè)最簡(jiǎn)單的Demo框架》
《基于TCP和HTTP協(xié)議的RPC簡(jiǎn)單實(shí)現(xiàn)》

3. Dubbo中的SPI是什么概念

SPI即Service Provider Interface瑰枫,是JDK內(nèi)置的一種服務(wù)提供發(fā)現(xiàn)機(jī)制。它是一種動(dòng)態(tài)替換發(fā)現(xiàn)的機(jī)制丹莲,為某個(gè)接口尋找服務(wù)光坝,將裝配的控制權(quán)轉(zhuǎn)移到程序之外。

Dubbo采用了微內(nèi)核+插件體系甥材,使得設(shè)計(jì)優(yōu)雅盯另,擴(kuò)展性也強(qiáng)大。我們定義了服務(wù)接口標(biāo)準(zhǔn)洲赵,讓廠商去實(shí)現(xiàn)鸳惯,JDK通過ServiceLoader類即可實(shí)現(xiàn)SPI機(jī)制的服務(wù)查找功能。

Dubbo使用的ExtensionLoader類似ServiceLoader類板鬓,其中含有一個(gè)靜態(tài)屬性:
ConcurrentMap, ExtensionLoader>EXTENSION_LOADERS = new ConcurrentHashMap, ExtensionLoader>();

用于緩存所有的擴(kuò)展加載實(shí)例悲敷,這里加載Protocol.class究恤,就以Protocol.class為key俭令,創(chuàng)建的ExtensionLoader為value存儲(chǔ)到上述EXTENSION_LOADERS中

這里沒有進(jìn)行任何的加載操作。

我們來看下部宿,ExtensionLoader實(shí)例是如何來加載Protocol的實(shí)現(xiàn)類的:

  1. 先解析Protocol上的Extension注解的name,存至String cachedDefaultName屬性中抄腔,作為默認(rèn)的實(shí)現(xiàn)

  2. 到類路徑下的加載 META-INF/services/com.alibaba.dubbo.rpc.Protocol文件

參考:
《跟我學(xué)Dubbo系列之Java SPI機(jī)制簡(jiǎn)介》
《dubbo之SPI解析》

4. Dubbo的基本原理瓢湃、執(zhí)行流程

Dubbo的整體架構(gòu)如下:

  1. Provider:暴露服務(wù)的服務(wù)提供方
    服務(wù)提供者在啟動(dòng)時(shí),需要向注冊(cè)中心注冊(cè)自己提供的服務(wù)赫蛇。
  2. Consumer:調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費(fèi)方
    服務(wù)消費(fèi)者在啟動(dòng)時(shí)绵患,向注冊(cè)中心訂閱自己所需要的服務(wù)。
  3. Registry:服務(wù)注冊(cè)與發(fā)現(xiàn)的注冊(cè)中心
    注冊(cè)中心返回服務(wù)提供者列表給消費(fèi)者悟耘,如果有變更落蝙,注冊(cè)中心將基于長(zhǎng)連接推送變更數(shù)據(jù)給消費(fèi)者。
  4. Monitor:統(tǒng)計(jì)服務(wù)的調(diào)用次數(shù)和調(diào)用時(shí)間的監(jiān)控中心
    服務(wù)消費(fèi)者和提供者在內(nèi)存中累計(jì)調(diào)用次數(shù)和調(diào)用時(shí)間暂幼,將會(huì)定時(shí)發(fā)送一次統(tǒng)計(jì)數(shù)據(jù)到監(jiān)控中心筏勒。
  5. Container:服務(wù)運(yùn)行容器
    負(fù)責(zé)啟動(dòng),加載旺嬉,運(yùn)行服務(wù)提供者管行。

Dubbo采用全Spring配置方式,透明化接入應(yīng)用邪媳,對(duì)應(yīng)用沒有任何API侵入捐顷,只需要Spring加載Dubbo的配置即可,Dubbo基于SPring的Schema擴(kuò)展進(jìn)行加載雨效。

參考:
《Dubbo是什么迅涮?能做什么?》

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末徽龟,一起剝皮案震驚了整個(gè)濱河市逗柴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌顿肺,老刑警劉巖戏溺,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異屠尊,居然都是意外死亡旷祸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門讼昆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來托享,“玉大人,你說我怎么就攤上這事浸赫∪蛭В” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵既峡,是天一觀的道長(zhǎng)羡榴。 經(jīng)常有香客問我,道長(zhǎng)运敢,這世上最難降的妖魔是什么校仑? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任忠售,我火速辦了婚禮,結(jié)果婚禮上迄沫,老公的妹妹穿的比我還像新娘稻扬。我一直安慰自己,他們只是感情好羊瘩,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布泰佳。 她就那樣靜靜地躺著,像睡著了一般尘吗。 火紅的嫁衣襯著肌膚如雪乐纸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天摇予,我揣著相機(jī)與錄音汽绢,去河邊找鬼。 笑死侧戴,一個(gè)胖子當(dāng)著我的面吹牛宁昭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播酗宋,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼积仗,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了蜕猫?” 一聲冷哼從身側(cè)響起寂曹,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎回右,沒想到半個(gè)月后隆圆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡翔烁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年渺氧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹬屹。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡侣背,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出慨默,到底是詐尸還是另有隱情贩耐,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布厦取,位于F島的核電站潮太,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蒜胖。R本人自食惡果不足惜消别,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望台谢。 院中可真熱鬧寻狂,春花似錦、人聲如沸朋沮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)樊拓。三九已至纠亚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間筋夏,已是汗流浹背蒂胞。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留条篷,地道東北人骗随。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像赴叹,于是被迫代替她去往敵國(guó)和親鸿染。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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

  • Dubbo采用微內(nèi)核+插件體系乞巧,使得設(shè)計(jì)優(yōu)雅涨椒,擴(kuò)展性強(qiáng)。那所謂的微內(nèi)核+插件體系是如何實(shí)現(xiàn)的呢绽媒!大家是否熟悉spi...
    carl_zhao閱讀 932評(píng)論 1 3
  • dubbo的spi機(jī)制 dubbo的擴(kuò)展點(diǎn)加載機(jī)制源自于java的spi擴(kuò)展機(jī)制蚕冬。那么,何為java的spi擴(kuò)展機(jī)...
    安迪豬閱讀 591評(píng)論 0 1
  • Wikipedia上微內(nèi)核(Microkernel)的定義 In computer science, amicro...
    Java黎先生閱讀 1,365評(píng)論 0 1
  • 尾行 讀高中的時(shí)候是辕,我的朋友張煜因?yàn)殚L(zhǎng)相甜美總會(huì)收到男生的求愛播瞳。那是90年代末的縣城,男孩子們的求愛方式通常就是寫...
    李荷西閱讀 2,676評(píng)論 2 21
  • 一般情況下免糕,顯示3D場(chǎng)景的窗口并不是正方形的赢乓,需要通過投影矩陣進(jìn)行變換。
    花神Flora閱讀 1,016評(píng)論 0 1