分布式六仅醇、分布式服務(wù)治理之初識(shí)dubbo

Valentine 轉(zhuǎn)載請(qǐng)標(biāo)明出處冗美。

背景

示例圖
單一應(yīng)用架構(gòu)

當(dāng)網(wǎng)站流量很小時(shí),只需一個(gè)應(yīng)用析二,將所有功能都部署在一起粉洼,以減少部署節(jié)點(diǎn)和成本节预。此時(shí),用于簡(jiǎn)化增刪改查工作量的數(shù)據(jù)訪問框架(ORM)是關(guān)鍵属韧。

垂直應(yīng)用架構(gòu)

當(dāng)訪問量逐漸增大安拟,單一應(yīng)用增加機(jī)器帶來的加速度越來越小,將應(yīng)用拆成互不相干的幾個(gè)應(yīng)用挫剑,以提升效率去扣。此時(shí),用于加速前端頁(yè)面開發(fā)的Web框架(MVC)是關(guān)鍵樊破。

分布式服務(wù)架構(gòu)

當(dāng)垂直應(yīng)用越來越多愉棱,應(yīng)用之間交互不可避免,將核心業(yè)務(wù)抽取出來哲戚,作為獨(dú)立的服務(wù)奔滑,逐漸形成穩(wěn)定的服務(wù)中心,使前端應(yīng)用能更快速的響應(yīng)多變的市場(chǎng)需求顺少。此時(shí)朋其,用于提高業(yè)務(wù)復(fù)用及整合的分布式服務(wù)框架(RPC)是關(guān)鍵。

流動(dòng)計(jì)算架構(gòu)

當(dāng)服務(wù)越來越多脆炎,容量的評(píng)估梅猿,小服務(wù)資源的浪費(fèi)等問題逐漸顯現(xiàn),此時(shí)需增加一個(gè)調(diào)度中心基于訪問壓力實(shí)時(shí)管理集群容量秒裕,提高集群利用率袱蚓。此時(shí),用于提高機(jī)器利用率的資源調(diào)度和治理中心(SOA->Service-Oriented Architecture)是關(guān)鍵几蜻。

需求


在大規(guī)模服務(wù)化之前喇潘,應(yīng)用可能只是通過 RMI 或 Hessian 等工具,簡(jiǎn)單的暴露和引用遠(yuǎn)程服務(wù)梭稚,通過配置服務(wù)的URL地址進(jìn)行調(diào)用颖低,通過 F5 等硬件進(jìn)行負(fù)載均衡。

當(dāng)服務(wù)越來越多時(shí)弧烤,服務(wù) URL 配置管理變得非常困難忱屑,F(xiàn)5 硬件負(fù)載均衡器的單點(diǎn)壓力也越來越大。 此時(shí)需要一個(gè)服務(wù)注冊(cè)中心暇昂,動(dòng)態(tài)的注冊(cè)和發(fā)現(xiàn)服務(wù)想幻,使服務(wù)的位置透明。并通過在消費(fèi)方獲取服務(wù)提供方地址列表话浇,實(shí)現(xiàn)軟負(fù)載均衡和 Failover脏毯,降低對(duì) F5 硬件負(fù)載均衡器的依賴,也能減少部分成本幔崖。

當(dāng)進(jìn)一步發(fā)展食店,服務(wù)間依賴關(guān)系變得錯(cuò)蹤復(fù)雜渣淤,甚至分不清哪個(gè)應(yīng)用要在哪個(gè)應(yīng)用之前啟動(dòng),架構(gòu)師都不能完整的描述應(yīng)用的架構(gòu)關(guān)系吉嫩。 這時(shí)价认,需要自動(dòng)畫出應(yīng)用間的依賴關(guān)系圖,以幫助架構(gòu)師理清理關(guān)系自娩。

接著用踩,服務(wù)的調(diào)用量越來越大,服務(wù)的容量問題就暴露出來忙迁,這個(gè)服務(wù)需要多少機(jī)器支撐脐彩?什么時(shí)候該加機(jī)器? 為了解決這些問題姊扔,第一步惠奸,要將服務(wù)現(xiàn)在每天的調(diào)用量,響應(yīng)時(shí)間恰梢,都統(tǒng)計(jì)出來佛南,作為容量規(guī)劃的參考指標(biāo)。其次嵌言,要可以動(dòng)態(tài)調(diào)整權(quán)重嗅回,在線上,將某臺(tái)機(jī)器的權(quán)重一直加大摧茴,并在加大的過程中記錄響應(yīng)時(shí)間的變化绵载,直到響應(yīng)時(shí)間到達(dá)閾值,記錄此時(shí)的訪問量蓬蝶,再以此訪問量乘以機(jī)器數(shù)反推總?cè)萘俊?/p>

以上是 Dubbo 最基本的幾個(gè)需求。

架構(gòu)


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

