Dubbo特性一覽

1. 功能特性一覽

- 實現(xiàn)rpc調(diào)用逻卖,像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程server上的方法

- 支持多協(xié)議:(Dubbo形纺、Rmi、Http危彩、Webservice攒磨、Redis等等)用戶可以根據(jù)業(yè)務(wù)場景選擇合適的協(xié)議

- 并發(fā)高性能:默認(rèn)Dubbo協(xié)議支持,Netty實現(xiàn)汤徽,Provider娩缰、Consumer、Register之間彼此保持長連接

- 解耦和伸縮性:利用注冊中心谒府,實現(xiàn)Provider和Consumer之間解耦拼坎,也實現(xiàn)Providers之間的解耦浮毯,從而實現(xiàn)靈活的擴(kuò)展和縮容

- 負(fù)載均衡:4種策略配合權(quán)重,而且支持代碼配置和Dubbo控制臺動態(tài)配置

- 高可用:利用注冊中心發(fā)現(xiàn)功能泰鸡,一個provider掛了的話债蓝,會自動被剔除掉,保證服務(wù)器繼續(xù)對外提供服務(wù)盛龄,如果重新provider重新恢復(fù)的話饰迹,又恢復(fù)到服務(wù)提供隊列當(dāng)中了

- 容錯: 支持failover、failfast余舶、forking等容錯機(jī)制啊鸭,引入retry和timeout參數(shù)配置

- 并發(fā)控制:服務(wù)端(executors、accepts參數(shù))和消費端(actives)都支持不同形式的并發(fā)控制

- 調(diào)用結(jié)果緩存:消費端支持配置3種策略的結(jié)果緩存

- 異步調(diào)用:支持阻塞和非阻塞將來式返回Future對象的兩種調(diào)用方式

- 支持權(quán)限配置功能:比如白名單功能


2.?Dubbo 原理淺析(基于Dubbo協(xié)議)

看起來像是BIO阻塞欧芽,其實是異步的NIO

1. 每個Provider就是一個Nio的Server莉掂,內(nèi)部機(jī)制由Netty實現(xiàn)(也可以是Mina等)葛圃,兩個線程組工作千扔。Provider啟動的時候,結(jié)合注冊中心库正,暴露對外服務(wù)曲楚。

2. Consumer的一個線程發(fā)起請求,會獲取一個全局的線程ID褥符,然后會把該請求的接口名稱龙誊、方法名稱、參數(shù)值等信息封裝成一個object的對象

3. 把 ID,請求Object放在全局的ConcurrentHashMap里面喷楣,發(fā)起異步的調(diào)用趟大,自身用object為鎖對象,wait請求線程進(jìn)入阻塞狀態(tài)

4. 調(diào)用成功后铣焊,觸發(fā)客戶端的監(jiān)聽逊朽,然后根據(jù)全局ConcurrentHashMap中ID找到object,設(shè)置好返回值和回調(diào)方法的時候曲伊,notifyAll調(diào)用的阻塞線程叽讳,完成調(diào)用


3. Dubbo的容錯性

通過在consumer里面配置策略,來實現(xiàn)不同的容錯措施坟募,只羅列了3種

I.?failover 超時失敗自動切換 (缺省值岛蚤,默認(rèn)失敗后再重試2次)(會導(dǎo)致重復(fù)寫)

這種方式通常用于讀操作,而不是寫操作. 因為用在寫操作,可能為導(dǎo)致重復(fù)寫。

如果其中一個Provider 超時回復(fù)了懈糯,會自動切換到其他的Provider節(jié)點涤妒,業(yè)務(wù)并不會停擺,如果Provider集群中只有1個Node赚哗,則會重復(fù)調(diào)用這個Provider

如果其中一個Provider 調(diào)用報錯了她紫,則直接調(diào)用失敗铁坎,也不會去嘗試切換,這個和超時不是一個概念

<dubbo:reference id="demoService" interface="..." cluster="failover" retries="2"/>


