javascript
Spring Cloud Alibaba - 07 Ribbon 应用篇及内置的负载均衡算法
文章目錄
- Ribbon整合三部曲
- artisan-cloud-ribbon-order
- step1 搞依賴
- step2 搞注解 (在RestTemplate上加入@LoadBalanced注解)
- Step3 搞配置文件
- artisan-cloud-ribbon-product
- 驗證
- 修改Ribbon默認的負載策略
- Ribbon的內置的負載均衡算法
- 類關系 (IRule接口 AbstractLoadBalancerRule抽象類)
- 負載均衡算法
- RandomRule
- RetryRule
- RoundRobinRule
- AvailabilityFilteringRule
- BestAvailableRule
- WeightedResponseTimeRule
- ZoneAvoidanceRule(默認)
- 源碼
Ribbon整合三部曲
我們這里通過Ribbon組件來實習負載均衡 【默認的負載均衡算法是 輪詢】
artisan-cloud-ribbon-order
step1 搞依賴
<!--nacos-client--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-nacos-discovery</artifactId></dependency><!--加入ribbon--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId></dependency>step2 搞注解 (在RestTemplate上加入@LoadBalanced注解)
@Configuration public class WebConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();} }Step3 搞配置文件
這里是寫Nacos 的配置文件,暫時沒有配置Ribbon的配置
spring:cloud:nacos:discovery:server-addr: 1.117.97.88:8848application:name: artisan-order-centerartisan-cloud-ribbon-product
作為服務提供方,僅需要注冊到Nacos , 無需集成Ribbon, 啟動多個測試Ribbon的負載策略即可。
@RestController @Slf4j public class ProductInfoController {@Value("${server.port}")private Integer port;@Autowiredprivate ProductInfoMapper productInfoMapper;@RequestMapping("/selectProductInfoById/{productNo}")public Object selectProductInfoById(@PathVariable("productNo") String productNo) {log.info("{} 被請求了",port);ProductInfo productInfo = productInfoMapper.selectProductInfoById(productNo);return productInfo;}}驗證
分別請求三次
日志如下
可以猜測,默認策略為輪詢算法
修改Ribbon默認的負載策略
請求三次
Ribbon的內置的負載均衡算法
類關系 (IRule接口 AbstractLoadBalancerRule抽象類)
可以看到是采用的策略設計模式,公共的都寫到了抽象類中
負載均衡算法
RandomRule
隨機選擇一個Server
RetryRule
對選定的負載均衡策略機上重試機制,在一個配置時間段內當選擇Server不成功,則一直嘗試使用subRule的方式選擇一個可用的server.
RoundRobinRule
輪詢選擇, 輪詢index,選擇index對應位置的Server
AvailabilityFilteringRule
過濾掉一直連接失敗的被標記為circuit tripped的后端Server,并過濾掉那些高并發(fā)的后端Server或者使用一個AvailabilityPredicate來包含過濾server的邏輯,其實就就是檢查status里記錄的各個Server的運行狀態(tài)
BestAvailableRule
選擇一個最小的并發(fā)請求的Server,逐個考察Server,如果Server被tripped了,則跳過。
WeightedResponseTimeRule
根據響應時間加權,響應時間越長,權重越小,被選中的可能性越低;
ZoneAvoidanceRule(默認)
復合判斷Server所在Zone的性能和Server的可用性選擇Server,在沒有Zone的情況下類是輪詢。
源碼
https://github.com/yangshangwei/SpringCloudAlibabMaster
總結
以上是生活随笔為你收集整理的Spring Cloud Alibaba - 07 Ribbon 应用篇及内置的负载均衡算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Cloud Alibaba
- 下一篇: Spring Cloud Alibaba