dubbo負(fù)載均衡策略

概述

? ? 本篇文章主要是想講解清楚dubbo的負(fù)載均衡策略虱朵,其中文章的內(nèi)容部分共享自網(wǎng)絡(luò)撑帖,部分來自自己的整理,目的還是跟以往一樣黎烈,將一個簡單的問題講解清楚。


負(fù)載均衡策略及優(yōu)缺點(diǎn)

? ? Dubbo 負(fù)載均衡策略提供下列四種方式:

? ? Random LoadBalance 隨機(jī),按權(quán)重設(shè)置隨機(jī)概率照棋。 Dubbo的默認(rèn)負(fù)載均衡策略

? ? ? ? 在一個截面上碰撞的概率高资溃,但調(diào)用量越大分布越均勻,而且按概率使用權(quán)重后也比較均勻烈炭,有利于動態(tài)調(diào)整提供者權(quán)重溶锭。

? ? RoundRobin LoadBalance 輪循,按公約后的權(quán)重設(shè)置輪循比率梳庆。

? ? ? ? 存在慢的提供者累積請求問題暖途,比如:第二臺機(jī)器很慢,但沒掛膏执,當(dāng)請求調(diào)到第二臺時就卡在那驻售,久而久之,所有請求都卡在調(diào)到第二臺上更米。

? ? LeastActive LoadBalance 最少活躍調(diào)用數(shù)欺栗,相同活躍數(shù)的隨機(jī),活躍數(shù)指調(diào)用前后計數(shù)差征峦。

? ? ? ? 使慢的提供者收到更少請求迟几,因為越慢的提供者的調(diào)用前后計數(shù)差會越大。

? ? ConsistentHash LoadBalance 一致性Hash栏笆,相同參數(shù)的請求總是發(fā)到同一提供者类腮。

? ? ? ? 當(dāng)某一臺提供者掛時,原本發(fā)往該提供者的請求蛉加,基于虛擬節(jié)點(diǎn)蚜枢,平攤到其它提供者,不會引起劇烈變動针饥。

負(fù)載均衡類圖


Random負(fù)載均衡策略

? ? 負(fù)載均衡策略也分為權(quán)重相同和權(quán)重不相同兩種情況進(jìn)行處理厂抽,整個代碼處理是先計算各個invoker(provider)的權(quán)重,判定權(quán)重是否相等以及總權(quán)重是多少丁眼。

? ? 如果權(quán)重不相等筷凤,那么我們就對總權(quán)重進(jìn)行隨機(jī)取值(通過random.nextInt實(shí)現(xiàn)),然后遍歷invokers將隨機(jī)的權(quán)重值減去每個invoker的權(quán)重苞七,如果得出的結(jié)果為負(fù)數(shù)說明由該invoker提供服務(wù)藐守。

? ? 如果權(quán)重相等,那么就通過random.nextInt()在所有的invoker當(dāng)中隨機(jī)選擇一個invoker就可以了蹂风。

隨機(jī)負(fù)載均衡策略

RoundRobin負(fù)載均衡策略

? ? 輪詢負(fù)載均衡策略分為權(quán)重相同和權(quán)重不同兩種策略吗伤,整個代碼遍歷所有invoker的權(quán)重求出最小最大權(quán)重以及權(quán)重之和。

? ? 針對每個方法硫眨,我們會維持一個sequences對象,這個其實(shí)就是一個atomic類的整數(shù)類型計數(shù)。每次進(jìn)來的時候會循環(huán)遞增礁阁。

? ? 針對權(quán)重不相同的情況巧号,我們外層循環(huán)按照最大權(quán)重去循環(huán),內(nèi)層循環(huán)是invoker的個數(shù)姥闭,這里其實(shí)我們要記住由于我們總權(quán)重是把所有invoker的權(quán)重相加丹鸿,而循環(huán)是拿最大權(quán)重*所有invoker的個數(shù),所以后者肯定大于前者棚品。

? ? 權(quán)重不同的舉個例子靠欢,假設(shè)invoker A權(quán)重400,invoker B權(quán)重為100铜跑,invoker C權(quán)重為100门怪,這個時候假設(shè)mod為300,那么在遍歷A,B,C過程中我們會將mod進(jìn)行遞減锅纺,invoker A掷空、B、C遞減囤锉,最后發(fā)現(xiàn)invoker剩余300坦弟,最后返回invoker A,這里的關(guān)鍵是遞減那部分邏輯很重要官地。

