分布式服務(wù)治理框架Dubbo

前言

Dubbo是一個(gè)被國(guó)內(nèi)很多互聯(lián)網(wǎng)公司廣泛使用的開(kāi)源分布式服務(wù)治理框架嬉探,是一個(gè)非常全面的SOA基礎(chǔ)框架颠放,當(dāng)當(dāng)網(wǎng)在Dubbo基礎(chǔ)上新增了一些功能,并將其命名為Dubbox(Dubbo eXtensions)运准。

為什么需要Dubbo娶靡?

以前所有的業(yè)務(wù)處理,都在一個(gè)系統(tǒng)當(dāng)中奈应;

接著痒留,這個(gè)大系統(tǒng)按照業(yè)務(wù)領(lǐng)域劃分為N個(gè)業(yè)務(wù)系統(tǒng);

各個(gè)業(yè)務(wù)系統(tǒng)之間不可避免需要交互听哭,采用什么呢慢洋?HTTP的方式塘雳?WebService?...

我們將面臨很多URL的管理普筹,服務(wù)之間的調(diào)用鏈败明,依賴關(guān)系,服務(wù)的負(fù)載均衡太防、監(jiān)控等等

Dubbo是什么妻顶?

Dubbo本質(zhì)上就是一個(gè)分布式服務(wù)調(diào)用的東西,高性能透明化的RPC調(diào)用方案 + SOA服務(wù)治理方案蜒车。

Dubbo的架構(gòu):

Dubbo的架構(gòu)

第一讳嘱,Dubbo有一個(gè)注冊(cè)中心Registry的概念,服務(wù)的提供者Provider將服務(wù)注冊(cè)到Registry酿愧,消費(fèi)者Consumer需要從Registry中發(fā)現(xiàn)沥潭、監(jiān)聽(tīng)到服務(wù)的變動(dòng);

第二嬉挡,Provider需要運(yùn)行在Container容器中钝鸽,另外Dubbo提供Monitor來(lái)對(duì)服務(wù)的調(diào)用次數(shù)以及調(diào)用時(shí)間進(jìn)行監(jiān)控。

