Dubbo-LoadBalance

策略:RandomLoadBalance,RoundRobinLoadBalance,ConsistentHashLoadBalance,LeastActiveLoadBalance

======= LoadBalance ======

Invokerselect(List> invokers, URL url, Invocation invocation)

======== AbstractLoadBalance =======

weight: 權(quán)重,默認是100锄弱,

uptime:invoker運行時間 = 當(dāng)前系統(tǒng)時間 - invoker運行時間

warmup:invoker預(yù)熱時間,默認是10 * 60 * 1000 = 10min

uptime>0 && uptime < warmup => calculateWarmupWeight

即當(dāng)invoker運行時間小于10min祸憋,則需要計算權(quán)重会宪,運行時間大于10min,權(quán)重直接是默認100

protected int getWeight(Invoker?invoker, Invocation invocation) {?

?int weight = invoker.getUrl().getMethodParameter(invocation.getMethodName(), Constants.WEIGHT_KEY, Constants.DEFAULT_WEIGHT);

?if (weight > 0) { long timestamp = invoker.getUrl().getParameter(Constants.TIMESTAMP_KEY, 0L); if (timestamp > 0L) { int uptime = (int) (System.currentTimeMillis() - timestamp); int warmup = invoker.getUrl().getParameter(Constants.WARMUP_KEY, Constants.DEFAULT_WARMUP); if (uptime > 0 && uptime < warmup) { weight = calculateWarmupWeight(uptime, warmup, weight); } } } return weight;}

//計算權(quán)重

計算規(guī)則很簡單:uptime/(warmup/weight) = (uptime/warmup) * weight蚯窥,運行時間/默認預(yù)熱時間 * 100也就是說當(dāng)invoker運行時間小于10min時掸鹅,invoker的運行時間越長,其權(quán)重越高static int calculateWarmupWeight(int uptime, int warmup, int weight) { int ww = (int) ( (float) uptime / ( (float) warmup / (float) weight ) ); return ww < 1 ? 1 : (ww > weight ? weight : ww);}

======= RandomLoadBalance ======

選擇算法拦赠,也比較簡單//若權(quán)重都一樣河劝,則隨機選擇其中一個invoker//若權(quán)重不一樣,則在0 - totalWeight 中生成一個隨機數(shù)矛紫,判斷落在哪個片段示意圖:權(quán)重:invoker0=100,invoker1=90,invoker2=80,invoker3=70,則totalWeight=100+90+80+70=340轉(zhuǎn)換成圖表牌里,0-100 區(qū)段屬于invoker0,100-190屬于invoker1 ..若生成隨機數(shù)random=260颊咬,屬于2區(qū)段,則選中invoker2 protectedInvokerdoSelect(List> invokers, URL url, Invocation invocation) {

? ? int length = invokers.size(); // 總個數(shù)

? ? int totalWeight = 0; // 總權(quán)重

? ? boolean sameWeight = true; // 權(quán)重是否都一樣

? ? for (int i = 0; i < length; i++) {

? ? ? ? int weight = getWeight(invokers.get(i), invocation);

? ? ? ? totalWeight += weight; // 累計總權(quán)重

? ? ? ? if (sameWeight && i > 0

? ? ? ? ? ? ? ? && weight != getWeight(invokers.get(i - 1), invocation)) {

? ? ? ? ? ? sameWeight = false; // 計算所有權(quán)重是否一樣

? ? ? ? }

? ? }

? ? if (totalWeight > 0 && ! sameWeight) {

? ? ? ? // 如果權(quán)重不相同且權(quán)重大于0則按總權(quán)重數(shù)隨機

? ? ? ? int offset = random.nextInt(totalWeight);

? ? ? ? // 并確定隨機值落在哪個片斷上

? ? ? ? for (int i = 0; i < length; i++) {

? ? ? ? ? ? offset -= getWeight(invokers.get(i), invocation);

? ? ? ? ? ? if (offset < 0) {

? ? ? ? ? ? ? ? return invokers.get(i);

? ? ? ? ? ? }

? ? ? ? }

? ? }

? ? // 如果權(quán)重相同或權(quán)重為0則均等隨機

? ? return invokers.get(random.nextInt(length));

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末牡辽,一起剝皮案震驚了整個濱河市喳篇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌态辛,老刑警劉巖麸澜,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異奏黑,居然都是意外死亡炊邦,警方通過查閱死者的電腦和手機编矾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馁害,“玉大人窄俏,你說我怎么就攤上這事〉獠耍” “怎么了凹蜈?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵,是天一觀的道長忍啸。 經(jīng)常有香客問我仰坦,道長,這世上最難降的妖魔是什么计雌? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任悄晃,我火速辦了婚禮,結(jié)果婚禮上白粉,老公的妹妹穿的比我還像新娘传泊。我一直安慰自己,他們只是感情好鸭巴,可當(dāng)我...
    茶點故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布眷细。 她就那樣靜靜地躺著,像睡著了一般鹃祖。 火紅的嫁衣襯著肌膚如雪溪椎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天恬口,我揣著相機與錄音校读,去河邊找鬼。 笑死祖能,一個胖子當(dāng)著我的面吹牛歉秫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播养铸,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼雁芙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了钞螟?” 一聲冷哼從身側(cè)響起兔甘,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鳞滨,沒想到半個月后洞焙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年澡匪,在試婚紗的時候發(fā)現(xiàn)自己被綠了熔任。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡仙蛉,死狀恐怖笋敞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情荠瘪,我是刑警寧澤夯巷,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站哀墓,受9級特大地震影響趁餐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜篮绰,卻給世界環(huán)境...
    茶點故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一后雷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吠各,春花似錦臀突、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至纵散,卻和暖如春梳码,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背伍掀。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工掰茶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蜜笤。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓濒蒋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親把兔。 傳聞我的和親對象是個殘疾皇子啊胶,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,926評論 2 361

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