調(diào)用關(guān)系說明

0猜惋、服務(wù)容器負(fù)責(zé)啟動(dòng)丸氛,加載,運(yùn)行服務(wù)提供者著摔。
1缓窜、服務(wù)提供者在啟動(dòng)時(shí),向注冊(cè)中心注冊(cè)自己提供的服務(wù)谍咆。
2禾锤、服務(wù)消費(fèi)者在啟動(dòng)時(shí),向注冊(cè)中心訂閱自己所需的服務(wù)摹察。
3恩掷、注冊(cè)中心返回服務(wù)提供者地址列表給消費(fèi)者,如果有變更供嚎,注冊(cè)中心將基于長(zhǎng)連接推送變更數(shù)據(jù)給消費(fèi)者黄娘。
4峭状、服務(wù)消費(fèi)者,從提供者地址列表中逼争,基于軟負(fù)載均衡算法优床,選一臺(tái)提供者進(jìn)行調(diào)用,如果調(diào)用失敗誓焦,再選另一臺(tái)調(diào)用胆敞。
5、服務(wù)消費(fèi)者和提供者杂伟,在內(nèi)存中累計(jì)調(diào)用次數(shù)和調(diào)用時(shí)間移层,定時(shí)每分鐘發(fā)送一次統(tǒng)計(jì)數(shù)據(jù)到監(jiān)控中心。

Dubbo 架構(gòu)具有以下幾個(gè)特點(diǎn)稿壁,分別是連通性幽钢、健壯性、伸縮性傅是、以及向未來架構(gòu)的升級(jí)性匪燕。

連通性

1、注冊(cè)中心負(fù)責(zé)服務(wù)地址的注冊(cè)與查找喧笔,相當(dāng)于目錄服務(wù)帽驯,服務(wù)提供者和消費(fèi)者只在啟動(dòng)時(shí)與注冊(cè)中心交互,注冊(cè)中心不轉(zhuǎn)發(fā)請(qǐng)求书闸,壓力較小尼变。
2、監(jiān)控中心負(fù)責(zé)統(tǒng)計(jì)各服務(wù)調(diào)用次數(shù)浆劲,調(diào)用時(shí)間等嫌术,統(tǒng)計(jì)先在內(nèi)存匯總后每分鐘一次發(fā)送到監(jiān)控中心服務(wù)器,并以報(bào)表展示牌借。
3度气、服務(wù)提供者向注冊(cè)中心注冊(cè)其提供的服務(wù),并匯報(bào)調(diào)用時(shí)間到監(jiān)控中心膨报,此時(shí)間不包含網(wǎng)絡(luò)開銷磷籍。
4、服務(wù)消費(fèi)者向注冊(cè)中心獲取服務(wù)提供者地址列表现柠,并根據(jù)負(fù)載算法直接調(diào)用提供者院领,同時(shí)匯報(bào)調(diào)用時(shí)間到監(jiān)控中心,此時(shí)間包含網(wǎng)絡(luò)開銷够吩。
5比然、注冊(cè)中心,服務(wù)提供者周循,服務(wù)消費(fèi)者三者之間均為長(zhǎng)連接谈秫,監(jiān)控中心除外扒寄。
6、注冊(cè)中心通過長(zhǎng)連接感知服務(wù)提供者的存在拟烫,服務(wù)提供者宕機(jī)该编,注冊(cè)中心將立即推送事件通知消費(fèi)者。
7硕淑、注冊(cè)中心和監(jiān)控中心全部宕機(jī)课竣,不影響已運(yùn)行的提供者和消費(fèi)者,消費(fèi)者在本地緩存了提供者列表置媳。
8于樟、注冊(cè)中心和監(jiān)控中心都是可選的,服務(wù)消費(fèi)者可以直連服務(wù)提供者拇囊。

健壯性

1迂曲、監(jiān)控中心宕掉不影響使用,只是丟失部分采樣數(shù)據(jù)寥袭。
2路捧、數(shù)據(jù)庫(kù)宕掉后,注冊(cè)中心仍能通過緩存提供服務(wù)列表查詢传黄,但不能注冊(cè)新服務(wù)杰扫。
3、注冊(cè)中心對(duì)等集群膘掰,任意一臺(tái)宕掉后章姓,將自動(dòng)切換到另一臺(tái)。
4识埋、注冊(cè)中心全部宕掉后凡伊,服務(wù)提供者和服務(wù)消費(fèi)者仍能通過本地緩存通訊。
5窒舟、服務(wù)提供者無狀態(tài)系忙,任意一臺(tái)宕掉后,不影響使用辜纲。
6笨觅、服務(wù)提供者全部宕掉后拦耐,服務(wù)消費(fèi)者應(yīng)用將無法使用耕腾,并無限次重連等待服務(wù)提供者恢復(fù)。

伸縮性

