天天看點

SpringCloud系列之Ribbon實作用戶端負載均衡

前言:

        前面已經搭建了Eureka服務叢集,本文将描述使用Ribbon實作用戶端的負載均衡。

一、Ribbon簡介

1.1、負載均衡

              将使用者的請求平攤的配置設定到多個服務上,進而達到系統的 HA。常見的負載均衡有軟體Nginx,LVS,硬體 F5等。

1.2、分類

         集中式 LB

          即在服務的消費方和提供方之間使用獨立的LB設施(可以是硬體,如F5, 也可以是軟體,如nginx), 由該設施負責把通路請求通過某種政策轉發至服務的提供方

         程序内 LB

         将LB邏輯內建到消費方,消費方從服務注冊中心獲知有哪些位址可用,然後自己再從這些位址中選擇出一個合适的伺服器。Ribbon就屬于程序内LB,它隻是一個類庫,內建于消費方程序,消費方通過它來擷取到服務提供方的位址。

1.3、簡介

          Spring Cloud Ribbon是一個基于HTTP和TCP的用戶端負載均衡工具,它基于Netflix Ribbon實作。通過Spring Cloud的封裝,可以讓我們輕松地将面向服務的REST模版請求自動轉換成用戶端負載均衡的服務調。

          Spring Cloud Ribbon雖然隻是一個工具類架構,它不像服務注冊中心、配置中心、API網關那樣需要獨立部署,但是它幾乎存在于每一個Spring Cloud建構的微服務和基礎設施中。因為微服務間的調用,API網關的請求轉發等内容,實際上都是通過Ribbon來實作的,包括後續我們将要介紹的Feign,它也是基于Ribbon實作的工具,Ribbon 會自動的幫助你基于某種規則(如簡單輪詢,随機連接配接等)去連接配接這些機器。我們也很容易使用 Ribbon 實作自定義的負載均衡算法。

二、springCloud內建Ribbon

         2.1、建立多個服務端微服務,并注冊道eureka叢集

SpringCloud系列之Ribbon實作用戶端負載均衡

 可以看到eureka叢集下面注冊了三個生産者。

2.2、編寫消費者并內建ribbon

2.1.1、消費端引入ribbon的依賴 

SpringCloud系列之Ribbon實作用戶端負載均衡

2.2.1、在RestTemplate模闆上面增加注解@LoadBalanced

SpringCloud系列之Ribbon實作用戶端負載均衡

2.3.1、将消費者注冊道eureka

SpringCloud系列之Ribbon實作用戶端負載均衡

啟動消費者,實作用戶端的負載均衡。

三、補充

        Ribbon預設使用輪詢的負載機制,即每個伺服器輪流通路,Ribbon提供了7種負載均衡算法。

SpringCloud系列之Ribbon實作用戶端負載均衡

我們可以在配置類中(相當于之前的xml配置檔案中)去配置,例如:

SpringCloud系列之Ribbon實作用戶端負載均衡

ribbon 會優先選擇配置的政策,如果沒有指定則選擇預設算法即輪詢。

除此之外,我們也可以自定義負載均衡算法,自定義算法類繼承AbstractLoadBalancerRule,再配置到配置類中。

注意:使用自定義算法的時候,要在啟動類上加上注解@RibbonClient(name=“服務名稱”,configuration=配置類.class),并且配置類不能放在啟動類(帶有@ComponentScan)同級的包及其子包下。

繼續閱讀