第三庞钢,常用的Registry有Zookeeper拔恰,Redis等;博主將采用Zookeeper作為注冊(cè)中心基括。(可以參考:《分布式利器Zookeeper(一)》

OK颜懊,說(shuō)了一些理論,咱們快速開(kāi)始吧阱穗!

QuickStart?

這里我將為大家演示一個(gè)訂單服務(wù)調(diào)用商品服務(wù)的Demo饭冬。

商品服務(wù):ProductService

我們先來(lái)看看商品服務(wù)的工程結(jié)構(gòu):

ProductService

ProductService工程,下面分為2個(gè)Module:一個(gè)是product-api揪阶,一個(gè)是product-service昌抠。要知道,所謂的發(fā)布服務(wù)鲁僚,就是將接口對(duì)外暴露炊苫,生產(chǎn)者和消費(fèi)者都是需要引用接口的,所以在這里接口將在product-api中提供冰沙。


對(duì)外暴露的接口

在product-service模塊中依賴product-api并實(shí)現(xiàn)接口:

product-service:pom.xml


接口的具體實(shí)現(xiàn)

注意Product需要實(shí)現(xiàn)序列化Serializable接口侨艾。


product-service.xml

從XML中你可以發(fā)現(xiàn),我們需要在product-service模塊中依賴dubbo拓挥、Zookeeper唠梨、Curator。(我這里就不貼XML呢)

每一個(gè)服務(wù)都有一個(gè)Name侥啤,其實(shí)也可以指定Owner当叭。

注冊(cè)中心采用Zookeeper茬故,客戶端采用Curator框架。

Dubbo其實(shí)是支持很多協(xié)議蚁鳖,上述指明了是采用Dubbo協(xié)議磺芭,對(duì)外的服務(wù)端口是20880。

我們需要發(fā)布服務(wù)醉箕,就是向Zookeeper注冊(cè)钾腺,告訴我們對(duì)外提供的接口是什么,以及該接口對(duì)應(yīng)的服務(wù)實(shí)現(xiàn)是什么讥裤。

啟動(dòng)商品服務(wù):

dubbo提供Main方式啟動(dòng)服務(wù)

這種啟動(dòng)方式到底做了些什么放棒?從哪里讀取的配置文件?啟動(dòng)又是怎么回事呢坞琴?

我們稍微來(lái)看一看源碼:

容器啟動(dòng)服務(wù)

看SpringContainer如何啟動(dòng):

注意默認(rèn)掃描的位置


通過(guò)wait進(jìn)行阻塞哨查,使得服務(wù)一直可用!

OK剧辐,到這里,商品服務(wù)已經(jīng)就緒了邮府!

訂單服務(wù):OrderService

先看依賴:

OrderService:pom.xml

注意訂單服務(wù)需要依賴product-api荧关。

看dubbo配置:

spring-dubbo.xml

消費(fèi)者啟動(dòng):

掃描配置文件,啟動(dòng)Spring容器褂傀,進(jìn)行接口調(diào)用

消費(fèi)者運(yùn)行結(jié)果:

就如同本地調(diào)用似的

看Zookeeper:

注冊(cè)什么鬼忍啤?

在Zookeeper中看得很清楚,接口將以目錄節(jié)點(diǎn)的形式創(chuàng)建仙辟,providers下面就是接口協(xié)議同波,分機(jī)器,分協(xié)議叠国,從而可以實(shí)現(xiàn)負(fù)載均衡未檩!

dubbo-admin管控臺(tái)

如同rocketmq一樣,dubbo也提供給了dubbo-admin.war粟焊,直接部署到Tomcat下冤狡,并修改下dubbo.properties指定好注冊(cè)中心地址即可。


web管控臺(tái)


小結(jié)

透明化的遠(yuǎn)程調(diào)用项棠,如同調(diào)用本地方法一樣悲雳,只需要簡(jiǎn)單配置,沒(méi)有任何API侵入香追!

我們可以平滑的增加合瓢、減少機(jī)器,消費(fèi)者能夠動(dòng)態(tài)的查找到服務(wù)提供方透典,使得我們的服務(wù)避免了單點(diǎn)問(wèn)題晴楔,強(qiáng)大的容錯(cuò)機(jī)制以及軟負(fù)載能力(要知道硬件負(fù)載器F5是很貴的)顿苇。

dubbo和Spring結(jié)合緊密,透明化的接入應(yīng)用滥崩!


一些思考

本篇博客不可能將Dubbo全部的特性岖圈、配置都講解完,因此這里提出一些問(wèn)題钙皮,來(lái)和大家一起思考學(xué)習(xí):

1.A服務(wù)依賴B服務(wù)蜂科,如果B服務(wù)沒(méi)有啟動(dòng)或者禁用,A服務(wù)是否能夠啟動(dòng)短条?Dubbo是否會(huì)替我們做服務(wù)依賴調(diào)用檢查呢导匣?

2.我們是否可以繞開(kāi)注冊(cè)中心,直接調(diào)用呢茸时?

3.考慮這樣一種情況贡定,如果A調(diào)用B,出現(xiàn)了網(wǎng)絡(luò)抖動(dòng)可都,調(diào)用異常缓待,這個(gè)時(shí)候dubbo是否會(huì)替我們重試調(diào)用?如果dubbo有重試機(jī)制渠牲,那么是否意味著存在重復(fù)調(diào)用旋炒?如果我們的服務(wù)是一個(gè)對(duì)數(shù)據(jù)庫(kù)的操作,那么這種重試機(jī)制是否會(huì)造成影響或是問(wèn)題签杈?我們應(yīng)該如何處理瘫镇?(好像想起了RocketMQ的一些事情....哈哈)

4.dubbo提供了哪些負(fù)載均衡的機(jī)制?可以具體到每一個(gè)方法么答姥?

5.服務(wù)的調(diào)用铣除,到了Server端,最后肯定是要走線程池進(jìn)行調(diào)用的鹦付,那么我們根據(jù)不同場(chǎng)景可以對(duì)線程池進(jìn)行定制么尚粘?


端午快樂(lè)~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市睁壁,隨后出現(xiàn)的幾起案子背苦,更是在濱河造成了極大的恐慌,老刑警劉巖潘明,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件行剂,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡钳降,警方通過(guò)查閱死者的電腦和手機(jī)厚宰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人铲觉,你說(shuō)我怎么就攤上這事澈蝙。” “怎么了撵幽?”我有些...
    開(kāi)封第一講書人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵灯荧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我盐杂,道長(zhǎng)逗载,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任链烈,我火速辦了婚禮厉斟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘强衡。我一直安慰自己擦秽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布漩勤。 她就那樣靜靜地躺著感挥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪越败。 梳的紋絲不亂的頭發(fā)上链快,一...
    開(kāi)封第一講書人閱讀 51,610評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音眉尸,去河邊找鬼。 笑死巨双,一個(gè)胖子當(dāng)著我的面吹牛噪猾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播筑累,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼袱蜡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了慢宗?” 一聲冷哼從身側(cè)響起坪蚁,我...
    開(kāi)封第一講書人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎镜沽,沒(méi)想到半個(gè)月后敏晤,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缅茉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年嘴脾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡译打,死狀恐怖耗拓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奏司,我是刑警寧澤乔询,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站韵洋,受9級(jí)特大地震影響竿刁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜麻献,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一们妥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧勉吻,春花似錦监婶、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至短纵,卻和暖如春带污,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背香到。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工鱼冀, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人悠就。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓千绪,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親梗脾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子荸型,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355

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