SpringCloud全家桶學習之客戶端負載均衡及自定義負載均衡算法----Ribbon(三)

1、Ribbon是什麼?

  Spring Cloud Ribbon是基於Netflix Ribbon實現的一套客戶端  負載均衡的工具(這裏區別於nginx的負載均衡)。簡單來講,Ribbon是Netflix發佈的開源項目,主要功能是提供客戶端的軟件負載均衡算法,將Netflix中間服務鏈接在一塊兒。Ribbon客戶端組件提供一系列完善的配置項如鏈接超時,重試等。再簡單點說,就是在配置文件中列出Load Balancer後面全部的機器,Ribbon會自動的幫助你基於某種規則(如簡單輪詢、隨機鏈接等)去鏈接這些機器。固然,咱們也很容易使用Ribbon實現自定義的負載均衡算法。java

  Ribbon官網:https://github.com/Netflix/ribbonnginx

2、Ribbon配置

本項目的地址https://github.com/Simple-Coder/microservice-demo-studygit

(1)Maven工程結構

 (2)microservice-consumer添加Ribbon的pom依賴

pom

(3)添加負載均衡註解:@LoadBalanced

(4)地址修改

 (5)啓動類添加@EnableEurekaClient註解

(6)測試:依次啓動3個EurekaServer、3個Provider、1個Consumer

 (7)瀏覽器訪問服務消費方提供的地址:http://localhost:7001/consumer/get/all

第一次訪問該地址,能夠看出數據來自Cloud02數據庫

第二次訪問該地址,能夠看出數據來自Cloud03數據庫

 

第三次訪問該地址,能夠看出數據來自Cloud01數據庫

 第四次訪問該地址,能夠看出數據來自Cloud02數據庫,說明客戶端使用的負載均衡算法默認是簡單輪詢

3、Ribbon核心組件IRule

   IRule:根據特定算法從服務列表中選取一個要訪問的服務,官網源碼地址以下:github

  https://github.com/Netflix/ribbon/blob/master/ribbon-loadbalancer/src/main/java/com/netflix/loadbalancer/IRule.java,IRule的繼承關係圖以下:算法

  

(1)框架自帶的7種特定算法歸納

  ①RoundRobinRule:簡單輪詢數據庫

  ②RandomRule:隨機瀏覽器

  ③AvailabilityFilteringRule:先過濾掉因爲屢次訪問故障而處於斷路器跳閘狀態的服務,還有併發鏈接數量超過閾值的服務,而後對剩餘的服務列表按照輪詢策略進行訪問。服務器

  ④WeightedResponseTimeRule:根據平均響應時間計算全部服務的權重,響應時間越快服務權重越大,被選中的機率越高,剛啓動時若是統計信息不足,則使用RoundRibbonRule策略,等統計信息足夠,會切換到WeightedResponseTimeRule併發

  ⑤RetryRule:先按照RoundRobinRule的策略獲取服務,若是獲取服務失敗則在指定時間會進行重試,獲取可用的服務負載均衡

  ⑥BestAvailableRule:先過濾掉因爲屢次訪問故障而處於斷路器跳閘狀態的服務,而後選擇一個併發量最小的服務

  ⑦ZoneAvoidanceRule:默認規則,符合判斷server所在區域的性能和server的可用性選擇服務器

(2)啓動類添加配置(添加此註解:@RibbonClient)

  

  在這裏要特別注意:官方文檔明確給出警告,這個自定義的配置類不能放在@ComponentScan所掃描的當前包及子包下,不然咱們自定義的這個配置類就會被全部Ribbon客戶端所共享,也就不能達到特殊化定製的目的了。

  

 (3)根據需求自定義算法(MyRandomRule.java)

  需求:依舊輪詢策略,可是加上新的需求,每一個服務器要求被調用3次。也就是之前每臺機器一次,如今每臺機器5次。參考官網源碼地址以下:

https://github.com/Netflix/ribbon/blob/master/ribbon-loadbalancer/src/main/java/com/netflix/loadbalancer/RandomRule.java

  

(4)配置該自定義算法

 (5)測試:依次啓動3個Eureka、3個provider、1個consumer,查看consumer是否每一個服務調用3次切換

 

 瀏覽器訪問消費方提供的地址:http://localhost:7001/consumer/get/all

   不斷訪問該地址,確實發現每一個服務調用3次,至此自定義的負載均衡算法小練習已經完成!

4、總結

  ①Ribbon是客戶端、負載均衡的工具(區別於nginx)

  ②框架自帶7種負載均衡算法

  ③自定義負載均衡算法的使用(啓動類添加@RibbonClient、配置類不能在啓動類掃描包下,不然全部Ribbon客戶端都會生效該配置)

  ④本代碼已經上傳:https://github.com/Simple-Coder/microservice-demo-study

相關文章
相關標籤/搜索