1. 程式人生 > 實用技巧 >springcloud(4)ribbon負載均衡

springcloud(4)ribbon負載均衡

負載均衡即是將使用者的請求平攤的分配到多個服務上,從而達到高可用的目的。

一般的負載均衡應用採取的是收集全部請求進行集中式的分配,而ribbon是從服務中心獲取地址,為消費者挑選合適的物件,屬於程序式的負載均衡是相對於消費者,從消費者出發的。

1.ribbon使用

ribbon作為一個軟負載均衡,大部分情況都是和其他應用進行組合,本次採用eureka配置。

ribbon本身整合在Netflix中,所以有Netflix的jar時候不需要匯入額外的ribbon依賴,避免造成依賴版本衝突。

2.template

一般ribbon是和template配合使用,首先在配置類中新增loadbalance註解。

@Configuration
public class AppConfig {
    /**
     * 注入restTemplate,請用請求rest介面
     * @return
     */
    @Bean
    // 標註此註解後,RestTemplate就具有了客戶端負載均衡能力
    // 負載均衡技術依賴於的是Ribbon元件~
    // RestTemplate都塞入一個loadBalancerInterceptor 讓其具備有負載均衡的能力
    @LoadBalanced
    public RestTemplate restTemplate(){
        
return new RestTemplate(); } }

在controller中進行測試,用restTemplate測試。

@RestController
@Slf4j
public class OrderController {
    public static final String PAYMENT_URL = "http://CLOUD-PAYMENT-SERVICE";
    @Resource
    private RestTemplate restTemplate;

    @GetMapping("/consumer/payment/get/{id}")
    
public CommonResult<PayMent> getPayment(@PathVariable("id") Long id){ return restTemplate.getForObject(PAYMENT_URL + "/payment/get/" + id, CommonResult.class); } }

多次請求此頁面的時候,會交替的選擇兩個叢集,這個涉及到負載均衡的規則下面介紹,

3.負載均衡。

ribbon涉及到的負載均衡策略有:

預設情況下是用的輪詢模式,即每訪問一次更換一個服務提供者,輪詢著採用。

同時自己也可以進行自定義模式,但自己建立的配置類需要注意檔案的位置不能和啟動類平級或在其子包下。可以採用如下放置。

附上改變策略模式的配置類,這裡換成了隨機策略,即每次選擇都是隨機的服務提供者。

@Configuration
public class MySelfRule {
    @Bean
    public IRule myrule(){
        return new RandomRule();
    }
}

當然配置類也需要分配給容器管理,最後也是需要在啟動類中進行說明。

@EnableEurekaClient
@SpringBootApplication
@RibbonClient(name = "CLOUD-PAYMENT-SERVICE",configuration = MySelfRule.class)
public class OrderMain80 {
    public static void main(String[] args) {
        SpringApplication.run(OrderMain80.class,args);
    }
}

輪詢演算法等都是有原始碼可分析的,有興趣可自行搜尋原始碼分析。