SpringCloud微服務元件-負載均衡ribbon
- 一.定義
- 二.使用方式
-
- 2.1 使用步驟
- 2.2 實作多種負載均衡算法
-
- 2.1.1 第一種方式
- 2.1.2 第二種方式
- 2.2 配置重試機制
一.定義
ribbon [ˈrɪbən] 是服務間通信的負載均衡工具。他提供了完善的逾時重試機制。我們可以在用戶端配置檔案中列出負載均衡的服務節點,ribbon會幫我們實作負載均衡算法去調用這些微服務。
Ribbon這個負載均衡是基于用戶端的負載均衡,而不是服務端的負載均衡。比如nginx就是基于服務端的負載均衡。
負載均衡:負載均衡可以把請求按照一定的規定分攤到後面的伺服器叢集,進而達道叢集高可用以及處理并發的目的
服務端的負載均衡:
用戶端的負載均衡:會從本地調用eureka,獲得對應的微服務節點,雖然再發起通信。
簡單總結就是: ribbon = RestTemplate + LoadBalance ,這兩者需要結合起來使用。
二.使用方式
2.1 使用步驟
1.引入ribbon依賴
在配置注冊中心eureka用戶端的時候,引入的依賴就包含了ribbon依賴
2.在restTemplate調用的方法上加入@LoadBalanced注解
2.2 實作多種負載均衡算法
2.1.1 第一種方式
雙機shift,搜尋IRULE,可以看到這是一個用于提供負載均衡的接口,可以自定義去設定不同的負載均衡算法。
其中最常用的是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