II.?Forking 并行調(diào)用多個服務(wù)器犁苏,只要一個成功即返回硬萍。(會導(dǎo)致重復(fù)寫)

通常用于實時性要求較高的讀操作,但需要浪費更多服務(wù)資源


III.?failfast 快速失效

只發(fā)起一次調(diào)用围详,失敗立即報錯朴乖。通常用于非冪等性寫操作,比如說新增記錄助赞。

但是這里也會有問題的买羞,如果是因為網(wǎng)絡(luò)問題,Provider的響應(yīng)時間慢雹食,Consumer以為調(diào)用失敗了畜普,但是Provider卻調(diào)用成功了,涉及到分布式事務(wù)的問題群叶。

如果是因為Provider報錯的話吃挑,倒沒事,因為兩邊都顯示執(zhí)行失敗街立。


?配置的方法(配置cunsumer的配置文件):

<dubbo:reference id="demoService" interface="...” cluster="forking" />


Dubbo 負(fù)載均衡策略

一般不通過代碼xml里面配置舶衬,而是通過web界面,動態(tài)的選擇均衡策略和權(quán)重赎离,這樣更靈活

1.?Random LoadBalance逛犹,按照權(quán)重隨機(jī)分配Provider,比如隨機(jī)且權(quán)重是 2:1梁剔,那么運(yùn)行30此虽画,大約有20次在Node1上10次在Node2上。

2.?RoundRobin LoadBalance 按照權(quán)重輪詢分配荣病,如果權(quán)重一樣就按照取模码撰。比如權(quán)重2:1,那么運(yùn)行30此众雷,一定有20次在Node1上10次在Node2上灸拍。

3.?LeastActive LoadBalance 節(jié)點越活躍越分配更多,避免慢節(jié)點堆積

4.?ConsistentHash LoadBalance 對第一個參數(shù)做Hash計算砾省,每次都訪問相同的Provider節(jié)點,如果該節(jié)點掛了鸡岗,會均攤到其它節(jié)點

?配置的方式

1.?xml配置:同時支持服務(wù)端和客戶端配置(如果都配置以客戶端配置為主);不僅支持接口級別的總配置编兄,也可以具體到該接口下面的某一個方法

2.?dubbo控制臺配置轩性,不需要在代碼中配置,可以靈活調(diào)整


Dubbo 并發(fā)控制

客戶端并發(fā)控制:actives參數(shù)

參考源碼:ActiveLimitFilter

1.?設(shè)置UserServiceBo接口中所有方法狠鸳,每個方法最多同時并發(fā)請求10個請求

2.?如果客戶端請求該方法并發(fā)超過了10則客戶端會被阻塞(count.wait)揣苏,等客戶端并發(fā)請求數(shù)量少于10的時候悯嗓,該請求才會被發(fā)送到服務(wù)提供方服務(wù)器

3.?如果等待時間超時,則拋出異常,這時候服務(wù)根本都沒有發(fā)送到服務(wù)提供方服務(wù)器卸察。

<dubbo:reference interface="..." actives="10"/>


?服務(wù)端并發(fā)控制:executes參數(shù)

1.?服務(wù)端并發(fā)執(zhí)行(或占用線程池線程數(shù))不能超過10個脯厨,超過的話,直接報錯

2.?源碼參考ExecuteLimitFilter

3.?設(shè)置dubbo協(xié)議的時候坑质,支持設(shè)置最大長連接數(shù)(不同于并發(fā)執(zhí)行數(shù))

<dubbo:service interface="..." executes="10" />

<dubbo:protocol name="dubbo" accepts="1000" />


常用協(xié)議

不同服務(wù)在性能上適用不同協(xié)議進(jìn)行傳輸合武,比如大數(shù)據(jù)用短連接協(xié)議,小數(shù)據(jù)大并發(fā)用長連接協(xié)議

Dubbo協(xié)議(默認(rèn))

