Dubbo - 集群容錯(cuò)、負(fù)載均衡

集群容錯(cuò)和負(fù)載均衡

集群容錯(cuò)
  1. Cluster封裝了集群的容錯(cuò)機(jī)制failover竟秫、failfast、failsafe跷乐、failback以及forking肥败。
  2. Directory管理集群中服務(wù)的List,根據(jù)注冊中心動態(tài)注冊而變化List愕提。Cluster通過獲取Directory拙吉,將List<Invoker>偽裝成一個(gè)Invoker抽象,這一過程對于調(diào)用者透明揪荣。
  3. Router負(fù)責(zé)按規(guī)則從多個(gè)Invoker中選出子集筷黔。通過Router實(shí)現(xiàn)應(yīng)用隔離、讀寫分離仗颈,即使部分服務(wù)掛掉也不會影響其它應(yīng)用佛舱。
  4. LoadBalance負(fù)責(zé)從步驟3中獲取的子集中選出具體要求執(zhí)行invoke的具體Invoker。選的過程中包含了負(fù)載均衡算法挨决。

容錯(cuò)機(jī)制分類

  • Failover Cluster

失敗自動切換请祖,當(dāng)出現(xiàn)失敗,重試其它服務(wù)器 [1]脖祈。通常用于讀操作肆捕,但重試會帶來更長延遲「歉撸可通過 retries="2" 來設(shè)置重試次數(shù)(不含第一次)慎陵。

重試次數(shù)配置如下:

<dubbo:service retries="2" />

<dubbo:reference retries="2" />

<dubbo:reference>
    <dubbo:method name="findFoo" retries="2" />
</dubbo:reference>
  • Failfast Cluster

快速失敗,只發(fā)起一次調(diào)用喻奥,失敗立即報(bào)錯(cuò)席纽。通常用于非冪等性的寫操作,比如新增記錄撞蚕。

  • Failsafe Cluster

失敗安全润梯,出現(xiàn)異常時(shí),直接忽略。通常用于寫入審計(jì)日志等操作纺铭。

  • Failback Cluster

失敗自動恢復(fù)寇钉,后臺記錄失敗請求,定時(shí)重發(fā)舶赔。通常用于消息通知操作扫倡。

  • Forking Cluster

并行調(diào)用多個(gè)服務(wù)器,只要一個(gè)成功即返回顿痪。通常用于實(shí)時(shí)性要求較高的讀操作镊辕,但需要浪費(fèi)更多服務(wù)資源油够∫舷可通過 forks="2" 來設(shè)置最大并行數(shù)。

  • Broadcast Cluster

廣播調(diào)用所有提供者石咬,逐個(gè)調(diào)用揩悄,任意一臺報(bào)錯(cuò)則報(bào)錯(cuò) [2]。通常用于通知所有提供者更新緩存或日志等本地資源信息鬼悠。

如何配置

按照以下示例在服務(wù)提供方和消費(fèi)方配置集群模式

<dubbo:service cluster="failsafe" />

<dubbo:reference cluster="failsafe" />

