天天看點

SpringCloud微服務元件-負載均衡ribbon一.定義二.使用方式

SpringCloud微服務元件-負載均衡ribbon

  • 一.定義
  • 二.使用方式
    • 2.1 使用步驟
    • 2.2 實作多種負載均衡算法
      • 2.1.1 第一種方式
      • 2.1.2 第二種方式
    • 2.2 配置重試機制

一.定義

ribbon [ˈrɪbən] 是服務間通信的負載均衡工具。他提供了完善的逾時重試機制。我們可以在用戶端配置檔案中列出負載均衡的服務節點,ribbon會幫我們實作負載均衡算法去調用這些微服務。

Ribbon這個負載均衡是基于用戶端的負載均衡,而不是服務端的負載均衡。比如nginx就是基于服務端的負載均衡。

負載均衡:負載均衡可以把請求按照一定的規定分攤到後面的伺服器叢集,進而達道叢集高可用以及處理并發的目的

服務端的負載均衡:

SpringCloud微服務元件-負載均衡ribbon一.定義二.使用方式

用戶端的負載均衡:會從本地調用eureka,獲得對應的微服務節點,雖然再發起通信。

SpringCloud微服務元件-負載均衡ribbon一.定義二.使用方式

簡單總結就是: ribbon = RestTemplate + LoadBalance ,這兩者需要結合起來使用。

二.使用方式

2.1 使用步驟

1.引入ribbon依賴

在配置注冊中心eureka用戶端的時候,引入的依賴就包含了ribbon依賴

SpringCloud微服務元件-負載均衡ribbon一.定義二.使用方式

2.在restTemplate調用的方法上加入@LoadBalanced注解

2.2 實作多種負載均衡算法

2.1.1 第一種方式

雙機shift,搜尋IRULE,可以看到這是一個用于提供負載均衡的接口,可以自定義去設定不同的負載均衡算法。

SpringCloud微服務元件-負載均衡ribbon一.定義二.使用方式

其中最常用的是RoundRobinRule和WeightedResponseTimeRule,一個是輪詢,一個是權重輪詢。

自定義負載均衡規則,隻需要實作IRule這個接口并重寫方法即可:

@Configuration
public class MyRule {
    @Bean
    public IRule irule() {
        return new RandomRule();
    }
}
           

注意:自定義的規則要放在一個獨立的包,要不然被目前的容器掃描到後,那麼所有的ribbon負載均衡政策都會被這個自定義的影響。

是以需要開啟@RibbonClient,讓其指定自定義規則:

2.1.2 第二種方式

# 配置指定ribbon的規則
service-user:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
           

2.2 配置重試機制

1.pom中引入retry依賴

<dependency>
    <groupId>org.springframework.retry</groupId>
    <artifactId>spring-retry</artifactId>
</dependency>
           

2.yml配置

ribbon:
  ConnectTimeout: 5000          # 建立連接配接的逾時時間,機關:ms
  ReadTimeout: 5000             # 在連接配接建立好以後,調用接口的逾時時間,機關:ms
  MaxAutoRetries: 1             # 最大重試次數
  MaxAutoRetriesNextServer: 2   # 切換到下個執行個體的重試次數
  # 當請求到某個微服務5s,逾時後會進行重試,先重新連接配接自己目前這個執行個體,
  # 如果失敗1次後,會切換通路叢集中的下一個微服務執行個體,切換最大2次
           

3.設定日志級别

logging:
  level: 
    root: debug
           

繼續閱讀