0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

簡述SpringCloud Ribbon中的7種負(fù)載均衡策略

jf_78858299 ? 來源:Java中文社群 ? 作者:磊哥 ? 2023-05-11 17:32 ? 次閱讀

負(fù)載均衡通器常有兩種實(shí)現(xiàn)手段,一種是服務(wù)端負(fù)載均衡器,另一種是客戶端負(fù)載均衡器,而我們今天的主角 Ribbon 就屬于后者——客戶端負(fù)載均衡器。

服務(wù)端負(fù)載均衡器的問題是,它提供了更強(qiáng)的流量控制權(quán),但無法滿足不同的消費(fèi)者希望使用不同負(fù)載均衡策略的需求,而使用不同負(fù)載均衡策略的場景確實(shí)是存在的,所以客戶端負(fù)載均衡就提供了這種靈活性。 然而客戶端負(fù)載均衡也有其缺點(diǎn),如果配置不當(dāng),可能會(huì)導(dǎo)致服務(wù)提供者出現(xiàn)熱點(diǎn),或者壓根就拿不到任何服務(wù)的情況,所以我們本文就來了解一下這 7 種內(nèi)置負(fù)載均衡策略的具體規(guī)則。

Ribbon 介紹

Ribbon 是 Spring Cloud 技術(shù)棧中非常重要的基礎(chǔ)框架,它為 Spring Cloud 提供了負(fù)載均衡的能力,比如 Fegin 和 OpenFegin 都是基于 Ribbon 實(shí)現(xiàn)的,就連 Nacos 中的負(fù)載均衡也使用了 Ribbon 框架。

Ribbon 框架的強(qiáng)大之處在于,它不僅內(nèi)置了 7 種負(fù)載均衡策略,同時(shí)還支持用戶自定義負(fù)載均衡策略,所以其開放性和便利性也是它得以流行的主要原因。

服務(wù)端負(fù)載均衡器和客戶端負(fù)載均衡器的區(qū)別如下圖所示:圖片客戶端負(fù)載均衡器的實(shí)現(xiàn)原理是通過注冊中心,如 Nacos,將可用的服務(wù)列表拉取到本地(客戶端),再通過客戶端負(fù)載均衡器(設(shè)置的負(fù)載均衡策略)獲取到某個(gè)服務(wù)器的具體 ip 和端口,然后再通過 Http 框架請求服務(wù)并得到結(jié)果,其執(zhí)行流程如下圖所示:圖片

負(fù)載均衡設(shè)置

以 Nacos 中的 Ribbon 負(fù)載均衡設(shè)置為例,在配置文件 application.yml 中設(shè)置如下配置即可:

springcloud-nacos-provider: # nacos中的服務(wù)id
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule #設(shè)置負(fù)載均衡策略

因?yàn)?Nacos 中已經(jīng)內(nèi)置了 Ribbon,所以在實(shí)際項(xiàng)目開發(fā)中無需再添加 Ribbon 依賴了,這一點(diǎn)我們在 Nacos 的依賴樹中就可以看到,如下圖所示:圖片Ribbon 默認(rèn)的負(fù)載均衡策略是輪詢模式,我們配置 3 個(gè)服務(wù)提供者的執(zhí)行結(jié)果如下圖所示:圖片然后,我們再將 Ribbon 負(fù)載均衡策略設(shè)置為隨機(jī)模式,配置內(nèi)容如下:

springcloud-nacos-provider: # nacos中的服務(wù)id
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #設(shè)置隨機(jī)負(fù)載均衡

重啟客戶端,執(zhí)行結(jié)果如下圖所示:圖片

7種負(fù)載均衡策略

1.輪詢策略

輪詢策略:RoundRobinRule,按照一定的順序依次調(diào)用服務(wù)實(shí)例。比如一共有 3 個(gè)服務(wù),第一次調(diào)用服務(wù) 1,第二次調(diào)用服務(wù) 2,第三次調(diào)用服務(wù)3,依次類推。此策略的配置設(shè)置如下:

springcloud-nacos-provider: # nacos中的服務(wù)id
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule #設(shè)置負(fù)載均衡

2.權(quán)重策略

權(quán)重策略:WeightedResponseTimeRule,根據(jù)每個(gè)服務(wù)提供者的響應(yīng)時(shí)間分配一個(gè)權(quán)重,響應(yīng)時(shí)間越長,權(quán)重越小,被選中的可能性也就越低。它的實(shí)現(xiàn)原理是,剛開始使用輪詢策略并開啟一個(gè)計(jì)時(shí)器,每一段時(shí)間收集一次所有服務(wù)提供者的平均響應(yīng)時(shí)間,然后再給每個(gè)服務(wù)提供者附上一個(gè)權(quán)重,權(quán)重越高被選中的概率也越大。此策略的配置設(shè)置如下:

springcloud-nacos-provider: # nacos中的服務(wù)id
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule

3.隨機(jī)策略

隨機(jī)策略:RandomRule,從服務(wù)提供者的列表中隨機(jī)選擇一個(gè)服務(wù)實(shí)例。此策略的配置設(shè)置如下:

springcloud-nacos-provider: # nacos中的服務(wù)id
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #設(shè)置負(fù)載均衡

4.最小連接數(shù)策略

最小連接數(shù)策略:BestAvailableRule,也叫最小并發(fā)數(shù)策略,它是遍歷服務(wù)提供者列表,選取連接數(shù)最小的?個(gè)服務(wù)實(shí)例。如果有相同的最小連接數(shù),那么會(huì)調(diào)用輪詢策略進(jìn)行選取。此策略的配置設(shè)置如下:

springcloud-nacos-provider: # nacos中的服務(wù)id
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.BestAvailableRule #設(shè)置負(fù)載均衡

5.重試策略

重試策略:RetryRule,按照輪詢策略來獲取服務(wù),如果獲取的服務(wù)實(shí)例為 null 或已經(jīng)失效,則在指定的時(shí)間之內(nèi)不斷地進(jìn)行重試來獲取服務(wù),如果超過指定時(shí)間依然沒獲取到服務(wù)實(shí)例則返回 null。此策略的配置設(shè)置如下:

ribbon:
  ConnectTimeout: 2000 # 請求連接的超時(shí)時(shí)間
  ReadTimeout: 5000 # 請求處理的超時(shí)時(shí)間
springcloud-nacos-provider: # nacos 中的服務(wù) id
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #設(shè)置負(fù)載均衡

6.可用性敏感策略

可用敏感性策略:AvailabilityFilteringRule,先過濾掉非健康的服務(wù)實(shí)例,然后再選擇連接數(shù)較小的服務(wù)實(shí)例。此策略的配置設(shè)置如下:

springcloud-nacos-provider: # nacos中的服務(wù)id
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.AvailabilityFilteringRule

7.區(qū)域敏感策略

區(qū)域敏感策略:ZoneAvoidanceRule,根據(jù)服務(wù)所在區(qū)域(zone)的性能和服務(wù)的可用性來選擇服務(wù)實(shí)例,在沒有區(qū)域的環(huán)境下,該策略和輪詢策略類似。此策略的配置設(shè)置如下:

springcloud-nacos-provider: # nacos中的服務(wù)id
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.ZoneAvoidanceRule

項(xiàng)目源碼

https://gitee.com/mydb/spring-cloud-alibaba-example

總結(jié)

Ribbon 為客戶端負(fù)載均衡器,相比于服務(wù)端負(fù)載均衡器的統(tǒng)一負(fù)載均衡策略來說,它提供了更多的靈活性。Ribbon 內(nèi)置了 7 種負(fù)載均衡策略:輪詢策略、權(quán)重策略、隨機(jī)策略、最小連接數(shù)策略、重試策略、可用性敏感策略、區(qū)域性敏感策略,并且用戶可以通過繼承 RoundRibbonRule 來實(shí)現(xiàn)自定義負(fù)載均衡策略。

阿Q說代碼專注于后端技術(shù)棧分享:文章風(fēng)格多變、配圖通俗易懂、故事生動(dòng)有趣

90篇原創(chuàng)內(nèi)容

公眾號

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    338

    瀏覽量

    14296
  • 負(fù)載均衡器
    +關(guān)注

    關(guān)注

    0

    文章

    18

    瀏覽量

    2573
