SpringCloud Ribbon 負載均衡


 

Eureka Client內置了Ribbon,用於實現服務節點列表的負載均衡。
 

SpringCloud的服務調用流程

eg. user-service的某個節點要調用order-service

1、向內置的Ribbon發起調用order-service的負載均衡請求

2、Ribbon查詢緩存中有沒有order-service的節點列表,有就直接使用,沒有就從Eureka Server獲取

3、Ribbon使用指定的負載均衡算法從節點列表中返回一個節點

4、user-service向返回的order-service節點發起調用

 

Ribbon內置的負載均衡策略(7種)

1、RoundRobinRule  輪詢(默認策略)
輪詢適合節點性能都差不多的情況。從前往後依次輪詢節點列表中的每個節點,誰空閒就調用誰。
 

2、RetryRule  重試
先輪詢,如果未獲取到節點,則在指定的時間內(默認500ms)重試。
 

3、RandomRule  隨機

4、BestAvailableRule  最可用,選擇負載最小的節點

5、AvailabilityFilteringRule  可用過濾
先過濾掉處於斷路狀態(斷路器打開)、負載很大的節點,再使用輪詢。

6、ZoneAvoidanceRule  根據大區性能、節點可用性綜合篩選

7、WeightedResponseTimeRule  權重響應時間
根據節點的平均響應時間計算權重,響應快的權重大,被選中的機率就越大。

 

設置Ribbon的負載均衡策略

eureka client的依賴中已經包含了ribbon的依賴,不用額外添加依賴。

負載均衡策略是在消費者中設置的,有2種方式
 

方式一、在application.yml中設置

#設置調用order-service的負載均衡策略
order-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

只對指定的服務調用有效

 

方式二、在引導類中設置

@SpringBootApplication
@EnableEurekaClient
public class UserServiceApplication {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    //設置負載均衡策略
    @Bean
    public RandomRule getRule(){
        return  new RandomRule();
    }
    
    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
    }

}

對調用的所有服務都有效
 

也可以使用自定義的負載均衡策略。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章