Ribbon核心組件IRule及配置指定的負載均衡算法


Ribbon在工作時分為兩步:

第一步:先選擇 EurekaServer,它優先選擇在同一個區域內負載較少的Server;

第二步:再根據用戶指定的策略,在從Server取到的服務注冊列表中選擇一個地址;

其中Ribbon提供了多種策略,比如輪詢、隨機、根據響應時間加權。

一、Ribbon算法的介紹

Ribbon的源碼地址:https://github.com/Netflix/ribbon

IRule:根據特定算法中從服務器列表中選取一個要訪問的服務,Ribbon默認的算法為輪詢算法;

Ribbon中的7中負載均衡算法:

(1)RoundRobinRule:輪詢;

(2)RandomRule:隨機;

(3)AvailabilityFilteringRule:會先過濾掉由於多次訪問故障而處於斷路器狀態的服務,還有並發的連接數量超過閾值的服務,然后對剩余的服務列表按照輪詢策略進行訪問;

(4)WeightedResponseTimeRule:根據平均響應時間計算所有服務的權重,響應時間越快的服務權重越大被選中的概率越大。剛啟動時如果統計信息不足,則使用RoundRobinRule(輪詢)策略,等統計信息足夠,會切換到WeightedResponseTimeRule;

(5)RetryRule:先按照RoundRobinRule(輪詢)策略獲取服務,如果獲取服務失敗則在指定時間內進行重試,獲取可用的服務;

(6)BestAvailableRule:會先過濾掉由於多次訪問故障而處於斷路器跳閘狀態的服務,然后選擇一個並發量最小的服務;

(7)ZoneAvoidanceRule:復合判斷Server所在區域的性能和Server的可用性選擇服務器;

ribbion的負載均衡算法結構:

 

二、配置指定的負載均衡算法

1、打開消費者工程,增加如下的配置:

@Configuration public class ConfigBean { @Bean @LoadBalanced //Ribbon 是客戶端負載均衡的工具;
    public RestTemplate getRestTemplate() { return new RestTemplate(); } //配置負載均衡的策略為隨機,默認算法為輪詢算法  @Bean public IRule myRule() { //return new RoundRobinRule(); return new RandomRule(); }   }

 2、啟動類增加 @EnableEurekaClient 注解

@SpringBootApplication @EnableEurekaClient //本服務啟動后自動注冊到eureka中
public class DeptProvider8001_App { public static void main(String[] args) { SpringApplication.run(DeptProvider8001_App.class, args); } }

3、然后重啟這個消費者服務,訪問:http://localhost/consumer/dept/get/1;查看到隨機訪問到3個生產者服務。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM