Spring Cloud Ribbon是基於Netflix Ribbon實現的一套客戶端 負載均衡的工具(這裏區別於nginx的負載均衡)。簡單來講,Ribbon是Netflix發佈的開源項目,主要功能是提供客戶端的軟件負載均衡算法,將Netflix中間服務鏈接在一塊兒。Ribbon客戶端組件提供一系列完善的配置項如鏈接超時,重試等。再簡單點說,就是在配置文件中列出Load Balancer後面全部的機器,Ribbon會自動的幫助你基於某種規則(如簡單輪詢、隨機鏈接等)去鏈接這些機器。固然,咱們也很容易使用Ribbon實現自定義的負載均衡算法。java
Ribbon官網:https://github.com/Netflix/ribbonnginx
本項目的地址:https://github.com/Simple-Coder/microservice-demo-studygit
IRule:根據特定算法從服務列表中選取一個要訪問的服務,官網源碼地址以下:github
https://github.com/Netflix/ribbon/blob/master/ribbon-loadbalancer/src/main/java/com/netflix/loadbalancer/IRule.java,IRule的繼承關係圖以下:算法
①RoundRobinRule:簡單輪詢數據庫
②RandomRule:隨機瀏覽器
③AvailabilityFilteringRule:先過濾掉因爲屢次訪問故障而處於斷路器跳閘狀態的服務,還有併發鏈接數量超過閾值的服務,而後對剩餘的服務列表按照輪詢策略進行訪問。服務器
④WeightedResponseTimeRule:根據平均響應時間計算全部服務的權重,響應時間越快服務權重越大,被選中的機率越高,剛啓動時若是統計信息不足,則使用RoundRibbonRule策略,等統計信息足夠,會切換到WeightedResponseTimeRule併發
⑤RetryRule:先按照RoundRobinRule的策略獲取服務,若是獲取服務失敗則在指定時間會進行重試,獲取可用的服務負載均衡
⑥BestAvailableRule:先過濾掉因爲屢次訪問故障而處於斷路器跳閘狀態的服務,而後選擇一個併發量最小的服務
⑦ZoneAvoidanceRule:默認規則,符合判斷server所在區域的性能和server的可用性選擇服務器
在這裏要特別注意:官方文檔明確給出警告,這個自定義的配置類不能放在@ComponentScan所掃描的當前包及子包下,不然咱們自定義的這個配置類就會被全部Ribbon客戶端所共享,也就不能達到特殊化定製的目的了。
需求:依舊輪詢策略,可是加上新的需求,每一個服務器要求被調用3次。也就是之前每臺機器一次,如今每臺機器5次。參考官網源碼地址以下:
瀏覽器訪問消費方提供的地址:http://localhost:7001/consumer/get/all,
不斷訪問該地址,確實發現每一個服務調用3次,至此自定義的負載均衡算法小練習已經完成!
①Ribbon是客戶端、負載均衡的工具(區別於nginx)
②框架自帶7種負載均衡算法
③自定義負載均衡算法的使用(啓動類添加@RibbonClient、配置類不能在啓動類掃描包下,不然全部Ribbon客戶端都會生效該配置)
④本代碼已經上傳:https://github.com/Simple-Coder/microservice-demo-study