Ribbon負載均衡呼叫
pring cloud Ribbon 是基於Netfilix Ribbon 實現一套 客戶端 負載均衡工具。
簡單的說, Ribbon 是 Netflix 釋出開源專案。 主要是提供客戶端軟體負載均衡演算法和服務呼叫。
Ribbon客戶端提供一系列完善的配置項如連線超時。 重連等。 簡單的來說。
就是在配置檔案中加入一個LoadBalanced(簡稱LB),後面所有的機器ribbon自動會幫我們基於某種規則(輪詢 隨機連線)進行連線機器
-
-
容錯能力
-
非同步和響應模型中的多種協議(HTTP,TCP,UDP)支援
-
快取和批處理
-
集中式LB
: 服務的消費和提供方之間使用獨立的lb設施 (可是硬體, nginx ),由該設施負責把訪問的請求通過某種策略轉發至服務提供方 -
程序內LB: 將Lb邏輯整合到消費方, 消費方從服務註冊中心獲得由哪些地址可以用,然後自己在從這些地址中選擇一個合適的伺服器。
Ribbon 就是屬於程序內LB, 他是一個類庫。 整合與消費方程序。 通過消費方獲取服務方的地址。
在例項化RestTemplate時使用@LoadBalanced,服務地址直接可以使用服務名。
負載均衡幾種策略:
RoundRobinRule - 輪詢
RandomRule - 隨機
RetryRule - 先按照輪詢 的策略獲取服務, 如果獲取失敗則在指定的時間內進行充實獲取可用的服務
WeightedResponseTimeRule - 對輪詢的拓展,響應速度越快的實列選擇權重越大。 越容易被選擇
BestAvailableRule - 會先過濾用於多次訪問失敗故障處於斷路器跳閘的服務。 然後選擇 一個併發最小的服務
AvailabilityFilteringRule - 先過濾掉故障例項,在選擇併發較小的例項
ZoneAvoidanceRule - 預設規則。 複合判斷server所在區域效能和server的可用性選擇伺服器
自定義一個負載均衡的規則類 並且這個類不能和ComponentScan同包或者子類。
/** * @Author kalista * @Description 自定義負載均衡路由規則類 * @Date 2020/8/21 14:20 **/ @Configurationpublic class MySelfRule { @Bean public IRule myRule(){ return new RandomRule(); } }
主啟動類新增@RibbonClient
@RibbonClient(name = "CLOUD-PAYMENT-SERVICE",configuration = MySelfRule.class) @SpringBootApplication @Slf4j @EnableEurekaClient public class OrderMain80 { public static void main(String[] args) { SpringApplication.run(OrderMain80.class, args); log.info("*************** OrderMain8000 啟動成功 **************"); } }
這樣,一個隨機負載均衡就實現了,在eureka上註冊的服務可以隨機呼叫