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

Ribbon在工做時分爲兩步:git

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

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

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

1、Ribbon算法的介紹

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

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

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

(1)RoundRobinRule:輪詢;ide

(2)RandomRule:隨機;工具

(3)AvailabilityFilteringRule:會先過濾掉因爲屢次訪問故障而處於斷路器狀態的服務,還有併發的鏈接數量超過閾值的服務,而後對剩餘的服務列表按照輪詢策略進行訪問;性能

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

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

(6)BestAvailableRule:會先過濾掉因爲屢次訪問故障而處於斷路器跳閘狀態的服務,而後選擇一個併發量最小的服務;

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

ribbion的負載均衡算法結構:

 

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

一、打開消費者工程,增長以下的配置:

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

 二、啓動類增長 @EnableEurekaClient 註解

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

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

相關文章
相關標籤/搜索