日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringCloud Ribbon中的7种负载均衡策略!

發布時間:2025/3/11 javascript 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringCloud Ribbon中的7种负载均衡策略! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者 | 磊哥

來源 | Java中文社群(ID:javacn666)

轉載請聯系授權(微信ID:GG_Stone)

負載均衡通器常有兩種實現手段,一種是服務端負載均衡器,另一種是客戶端負載均衡器,而我們今天的主角 Ribbon 就屬于后者——客戶端負載均衡器。

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

Ribbon 介紹

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

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

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

負載均衡設置

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

springcloud-nacos-provider:?#?nacos中的服務idribbon:NFLoadBalancerRuleClassName:?com.netflix.loadbalancer.RoundRobinRule?#設置負載均衡策略

因為 Nacos 中已經內置了 Ribbon,所以在實際項目開發中無需再添加 Ribbon 依賴了,這一點我們在 Nacos 的依賴樹中就可以看到,如下圖所示:Ribbon 默認的負載均衡策略是輪詢模式,我們配置 3 個服務提供者的執行結果如下圖所示:然后,我們再將 Ribbon 負載均衡策略設置為隨機模式,配置內容如下:

springcloud-nacos-provider:?#?nacos中的服務idribbon:NFLoadBalancerRuleClassName:?com.netflix.loadbalancer.RandomRule?#設置隨機負載均衡

重啟客戶端,執行結果如下圖所示:

7種負載均衡策略

1.輪詢策略

輪詢策略:RoundRobinRule,按照一定的順序依次調用服務實例。比如一共有 3 個服務,第一次調用服務 1,第二次調用服務 2,第三次調用服務3,依次類推。此策略的配置設置如下:

springcloud-nacos-provider:?#?nacos中的服務idribbon:NFLoadBalancerRuleClassName:?com.netflix.loadbalancer.RoundRobinRule?#設置負載均衡

2.權重策略

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

springcloud-nacos-provider:?#?nacos中的服務idribbon:NFLoadBalancerRuleClassName:?com.netflix.loadbalancer.WeightedResponseTimeRule

3.隨機策略

隨機策略:RandomRule,從服務提供者的列表中隨機選擇一個服務實例。此策略的配置設置如下:

springcloud-nacos-provider:?#?nacos中的服務idribbon:NFLoadBalancerRuleClassName:?com.netflix.loadbalancer.RandomRule?#設置負載均衡

4.最小連接數策略

最小連接數策略:BestAvailableRule,也叫最小并發數策略,它是遍歷服務提供者列表,選取連接數最小的?個服務實例。如果有相同的最小連接數,那么會調用輪詢策略進行選取。此策略的配置設置如下:

springcloud-nacos-provider:?#?nacos中的服務idribbon:NFLoadBalancerRuleClassName:?com.netflix.loadbalancer.BestAvailableRule?#設置負載均衡

5.重試策略

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

ribbon:ConnectTimeout:?2000?#?請求連接的超時時間ReadTimeout:?5000?#?請求處理的超時時間 springcloud-nacos-provider:?#?nacos?中的服務?idribbon:NFLoadBalancerRuleClassName:?com.netflix.loadbalancer.RandomRule?#設置負載均衡

6.可用性敏感策略

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

springcloud-nacos-provider:?#?nacos中的服務idribbon:NFLoadBalancerRuleClassName:?com.netflix.loadbalancer.AvailabilityFilteringRule

7.區域敏感策略

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

springcloud-nacos-provider:?#?nacos中的服務idribbon:NFLoadBalancerRuleClassName:?com.netflix.loadbalancer.ZoneAvoidanceRule

項目源碼

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

總結

Ribbon 為客戶端負載均衡器,相比于服務端負載均衡器的統一負載均衡策略來說,它提供了更多的靈活性。Ribbon 內置了 7 種負載均衡策略:輪詢策略、權重策略、隨機策略、最小連接數策略、重試策略、可用性敏感策略、區域性敏感策略,并且用戶可以通過繼承 RoundRibbonRule 來實現自定義負載均衡策略。

是非審之于己,毀譽聽之于人,得失安之于數。

公眾號:Java中文社群

Java面試合集:https://gitee.com/mydb/interview

往期推薦

SpringCloud Nacos + Ribbon 調用服務的 2 種方法!


Spring Cloud Alibaba Nacos 的 2 種健康檢查機制!


芭比扣了!Nacos中服務刪除不了,腫么辦?


總結

以上是生活随笔為你收集整理的SpringCloud Ribbon中的7种负载均衡策略!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。