1. 程式人生 > >《Spring Cloud微服務實戰》讀書筆記之客戶端負載均衡:Spring Cloud Ribbon

《Spring Cloud微服務實戰》讀書筆記之客戶端負載均衡:Spring Cloud Ribbon

摘要

客戶端負載均衡元件部署在客戶端,由客戶端維護要訪問的服務端清單(清單來源於服務註冊中心)。在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微服務實戰》