Dubbo | 負(fù)載均衡

預(yù)熱

  • 預(yù)熱是一個(gè)服務(wù)啟動(dòng),到承接 100% 流量之間的一種狀態(tài);
  • 預(yù)熱的越早期,服務(wù)分到的流量就越少;
  • Dubbo 在做負(fù)載均衡的時(shí)候,會(huì)獲取每個(gè) Invoker 的權(quán)重,而權(quán)重的計(jì)算,會(huì)受預(yù)熱時(shí)間的影響,預(yù)熱的越早期,Invokder 計(jì)算得到的權(quán)重就越小,Invoker 被負(fù)載均衡算法選中的概率就越??;

Dubbo 提供的 4 中負(fù)載均衡算法

  • Random(默認(rèn))
  • RoundRobin
  • LeastActive
  • ConsistentHash

負(fù)載均衡中用到的設(shè)計(jì)模式

  • 模板方法模式;
  • 接口是 LoadBalancd;
  • 抽象類是 AbstractLoadBalance;
  • 模板方法是 select;
  • 開(kāi)放給子類實(shí)現(xiàn)的方法是 doSelect;

Random | 按權(quán)重隨機(jī)

  • 如果所有的 Invoker 的權(quán)重一樣,就直接 nextInt();
  • 如果不是所有的 Invoker 的權(quán)重都一樣,則先計(jì)算出總權(quán)重,然后在總權(quán)重的范圍內(nèi)選一個(gè)值作為標(biāo)定點(diǎn),然后一個(gè)一個(gè) Invoker 的權(quán)重去減這個(gè)標(biāo)定點(diǎn),直到減到負(fù)數(shù),把表定點(diǎn)減到負(fù)數(shù)的 Invoker 就是被負(fù)載均衡到的 Invoker;

RoundRobin | 按權(quán)重平滑輪詢

  • 所謂平滑,就是防止權(quán)重大的 Invoker 被頻繁的選中,在權(quán)重大的 Invoker 被選中的間隙,會(huì)選中一些權(quán)重低的 Invoker;
算法概述
  • 每輪負(fù)載(選 Invoker)都會(huì)遍歷所有 Invoker;
  • 每個(gè) Invoker 有自己的權(quán)重,還有一個(gè)用于累加自己權(quán)重的 current 屬性;
  • 所有 Invoker 之外有一個(gè)記錄本輪遍歷總權(quán)重的地方;
  • 每便利到一個(gè) Invoker,這個(gè) Invoker 的 current += 自己的權(quán)重,并把自己的權(quán)重累加到記錄本輪遍歷總權(quán)重的地方;
  • 一輪下來(lái),current 最高的 Invoker 被選中,并把其 current -= 本輪遍歷的總權(quán)重,完了本輪便利的總權(quán)重清零;

LeastActive | 按最少活躍調(diào)用數(shù)負(fù)載

  • 會(huì)配合一個(gè) Filter,記錄所有 Invoker 的活躍數(shù),每次從活躍數(shù)最小的 Invoker 中選一個(gè);

ConsistentHash | Ketama 一致性哈希負(fù)載

  • 一致性哈希是把節(jié)點(diǎn)散列到一個(gè)環(huán)上,請(qǐng)求來(lái)了,把參數(shù)也散列到這個(gè)環(huán)上,參數(shù)的落點(diǎn)順時(shí)針遇到的第一個(gè)節(jié)點(diǎn),就是這次負(fù)載的節(jié)點(diǎn);
  • Dubbo 的一致性哈希,是真實(shí)節(jié)點(diǎn)混著虛擬節(jié)點(diǎn),一起散列到環(huán)上,這樣能使真實(shí)節(jié)點(diǎn)散列的更均勻;
  • 環(huán)的實(shí)現(xiàn)是基于 TreeMap 的有序型,TreeMap 上的 key 是各種算來(lái)算去完了一個(gè) MD5;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容