SpringCloud中的Ribbon負載均衡器詳細解析
一、Ribbon的簡介
1.1 簡介
Spring Cloud Ribbon 是一個基于 HTTP 和 TCP 的客戶端負載均衡工具,它基于 Netflix Ribbon 實現(xiàn)。通過 Spring Cloud 的封裝,可以讓我們輕松地將面向服務的 REST 模版請求自動轉換成客戶端負載均衡的服務調(diào)用。
目前主流的負載方案分為以下兩種:
- 集中式負載均衡,在消費者和服務提供方中間使用獨立的代理方式進行負載,有硬件的(比如 F5),也有軟件的(比如 Nginx)。
- 客戶端自己做負載均衡,根據(jù)自己的請求情況做負載,Ribbon 就屬于客戶端自己做負載。
1.2 引言
Robbin是幫助我們實現(xiàn)服務與服務之間的負載均衡。
- 客戶端負載均衡:customer客戶端模塊,將2個Search模塊信息全部拉取到本地的緩存,在customer中自己做一個負載均衡的策略,選中某一個服務。
- 服務端負載均衡:在注冊中心中,直接根據(jù)你指定的負載均衡策略,幫你選中一個指定的服務器信息,并返回。
二、快速入門
2.1 啟動兩個Search模塊
通過 Run/Debug Configurations 啟動兩個 Search模塊。
2.2 導入Ribbon相關依賴
在 customer 中導入 Ribbon 相關依賴。
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency>
2.3 整合 RestTemplate 和 Ribbon
在注入 RestTemplate 的方法上添加 @LoadBalanced 注解,即可整合 RestTemplate 和 Ribbon 。
//@LoadBalanced 將RestTemplate和Robbin整合 @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); }
2.4 訪問 Search
通過整合了 Ribbon 的 RestTemplate 去訪問Search (原來的 ip:port 現(xiàn)在可以用服務名代替)。
@GetMapping("/customer") public String customer() { String result = restTemplate.getForObject("http://SEARCH/search", String.class); return result; }
三、Ribbon 的負載均衡
Ribbon 作為一款客戶端負載均衡框架,默認的負載策略是輪詢,同時也提供了很多其他的策略,能夠讓用戶根據(jù)自身的業(yè)務需求進行選擇。
3.1 Ribbon負載均衡簡介
BestAvailabl
選擇一個最小的并發(fā)請求的 Server,逐個考察 Server,如果 Server 被標記為錯誤,則跳過,然后再選擇 ActiveRequestCount 中最小的 Server。
AvailabilityFilteringRule
過濾掉那些一直連接失敗的且被標記為 circuit tripped 的后端 Server,并過濾掉那些高并發(fā)的后端 Server 或者使用一個 AvailabilityPredicate 來包含過濾 Server 的邏輯。其實就是檢查 Status 里記錄的各個 Server 的運行狀態(tài)。
ZoneAvoidanceRule
使用 ZoneAvoidancePredicate 和 AvailabilityPredicate 來判斷是否選擇某個 Server,前一個判斷判定一個 Zone 的運行性能是否可用,剔除不可用的 Zone(的所有 Server),AvailabilityPredicate 用于過濾掉連接數(shù)過多的 Server。
RandomRule(隨機策略)
隨機選擇一個 Server。
RoundRobinRule(輪詢策略)
輪詢選擇,輪詢 index,選擇 index 對應位置的 Server。
RetryRule
對選定的負載均衡策略機上重試機制,也就是說當選定了某個策略進行請求負載時在一個配置時間段內(nèi)若選擇 Server 不成功,則一直嘗試使用 subRule 的方式選擇一個可用的 Server。
ResponseTimeWeightedRule
作用同 WeightedResponseTimeRule,ResponseTime-Weighted Rule 后來改名為 WeightedResponseTimeRule。
WeightedResponseTimeRule
默認會采用輪詢的策略,,根據(jù)響應時間會自動分配一個 Weight(權重),響應時間越長,Weight 越小,被選中的可能性越低。
3.2 Ribbon負載均衡的使用
3.2.1 采用注解的方式實現(xiàn)負載均衡
在 Ribbon Client 端注入策略的對象即可。
//配置robbinRule策略 @Bean public IRule robbinRule(){ return new RandomRule(); }
3.2.2 采用配置文件的方式實現(xiàn)負載均衡
#指定具體服務的負載均衡策略 SEARCH: #編寫服務名稱 ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule #具體負載均衡使用的類
到此這篇關于SpringCloud中的Ribbon負載均衡器詳細解析的文章就介紹到這了,更多相關Ribbon負載均衡器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Can''t use Subversion command line client:svn 報錯處理
這篇文章主要介紹了Can't use Subversion command line client:svn 報錯處理的相關資料,需要的朋友可以參考下2016-09-09Mybatis自關聯(lián)查詢一對多查詢的實現(xiàn)示例
這篇文章主要介紹了Mybatis自關聯(lián)查詢一對多查詢的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-02-02Springboot下使用Redis管道(pipeline)進行批量操作
本文主要介紹了Spring?boot?下使用Redis管道(pipeline)進行批量操作,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-05-05SpringBoot基于Mybatis攔截器和JSqlParser實現(xiàn)數(shù)據(jù)隔離
本文將介紹如何在 Spring Boot 項目中利用Mybatis的強大攔截器機制結合JSqlParser,一個功能豐富的 SQL 解析器,來輕松實現(xiàn)數(shù)據(jù)隔離的目標,本文根據(jù)示例展示如何根據(jù)當前的運行環(huán)境來實現(xiàn)數(shù)據(jù)隔離,需要的朋友可以參考下2024-04-04Java實現(xiàn)統(tǒng)計字符串出現(xiàn)的次數(shù)
這篇文章主要為大家詳細介紹了Java實現(xiàn)統(tǒng)計字符串出現(xiàn)的次數(shù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10