Ribbon 支援的9大負載均衡策略
個人部落格 :https://www.siyuan.run
CSDN:https://blog.csdn.net/siyuan
微信小程式:思遠Y
-
線性輪詢策略: RoundRibbonRule
BaseLoadBalancer 負載均衡器預設採用線性負載輪詢負載均衡策略。
工作流程:
- RoundRibbonRule 類的 choose(ILoadBalancer Ib,Object key) 方法初始化一個計數器。
- incrementAndGetModulo() 方法獲取一個下標 (是先加1,然後和服務清單總數取模獲取到的,不會越界),是一個不斷增長的數。
- chooseServer(Object key) 方法拿著下標去服務列表中獲取服務,每次迴圈計數器都會加1。如果連續10次都沒有取到服務,則會報 “No available alive servers after 10 tries from loadbalancer.” 警告。
-
重試策略:RetryRule
重試策略在使用 RetryRule 類中定義的 choose(ILoadBalance Ib,Object key) 方法來選擇一個服務例項。
choose() 方法也是採用 RoundRibbonRule 中的 choose() 方法來選擇一個服務例項的。
工作流程
- 如果選擇到的服務例項正常,則返回資料。
- 如果選擇到的服務例項為 null 或 失效,則 choose() 方法會在失效時間前不斷地進行重試。
- 如果超過了失效時間還是沒有取到,則返回一個 null。
-
加權響應時間策略:WeightedResponseTimeRule
WeightedResponseTimeRule 類是 RoundRibbonRule 的一個子類,它對 RoundRibbonRule 的功能進行了擴充套件。它根據每一個服務例項的執行情況先計算出該服務例項的一個權重,然後根據權重進行服務例項的挑選,這樣能夠呼叫到更優的服務例項。
工作流程
- 每 30S 計算一次各服務例項的響應時間,以響應時間來計算權重。平均響應時間越短則權重越高,權重越高則被選中的的概率越高,反之則被選中的概率較低。
- WeightedResponseTimeRule 中有一個名叫 DynamicServerWeightTask 的定時任務。它是一個後臺執行緒,定期從 status 裡面讀取響應時間,用來計算每個服務例項權重。
-
隨機策略:RandomRule
隨機選擇一個可用的服務例項。
工作流程
- 負載均衡通過 upList() 和 allList() 方法獲得可用服務例項列表,然後初始化了一個 Randow 物件以生成一個不大於服務例項總的隨機數。
- choose() 方法將該隨機數作為下標獲取一個服務例項。輪詢 “index” 選擇 “index” 對應的服務例項。
-
客戶端配置啟動線性輪詢策略:ClientConfigEnabledRoundRobbinRule
繼承該策略預設的 choose() 方法就能實現線性輪詢機制。
-
最空閒策略:BestAvailableRule
該服務是逐個考察各服務例項,然後選擇一個最小的併發請求的服務例項來提供例項。BestAvailableRule 繼承自 ClientConfigEnabledRoundRobbinRule 類。
工作流程
- 根據在 loadBalancerStats() 方法中儲存的服務例項的狀態資訊來過濾失效的服務例項。
- 判斷 loadBalancerStats 是否為空。
- 如果 loadBalancerStats 不為空,則找出併發請求最小的服務例項來使用。
- 如果 loadBalancerStats 為空,則 BestAvailableRule 類將採用它的父類。即 ClientConfigEnabledRoundRobbinRule 的服務選取策略 (線性策略)。
-
過濾性線性輪詢策略:PredicateBasedRule
PredicateBaseRule 類是 ClientConfigEnabledRoundRobbinRule 類的一個子類,它通過內部定義的一個過濾器過濾出一部分服務例項清單,然後用線性輪形的方式從過濾出來的服務例項清單中選取提個服務例項。
-
區域感知輪詢策略:ZoneAvoidanceRule
該策略以區域、可用的伺服器為基礎,選擇服務例項並對服務例項進行分類。ZoneAvoidanceRule 類是 PredicateBasedRule 類的一個實現類,它有一個組合過濾條件 (CompositePredicate)。ZoneAvoidanceRule 類中的過濾條件是 “以 ZoneAvoidancePredicate() 方法為主過濾條件” 和 “以AvailabilityPredicate() 方法為次過濾條件” 組成的。在過濾成功後,繼續採用線性輪詢的方式從過濾結果中選擇出一個服務例項。
-
可用性過濾策略:AvailabilityFilteringRule
該策略根據服務狀態 (當機和繁忙) 來分配權重,過濾掉那些因為一直連線失敗或高併發的服務例項。它使用一個 AvailabilityPredicate() 方法來包含過濾邏輯。
相關文章
- Ribbon負載均衡策略與自定義配置負載
- Ribbon - 幾種自定義負載均衡策略負載
- Spring Cloud:自定義 Ribbon 負載均衡策略SpringCloud負載
- 負載均衡---ribbon負載
- (20)SpringCloud-Ribbon自定義負載均衡策略SpringGCCloud負載
- Spring Cloud Ribbon負載均衡SpringCloud負載
- 【SpringCloud】之Ribbon負載均衡SpringGCCloud負載
- Ribbon實現負載均衡負載
- Ribbon負載均衡 (原始碼分析)負載原始碼
- gRPC負載均衡(自定義負載均衡策略)RPC負載
- SpringCloud入門(四)Ribbon負載均衡SpringGCCloud負載
- SpringCloud 客戶端負載均衡:RibbonSpringGCCloud客戶端負載
- SpringCloud客戶端負載均衡——RibbonSpringGCCloud客戶端負載
- 客服端負載均衡:Spring Cloud Ribbon負載SpringCloud
- (4)什麼是Ribbon負載均衡負載
- 微服務負載均衡器 Ribbon微服務負載
- Spring cloud(3)-負載均衡(Feign,Ribbon)SpringCloud負載
- Spring Cloud Ribbon 客戶端負載均衡SpringCloud客戶端負載
- SpringCloud微服務中使用RestTemplate+Ribbon實現負載均衡(實現方法+實現原理+替換負載均衡策略)SpringGCCloud微服務REST負載
- 【譯】Consul負載均衡策略負載
- Ribbon提供的負載均衡演算法IRule(四)負載演算法
- Spring Cloud之負載均衡元件Ribbon原理分析SpringCloud負載元件
- SpringCloud Fegin結合Ribbon實現負載均衡SpringGCCloud負載
- SpringCloud 服務負載均衡和呼叫 Ribbon、OpenFeignSpringGCCloud負載
- SpringCloud學習筆記:負載均衡Ribbon(3)SpringGCCloud筆記負載
- SpringCloud系列之客戶端負載均衡Netflix RibbonSpringGCCloud客戶端負載
- ③SpringCloud 實戰:使用 Ribbon 客戶端負載均衡SpringGCCloud客戶端負載
- nginx負載均衡策略你知道多少?Nginx負載
- Nginx多種負載均衡策略搭建Nginx負載
- 微服務Spring Cloud17_負載均衡Ribbon6微服務SpringCloud負載
- 微服務(三) Eureka註冊中心和Ribbon負載均衡微服務負載
- Spring Cloud負載均衡神器——Ribbon簡介與基本使用SpringCloud負載
- Spring Cloud:使用Ribbon實現負載均衡詳解(上)SpringCloud負載
- Spring Cloud:使用Ribbon實現負載均衡詳解(下)SpringCloud負載
- 微服務架構 | 4.1 基於 Ribbon 的負載均衡詳解微服務架構負載
- spring cloud 上雲的情況下,Ribbon 客戶端負載均衡 與 ALB 服務端負載均衡的選擇SpringCloud客戶端負載服務端
- Dubbo原始碼解析之負載均衡策略原始碼負載
- Nginx 做負載均衡的幾種輪詢策略Nginx負載