負(fù)載均衡算法

  • Random LoadBalance

    • 隨機(jī)删性,按權(quán)重設(shè)置隨機(jī)概率。
    • 在一個(gè)截面上碰撞的概率高焕窝,但調(diào)用量越大分布越均勻蹬挺,而且按概率使用權(quán)重后也比較均勻,有利于動態(tài)調(diào)整提供者權(quán)重它掂。
  • RoundRobin LoadBalance

    • 輪詢巴帮,按公約后的權(quán)重設(shè)置輪詢比率。
    • 存在慢的提供者累積請求的問題虐秋,比如:第二臺機(jī)器很慢榕茧,但沒掛,當(dāng)請求調(diào)到第二臺時(shí)就卡在那客给,久而久之用押,所有請求都卡在調(diào)到第二臺上。
  • LeastActive LoadBalance

    • 最少活躍調(diào)用數(shù)靶剑,相同活躍數(shù)的隨機(jī)蜻拨,活躍數(shù)指調(diào)用前后計(jì)數(shù)差。
    • 使慢的提供者收到更少請求桩引,因?yàn)樵铰奶峁┱叩恼{(diào)用前后計(jì)數(shù)差會越大官觅。
  • ConsistentHash LoadBalance

    • 一致性 Hash**,相同參數(shù)的請求總是發(fā)到同一提供者阐污。
    • 當(dāng)某一臺提供者掛時(shí)休涤,原本發(fā)往該提供者的請求,基于虛擬節(jié)點(diǎn),平攤到其它提供者功氨,不會引起劇烈變動序苏。
    • 算法參見:http://en.wikipedia.org/wiki/Consistent_hashing
    • 缺省只對第一個(gè)參數(shù) Hash,如果要修改捷凄,請配置 <dubbo:parameter key="hash.arguments" value="0,1" />
    • 缺省用 160 份虛擬節(jié)點(diǎn)忱详,如果要修改,請配置 <dubbo:parameter key="hash.nodes" value="320" />
如何配置
  • 服務(wù)端服務(wù)級別
<dubbo:service interface="..." loadbalance="roundrobin" />
  • 客戶端服務(wù)級別
<dubbo:reference interface="..." loadbalance="roundrobin" />
  • 服務(wù)端方法級別
<dubbo:service interface="...">
    <dubbo:method name="..." loadbalance="roundrobin"/>
</dubbo:service>
  • 客戶端方法級別
<dubbo:reference interface="...">
    <dubbo:method name="..." loadbalance="roundrobin"/>
</dubbo:reference>

只訂閱

在實(shí)際生產(chǎn)開發(fā)中會出現(xiàn)這樣的情況:大部分開發(fā)人員希望有一個(gè)提供所有穩(wěn)定服務(wù)的注冊中心跺涤,但又存在一些新的服務(wù)或者變更的服務(wù)需要開發(fā)聯(lián)調(diào)匈睁,對于這部分服務(wù)可以通過過直連提供者(點(diǎn)對點(diǎn)直連)。對于正在開發(fā)的服務(wù)可以只用只訂閱模式桶错,只訂閱服務(wù)航唆,而不注冊正在開發(fā)的服務(wù)。

服務(wù)只訂閱

直連提供者

配置優(yōu)先級 JVM > 文件映射 > XML配置

  • XML配置
<dubbo:reference id="xxxService" interface="com.alibaba.xxx.XxxService" url="dubbo://localhost:20890" />
  • 通過-D參數(shù)指定
// 在 JVM 啟動參數(shù)中加入-D參數(shù)映射服務(wù)地址 [2]院刁,如:
java -Dcom.alibaba.xxx.XxxService=dubbo://localhost:20890
  • 通過文件映射

如果服務(wù)比較多糯钙,也可以用文件映射,用 -Ddubbo.resolve.file 指定映射文件路徑退腥,此配置優(yōu)先級高于 <dubbo:reference> 中的配置 [3]任岸,如:

java -Ddubbo.resolve.file=xxx.properties

然后在映射文件 xxx.properties 中加入配置,其中 key 為服務(wù)名狡刘,value 為服務(wù)提供者 URL:

com.alibaba.xxx.XxxService=dubbo://localhost:20880

只注冊

假設(shè)存在兩個(gè)鏡像環(huán)境享潜,兩個(gè)注冊中心,有一個(gè)服務(wù)只在一個(gè)注冊中心A完成部署嗅蔬,在另一個(gè)注冊中心B尚未完成部署剑按,且A、B的其它應(yīng)用都需要依賴此服務(wù)购城。這個(gè)時(shí)候可以讓服務(wù)提供者只在B注冊吕座,但是不從B做服務(wù)訂閱。

<!-- 禁用服務(wù)訂閱way1 -->
<dubbo:registry id="aRegistry" address="10.20.153.10:9090" />
<dubbo:registry id="bRegistry" address="10.20.141.150:9090" subscribe="false" />

<!-- 禁用服務(wù)訂閱way2 -->
<dubbo:registry id="aRegistry" address="10.20.153.10:9090" />
<dubbo:registry id="bRegistry" address="10.20.141.150:9090?subscribe=false" />

參考:

dubbo官方文檔-集群容錯(cuò)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瘪板,一起剝皮案震驚了整個(gè)濱河市吴趴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌侮攀,老刑警劉巖锣枝,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異兰英,居然都是意外死亡撇叁,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門畦贸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來陨闹,“玉大人楞捂,你說我怎么就攤上這事∏骼鳎” “怎么了寨闹?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長君账。 經(jīng)常有香客問我繁堡,道長,這世上最難降的妖魔是什么乡数? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任椭蹄,我火速辦了婚禮,結(jié)果婚禮上净赴,老公的妹妹穿的比我還像新娘绳矩。我一直安慰自己,他們只是感情好劫侧,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布埋酬。 她就那樣靜靜地躺著哨啃,像睡著了一般烧栋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拳球,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天审姓,我揣著相機(jī)與錄音,去河邊找鬼祝峻。 笑死魔吐,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的莱找。 我是一名探鬼主播酬姆,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼奥溺!你這毒婦竟也來了辞色?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤浮定,失蹤者是張志新(化名)和其女友劉穎相满,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桦卒,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡立美,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了方灾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片建蹄。...
    茶點(diǎn)故事閱讀 40,561評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出洞慎,到底是詐尸還是另有隱情针贬,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布拢蛋,位于F島的核電站桦他,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏谆棱。R本人自食惡果不足惜快压,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望垃瞧。 院中可真熱鬧蔫劣,春花似錦、人聲如沸个从。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嗦锐。三九已至嫌松,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間奕污,已是汗流浹背萎羔。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留碳默,地道東北人贾陷。 一個(gè)月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像嘱根,于是被迫代替她去往敵國和親髓废。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評論 2 359