1杀糯、注冊(cè)中心為對(duì)等集群扫俺,可動(dòng)態(tài)增加機(jī)器部署實(shí)例,所有客戶端將自動(dòng)發(fā)現(xiàn)新的注冊(cè)中心固翰。
2狼纬、服務(wù)提供者無狀態(tài)羹呵,可動(dòng)態(tài)增加機(jī)器部署實(shí)例,注冊(cè)中心將推送新的服務(wù)提供者信息給消費(fèi)者疗琉。

升級(jí)性

當(dāng)服務(wù)集群規(guī)模進(jìn)一步擴(kuò)大冈欢,帶動(dòng)IT治理結(jié)構(gòu)進(jìn)一步升級(jí),需要實(shí)現(xiàn)動(dòng)態(tài)部署盈简,進(jìn)行流動(dòng)計(jì)算凑耻,現(xiàn)有分布式服務(wù)架構(gòu)不會(huì)帶來阻力。下圖是未來可能的一種架構(gòu):



Deployer:自動(dòng)部署服務(wù)的本地代理
Repository:倉(cāng)庫(kù)用于存儲(chǔ)服務(wù)應(yīng)用發(fā)布包
Scheduler:調(diào)度中心基于訪問壓力自動(dòng)增減服務(wù)提供者
Admin:統(tǒng)一管理控制臺(tái)
Registry:服務(wù)注冊(cè)與發(fā)現(xiàn)的注冊(cè)中心
Monitor:統(tǒng)計(jì)服務(wù)的調(diào)用次數(shù)和調(diào)用時(shí)間的監(jiān)控中心

用法

本地服務(wù) Spring 配置

local.xml:

<bean id=“xxxService” class=“com.xxx.XxxServiceImpl” />
<bean id=“xxxAction” class=“com.xxx.XxxAction”>
    <property name=“xxxService” ref=“xxxService” />
</bean>
遠(yuǎn)程服務(wù) Spring 配置

在本地服務(wù)的基礎(chǔ)上柠贤,只需做簡(jiǎn)單配置香浩,即可完成遠(yuǎn)程化:

將上面的 local.xml 配置拆分成兩份,將服務(wù)定義部分放在服務(wù)提供方 remote-provider.xml臼勉,將服務(wù)引用部分放在服務(wù)消費(fèi)方 remote-consumer.xml邻吭。
并在提供方增加暴露服務(wù)配置 <dubbo:service>,在消費(fèi)方增加引用服務(wù)配置 <dubbo:reference>宴霸。
remote-provider.xml:

<!-- 和本地服務(wù)一樣實(shí)現(xiàn)遠(yuǎn)程服務(wù) -->
<bean id=“xxxService” class=“com.xxx.XxxServiceImpl” /> 
<!-- 增加暴露遠(yuǎn)程服務(wù)配置 -->
<dubbo:service interface=“com.xxx.XxxService” ref=“xxxService” /> 

remote-consumer.xml:

<!-- 增加引用遠(yuǎn)程服務(wù)配置 -->
<dubbo:reference id=“xxxService” interface=“com.xxx.XxxService” />
<!-- 和本地服務(wù)一樣使用遠(yuǎn)程服務(wù) -->
<bean id=“xxxAction” class=“com.xxx.XxxAction”> 
    <property name=“xxxService” ref=“xxxService” />
</bean>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末囱晴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子猖败,更是在濱河造成了極大的恐慌速缆,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恩闻,死亡現(xiàn)場(chǎng)離奇詭異艺糜,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)幢尚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門破停,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人尉剩,你說我怎么就攤上這事真慢。” “怎么了理茎?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵黑界,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我皂林,道長(zhǎng)朗鸠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任础倍,我火速辦了婚禮烛占,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己忆家,他們只是感情好犹菇,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著芽卿,像睡著了一般揭芍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上卸例,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天沼沈,我揣著相機(jī)與錄音,去河邊找鬼币厕。 笑死列另,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的旦装。 我是一名探鬼主播页衙,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼阴绢!你這毒婦竟也來了店乐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤呻袭,失蹤者是張志新(化名)和其女友劉穎眨八,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體左电,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡廉侧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了篓足。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片段誊。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖栈拖,靈堂內(nèi)的尸體忽然破棺而出连舍,到底是詐尸還是另有隱情,我是刑警寧澤涩哟,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布索赏,位于F島的核電站,受9級(jí)特大地震影響贴彼,放射性物質(zhì)發(fā)生泄漏潜腻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一锻弓、第九天 我趴在偏房一處隱蔽的房頂上張望砾赔。 院中可真熱鬧蝌箍,春花似錦青灼、人聲如沸暴心。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽专普。三九已至,卻和暖如春弹沽,著一層夾襖步出監(jiān)牢的瞬間檀夹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工策橘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留炸渡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓丽已,卻偏偏與公主長(zhǎng)得像蚌堵,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子沛婴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

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