《Spring Cloud微服務實戰》讀書筆記之客戶端負載均衡:Spring Cloud Ribbon - 4
摘要
客戶端負載均衡元件部署在客戶端,由客戶端維護要訪問的服務端清單(清單來源於服務註冊中心)。在Spring Cloud 中預設使用Ribbon作為客戶端負載均衡。
關鍵詞:客戶端負載均衡,Ribbon
一、什麼是客戶端負載均衡
負載均衡是對系統高可用、緩解網路壓力、處理能力擴容的重要手段之一。通常說的負載均衡指的是服務端負載均衡。即負載均衡元件部署在服務端,進行請求的分發。
客戶端負載均衡則是元件部署在客戶端,由客戶端維護要訪問的服務端清單(清單來源於服務註冊中心)。
在Spring Cloud 中預設使用Ribbon作為客戶端負載均衡。
二、Spring Cloud Ribbon 介紹
Spring Cloud Ribbon 是一個基於Netflix Ribbon實現的、基於HTTP和TCP的客戶端負載均衡工具。Ribbon可以將面向服務的REST模板(RestTemplate)請求自動轉換成客戶端負載均衡呼叫。
另一個功能相似的工具是Feign,它同樣是基於Ribbon實現的客戶端負載均衡工具。
RestTemplate是Spring內建的HTTP請求封裝,在Spring Cloud中,該物件使用Ribbon的自動化配置。
Ribbon負載均衡器客戶端實現
程式碼中使用@LoadBalanced註解,使用LoadBalancerClient介面來配置RestTemplate。
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
以下是原始碼裡幾個比較重要的介面/實現:
介面/實現 | 說明 |
---|---|
LoadBalancerClient | Spring Cloud負載均衡器的通用介面,定義客戶端應具備的幾種能力。(choose-選擇負載均衡器例項、execute-執行請求內容、reconstructURI-重構URI) |
LoadBalancerAutoConfiguration | 客戶端負載均衡的自動化配置類,建立LoadBalancerInterceptor攔截器、RestTemplateCustomizer配置器和維護一個RestTemplate物件列表 |
LoadBalancerInterceptor | 用於攔截請求,發起實際的請求 |
RestTemplateCustomizer | 為RestTemplate配置前面的攔截器 |
ILoadBalancer介面 | 定義客戶端負載均衡器需要的系列抽象操作(維護服務例項、標識服務例項狀態、負載均衡策略) |
RibbonLoadBalancerClient | Ribbon對負載均衡器實現,實現了ILoadBalancer |
Ribbon負載均衡器器實現
介面/實現 | 說明 |
---|---|
IloadBalancer | 負載均衡器介面 |
AbstractLoadBalancer | 負載均衡器抽象介面,定義服務狀態列舉及獲取服務相關類 |
BaseLoadBalancer | 負載均衡器的基礎實現類,維護服務列表、統計資訊、定時健康檢查任務、負載處理規則 |
三、重試機制
Spring Cloud Eureka的服務治理機制強調了CAP(一致性、可用性、可靠性)原理中的AP,犧牲了一定的一致性。為了在可用性和一致性上的取捨,Eureka會在超過85%的例項心跳丟失時觸發保護機制(不再剔除服務),允許存在故障服務。因此在服務呼叫時引入了重試機制。(重試次數由MaxAutoRetriesNextServer配置)
參考資料
- 《Spring Cloud微服務實戰》