1. 程式人生 > 實用技巧 >Ribbon負載均衡呼叫

Ribbon負載均衡呼叫

pring cloud Ribbon 是基於Netfilix Ribbon 實現一套 客戶端 負載均衡工具。

簡單的說, Ribbon 是 Netflix 釋出開源專案。 主要是提供客戶端軟體負載均衡演算法和服務呼叫。

Ribbon客戶端提供一系列完善的配置項如連線超時。 重連等。 簡單的來說。

就是在配置檔案中加入一個LoadBalanced(簡稱LB),後面所有的機器ribbon自動會幫我們基於某種規則(輪詢 隨機連線)進行連線機器

  • 負載均衡

  • 容錯能力

  • 非同步和響應模型中的多種協議(HTTP,TCP,UDP)支援

  • 快取和批處理

LB負載均衡

  1. 集中式LB : 服務的消費和提供方之間使用獨立的lb設施 (可是硬體, nginx ),由該設施負責把訪問的請求通過某種策略轉發至服務提供方

  2. 程序內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
 **/
@Configuration
public 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上註冊的服務可以隨機呼叫