javascript
Spring Cloud微服务笔记(四)客户端负载均衡:Spring Cloud Ribbon
客戶端負載均衡:Spring Cloud Ribbon
一、負載均衡概念
負載均衡在系統架構中是一個非常重要,并且是不得不去實施的內容。因為負載均衡對系統的高可用性、
網絡壓力的緩解和處理能力的擴容的重要手段之一。通常所說的負載均衡指的是服務端負載均衡,分為
硬件負載均衡和軟件負載均衡,服務端負載均衡架構方式:
?
?
負載均衡都會維護一個下掛可用的服務端清單,并通過心跳檢測來剔除故障的服務端節點。
客戶端負載均衡與服務端負載均衡最大的不同點在于服務清單的位置,在客戶端負載均衡
中,所有的客戶端節點都維護著自己要訪問的服務端清單,這些清單都來自于服務注冊中心?! ?/span>
二、快速入門
代碼詳情見:https://gitee.com/tangjiapi/RibbonDemon.git
三、Spring Cloud Ribbon 實戰
1.Ribbon負載均衡策略與自定義配置
在Ribbon中有豐富的負載均衡策略可供選擇:
策略類?????????????????? 命名?????????????????????? 描述
RandomRule???????????? 隨機策略?????????????????? 隨機選擇server
RoundRobinRule???????? 輪詢策略?????????????????? 按順序選擇server(默認策略)
RetryRule????????????? 重試策略?????????????????? 在一個配置時間段內當選擇server不成功,則一直嘗試選擇一個可用的server
BestAvailableRule????? 最低并發策略?????????????? 逐個考察server,如果server斷路器打開,則忽略,在選擇其中并發鏈接最低的server
AvailabilityFilterRule 可用過濾策略?????????????? 過濾掉一直鏈接失敗并被標記為circuit tripped的server,過濾掉那些高并發鏈接的server(active connections超過配置的閾值)
ResponseTimeWeightRule 響應時間加權策略?????????? 根據server的響應時間分配權重。響應時間越長,權重越低,被選擇到的概率就越低
ZoneAvoidanceRule????? 區域權衡策略?????????????? 綜合判斷server所在區域的性能和server的可用輪詢選擇server,并且判定一個AWS Zonede的運行性能是否可用,剔除不可用的Zone中的所有Server.
1)全局策略設置
?
@Configuration public class TestConfiguration {@Beanpublic IRule ribbonRule() {return new RandomRule();} }?
凡是通過ribbon的請求都會按照配置的規則進行。
2)基于注解的策略設置
/*** 聲明,用于排除* @author Tang Jiujia* @since 2019-03-26*/ public @interface AvoidScan { }?
@Configuration @AvoidScan public class TestConfiguration {@AutowiredIClientConfig config;@Beanpublic IRule ribbonRule(IClientConfig config) {return new RandomRule();} } @SpringBootApplication @EnableDiscoveryClient @RibbonClient(name = "client-a", configuration = TestConfiguration.class) //讓Spring不去掃描@AvoidScan注解的類,因為我們的配置是對單個服務源生效, // 所以不能應用于全局,如果不排除會報錯 @ComponentScan(excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, value = {AvoidScan.class})}) public class RibbonLoadbalancerApplication {public static void main(String[] args) {SpringApplication.run(RibbonLoadbalancerApplication.class, args);}/*** 用于負載均衡* */@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();} }3)基于配置文件的策略設置
client-a:ribbon:NFLoadBalanceRuleClassName: com.netflix.loadbalancer.RandomRule2.Ribbon超時與重試
F版中的Ribbon重試機制是默認開啟的,需要添加對于超時時間與重試策略的配置:
client-a:ribbon:ConnectTimeout: 30000ReadTimeout: 30000MaxAutoRetries: 1 #對第一次請求的服務的重試次數MaxAutoRetriesNextServer: 1 #要重試的下一個服務的最大數量OkToRetryOnAllOperations: true3.Ribbon的饑餓加載
Ribbon在進行客戶端負載均衡時并不是在啟動時就加載上下文,而是在實際請求時才去
創建,因此這個特性往往會讓我們第一次調用時顯得疲軟乏力,嚴重時會引起調用超時。
所有我們可以通過指定Ribbon客戶端的名稱來開啟饑餓加載,即在啟動的時候就加載所有
配置項的應用程序上下文。
ribbon:eager-load:enabled: trueclients: client-a, client-b, client-c4.利用配置文件自定義Ribbon客戶端
使用配置文件的優先級最高,高于注解和源碼中的bean
5.Ribbon脫離Eureka使用
默認情況下,Ribbon客戶端會從Eureka注冊中心讀取服務注冊列表,來達到一種
動態的負載均衡。但如果Eureka是一個供很多人使用的公共注冊中心,極可能產生
服務侵入性問題,所以就不要從Eureka讀取服務列表了,而應該在Ribbon客戶端自行指定
服務地址,讓Ribbon脫離Eureka來使用。
首先,需要在Ribbon中禁用Eureka功能:
ribbon:eureka:enable: false然后對源服務設定地址列表:
client:ribbon:listOfServers: http://localhost:7070, http://localhost:7071?
轉載于:https://www.cnblogs.com/Shadowplay/p/10477337.html
總結
以上是生活随笔為你收集整理的Spring Cloud微服务笔记(四)客户端负载均衡:Spring Cloud Ribbon的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何查看 iPhone 12 电池生产厂
- 下一篇: 买手机买12+128的好还是8+256的