? ? 針對權(quán)重相同的情況其實(shí)就是我們常見的i++%invoker個數(shù)酿傍。

輪詢負(fù)載均衡策略

LeastActive負(fù)載均衡策略

? ? 最小active的負(fù)載均衡策略也分為有權(quán)重和沒有權(quán)重兩種情況,整體思路是每次在所有invoker中獲取active最低的個數(shù)驱入,然后后面的invoker選擇就在最低active的集群當(dāng)中選擇赤炒。

? ? 有權(quán)重和沒有權(quán)重的最低active選擇都是基于上面說的數(shù)組,舉個例子沧侥,假如現(xiàn)在有4個invoker可霎,然后具備最低active的invoker有2個,那么后面我們就在最低active的2個invoker進(jìn)行選擇宴杀。

? ? 帶權(quán)重的選擇就是根據(jù)最低active的權(quán)重和隨機(jī)生成一個隨機(jī)權(quán)重癣朗,然后遍歷最低active的數(shù)目,每次減去invoker的權(quán)重旺罢,當(dāng)權(quán)重為負(fù)數(shù)的時候就以該invoker提供服務(wù)旷余。

? ? 不帶權(quán)重的選擇就是根據(jù)最低active的數(shù)量通過random.nextInt方式隨機(jī)返回一個invoker就可以。

ConsistentHash負(fù)載均衡策略

? ? 一致性hash的負(fù)載均衡策略其實(shí)就跟一致性hash的原理一樣扁达,主要也是分成生成虛擬節(jié)點(diǎn)和選擇節(jié)點(diǎn)提供服務(wù)正卧。

? ? 首先我們先生成invoker也就是服務(wù)接口對應(yīng)的selector,原則是沒有就生成一個跪解。每個invoker虛擬節(jié)點(diǎn)的生成的原則很簡單:會根據(jù)虛擬節(jié)點(diǎn)設(shè)置的個數(shù)/4進(jìn)行外層循環(huán)炉旷,以4進(jìn)行內(nèi)層循環(huán)生成。

? ? 其次我們提取請求中攜帶的參數(shù)(因為我們規(guī)定了按照哪些參數(shù)進(jìn)行hash)生成hash值,然后選擇對應(yīng)的虛擬節(jié)點(diǎn)(如果存在這個hash值)窘行,或者選擇大于該值的第一個虛擬節(jié)點(diǎn)的值饥追,最后去選擇對應(yīng)的invoker。

選擇hash過程


生成虛擬節(jié)點(diǎn)


根據(jù)參數(shù)選擇節(jié)點(diǎn)


負(fù)載均衡之源碼debug

? ? 1罐盔、先本地啟動zookeeper的注冊中心? ?

? ? 2但绕、直接復(fù)用dubbo的源碼,我們需要修改provider里面的properties然后啟動多個provider惶看,只有多個provider才能調(diào)試負(fù)載均衡策略捏顺。

? ? 3、consumer直接進(jìn)行debug跟蹤即可纬黎。

debug方案
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末幅骄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子莹桅,更是在濱河造成了極大的恐慌昌执,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诈泼,死亡現(xiàn)場離奇詭異懂拾,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)铐达,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門岖赋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瓮孙,你說我怎么就攤上這事唐断。” “怎么了杭抠?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵脸甘,是天一觀的道長。 經(jīng)常有香客問我偏灿,道長丹诀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任翁垂,我火速辦了婚禮铆遭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘沿猜。我一直安慰自己枚荣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布啼肩。 她就那樣靜靜地躺著橄妆,像睡著了一般衙伶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上呼畸,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天痕支,我揣著相機(jī)與錄音,去河邊找鬼蛮原。 笑死,一個胖子當(dāng)著我的面吹牛另绩,可吹牛的內(nèi)容都是我干的儒陨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼笋籽,長吁一口氣:“原來是場噩夢啊……” “哼蹦漠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起车海,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤笛园,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后侍芝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體研铆,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年州叠,在試婚紗的時候發(fā)現(xiàn)自己被綠了棵红。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡咧栗,死狀恐怖逆甜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情致板,我是刑警寧澤交煞,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站斟或,受9級特大地震影響素征,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缕粹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一稚茅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧平斩,春花似錦亚享、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽侈沪。三九已至,卻和暖如春晚凿,著一層夾襖步出監(jiān)牢的瞬間亭罪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工歼秽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留应役,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓燥筷,卻偏偏與公主長得像箩祥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子肆氓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評論 2 354

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