1. Transporter(傳輸層):mina, netty, grizzy:默認(rèn)Netty(3.2.5)

2. Serialization: Hessian2 serialization

3. 單一鏈接涡扼、長連接稼跳、TCP

4. 適合小數(shù)據(jù)量(數(shù)據(jù)小于100k)、高并發(fā)的業(yè)務(wù)場景

5. 支持自定義配置消費端長連接的個數(shù)和服務(wù)端最大支持的長連接總數(shù)

6. 默認(rèn)Dubbo協(xié)議支持:消費者吃沪、服務(wù)提供者汤善、注冊中心之間的長連接,高性能支持并發(fā)請求票彪。消費者红淡、服務(wù)提供者和監(jiān)控中心是短連接。

?rmi協(xié)議(java標(biāo)準(zhǔn)的)

1. 多連接抹镊、短連接锉屈、BIO連接荤傲、基于http協(xié)議垮耳,適合并發(fā)量不大的業(yè)務(wù)場景

2. 約束:參數(shù)和返回值必須實現(xiàn)Java的序列化


其它高級特性

?Dubbo 結(jié)果緩存(支持3種策略:LRU、FIFO遂黍、LFU)

Dubbo的緩存是在服務(wù)消費者調(diào)用端進(jìn)行配置的终佛,因為只有業(yè)務(wù)端才知道自己業(yè)務(wù),然后配置相應(yīng)的策略

<dubbo:reference id="demoService" interface="..."??cache="lru" />

白名單功能

1.?maven項目需要在resources 下創(chuàng)建 META-INF\dubbocom.alibaba.dubbo.rpc.Filter文件

dubboContextFilter=com.mor.server.dubbo.service.AuthorityFilter

2.?重寫Filter方法

Dubbo超時設(shè)置

1.?在dubbo的provider和consumer的配置文件中雾家,如果都配置了timeout的超時時間铃彰,dubbo默認(rèn)以consumer中配置的時間為準(zhǔn)

2.?默認(rèn)調(diào)用超時重試的時間: 1s,未響應(yīng)就重試芯咧。

3.?provider中代碼的執(zhí)行不會因為超時而中斷牙捉,在執(zhí)行完畢后,會得到一個dubbo的警告敬飒。所以存在分布式事務(wù)的一致性問題

<dubbo:service interface="..."? ref="helloService" timeout="300"/>


參考資料

https://blog.csdn.net/zgliang88/article/details/75440043

https://www.cnblogs.com/heben/p/7887664.html? ? ?//容錯性

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末邪铲,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子无拗,更是在濱河造成了極大的恐慌带到,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件英染,死亡現(xiàn)場離奇詭異揽惹,居然都是意外死亡被饿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門搪搏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狭握,“玉大人,你說我怎么就攤上這事疯溺「珉梗” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵喝检,是天一觀的道長嗅辣。 經(jīng)常有香客問我,道長挠说,這世上最難降的妖魔是什么澡谭? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮损俭,結(jié)果婚禮上蛙奖,老公的妹妹穿的比我還像新娘。我一直安慰自己杆兵,他們只是感情好雁仲,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著琐脏,像睡著了一般攒砖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上日裙,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天吹艇,我揣著相機(jī)與錄音,去河邊找鬼昂拂。 笑死受神,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的格侯。 我是一名探鬼主播鼻听,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼联四!你這毒婦竟也來了撑碴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤碎连,失蹤者是張志新(化名)和其女友劉穎灰羽,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡廉嚼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年玫镐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怠噪。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡恐似,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出傍念,到底是詐尸還是另有隱情矫夷,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布憋槐,位于F島的核電站双藕,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏阳仔。R本人自食惡果不足惜忧陪,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望近范。 院中可真熱鬧嘶摊,春花似錦、人聲如沸评矩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽斥杜。三九已至虱颗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間果录,已是汗流浹背上枕。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留弱恒,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓棋恼,卻偏偏與公主長得像返弹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子爪飘,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345