收藏 人收藏

    評論

    相關(guān)推薦

    路由器負(fù)載均衡怎么配置

    路由器負(fù)載均衡是一重要的網(wǎng)絡(luò)技術(shù),它能夠?qū)⒍鄠€(gè)網(wǎng)絡(luò)連接的流量分配到多個(gè)路由器上,以提高網(wǎng)絡(luò)的性能和穩(wěn)定性。本文將詳細(xì)介紹路由器負(fù)載均衡的配
    的頭像 發(fā)表于 12-13 11:17 ?3057次閱讀

    電池管理系統(tǒng)均衡及管理策略

    各設(shè)計(jì)了一簡單的的控制策略,供大家學(xué)習(xí)理解之用。被動(dòng)型均衡被動(dòng)型均衡原理:被動(dòng)均衡又稱有損均衡
    發(fā)表于 04-07 10:43

    結(jié)構(gòu)化P2P自適應(yīng)混合負(fù)載均衡策略

    本文在深入研究已有負(fù)載均衡策略的基礎(chǔ)上,提出了一建立在結(jié)構(gòu)化P2P 上基于Chord 的自適應(yīng)高可用性混合負(fù)載
    發(fā)表于 08-14 16:25 ?17次下載

    基于應(yīng)用層負(fù)載均衡策略的分析

    基于應(yīng)用層負(fù)載均衡策略的分析
    發(fā)表于 03-26 08:28 ?8次下載

    HBase負(fù)載均衡分析及優(yōu)化策略

    HBase負(fù)載均衡分析及優(yōu)化策略_黃偉建
    發(fā)表于 01-03 17:41 ?0次下載

    面向軟件即服務(wù)的負(fù)載均衡策略建模與分析

    為提高軟件即服務(wù)( SaaS)應(yīng)用中資源的訪問效率,提出支持SaaS服務(wù)重要特征的負(fù)載均衡策略。首先,結(jié)合SaaS服務(wù)的多租戶和高度可伸縮兩大特性,提出一基于租戶請求分流、在局部和全
    發(fā)表于 12-07 14:14 ?0次下載

    基于數(shù)據(jù)熱點(diǎn)的MongoDB負(fù)載均衡策略

    平衡.但是在實(shí)際的生產(chǎn)環(huán)境,節(jié)點(diǎn)之間數(shù)據(jù)訪問熱度不同也會(huì)導(dǎo)致負(fù)載失衡,特別是出現(xiàn)節(jié)點(diǎn)過熱的情況.針對這一問題,引入Markov隨機(jī)過程,提出一基于Markov預(yù)測模型的負(fù)載
    發(fā)表于 01-04 15:31 ?0次下載
    基于數(shù)據(jù)熱點(diǎn)的MongoDB<b class='flag-5'>負(fù)載</b><b class='flag-5'>均衡</b><b class='flag-5'>策略</b>

    基于負(fù)載轉(zhuǎn)移的節(jié)點(diǎn)帶寬資源均衡策略

    針對采用了網(wǎng)絡(luò)編碼技術(shù)的對等網(wǎng)( P2P)流媒體系統(tǒng)應(yīng)用,提出一基于負(fù)載轉(zhuǎn)移的節(jié)點(diǎn)帶寬資源均衡策略,盡可能避免節(jié)點(diǎn)選擇鄰居節(jié)點(diǎn)并請求帶寬資源的隨意性形成的節(jié)點(diǎn)過載。在
    發(fā)表于 01-08 16:42 ?0次下載
    基于<b class='flag-5'>負(fù)載</b>轉(zhuǎn)移的節(jié)點(diǎn)帶寬資源<b class='flag-5'>均衡</b><b class='flag-5'>策略</b>

    全面剖析HAProxy 負(fù)載均衡

    HAProxy是什么 HAProxy 是一個(gè)免費(fèi)的負(fù)載均衡軟件,可以運(yùn)行于大部分主流的 Linux 操作系統(tǒng)上。 HAProxy 提供了L4(TCP)和L7(HTTP)兩
    的頭像 發(fā)表于 06-28 09:22 ?2252次閱讀
    全面剖析HAProxy <b class='flag-5'>負(fù)載</b><b class='flag-5'>均衡</b>器

    解密負(fù)載均衡技術(shù)和負(fù)載均衡算法

    負(fù)載均衡器是一軟件或硬件設(shè)備,它起到了將網(wǎng)絡(luò)流量分散到一組服務(wù)器的作用,可以防止任何一臺服務(wù)器過載。負(fù)載均衡算法就是
    的頭像 發(fā)表于 11-12 09:16 ?1091次閱讀

    Nacos、OpenFeign、Ribbon組件協(xié)調(diào)工作的原理

    ? ? Nacos 如何進(jìn)行服務(wù)自動(dòng)注冊? Ribbon OpenFeign 總結(jié) 前幾天有個(gè)大兄弟問了我一個(gè)問題,注冊中心要集成SpringCloud,想實(shí)現(xiàn)SpringCloud負(fù)載
    的頭像 發(fā)表于 05-22 10:46 ?959次閱讀
    Nacos、OpenFeign、<b class='flag-5'>Ribbon</b>組件協(xié)調(diào)工作的原理

    負(fù)載均衡策略有哪些? 負(fù)載均衡的三方式?

    負(fù)載均衡策略有哪些? 負(fù)載均衡策略有如下: 輪詢(Round Robin):按照請求的順序輪
    的頭像 發(fā)表于 07-25 14:13 ?2452次閱讀

    如何確定適合的負(fù)載均衡比例

    路由器的負(fù)載均衡是一應(yīng)用于網(wǎng)絡(luò)的技術(shù),它可以平衡網(wǎng)絡(luò)流量的分配,提高網(wǎng)絡(luò)的性能和穩(wěn)定性。在配置路由器的負(fù)載
    的頭像 發(fā)表于 12-15 10:36 ?1430次閱讀

    天翼云彈性負(fù)載均衡介紹

    負(fù)載均衡(Load Balancing)是一優(yōu)化資源分配的技術(shù),主要用于在網(wǎng)絡(luò)環(huán)境中分散工作負(fù)載,以提高系統(tǒng)的響應(yīng)速度、吞吐量以及可靠性。在互聯(lián)網(wǎng)服務(wù)
    的頭像 發(fā)表于 10-25 16:20 ?271次閱讀
    天翼云彈性<b class='flag-5'>負(fù)載</b><b class='flag-5'>均衡</b>介紹

    華納云:什么是負(fù)載均衡?優(yōu)化資源利用率的策略

    負(fù)載均衡是現(xiàn)代計(jì)算機(jī)網(wǎng)絡(luò)架構(gòu)不可或缺的一部分,它通過智能分配請求和任務(wù),確保系統(tǒng)資源的高效利用。本文將探討負(fù)載均衡的概念、工作原理、優(yōu)化資
    的頭像 發(fā)表于 10-28 16:07 ?101次閱讀