天天看點

ribbon設定權重_Spring Cloud學習筆記——Ribbon負載均衡和自定義負載政策

Spring Cloud學習筆記——Ribbon

負載均衡

在分布式微服務系統中,負載均衡也是核心能力之一,這裡的負載均衡主要是指各個微服務之間的負載均衡。以Spring Cloud為例,假設在叢集中,A服務要調用B服務,而B服務在叢集中,有10個節點都有提供,那麼,壓力如何配置設定到10個節點上,就是負載均衡要考慮的問題。

常見的負載均衡算法可以分成兩類,即靜态和動态。動态算法的典型特征是會以目前節點的負載狀态作為一個算法參數來計算配置設定權值,而靜态算法則和節點負載狀态無關。由此可見,靜态算法通常比動态算法簡單些。

常見的負載均衡算法很多,我們舉幾個例子。

輪詢法:将使用者的請求輪流配置設定到伺服器。這種算法實作簡單,并且也是絕對均衡的。它和伺服器負載無關,是靜态算法。

随機法:将使用者的請求随機配置設定到某台伺服器。這種算法實作也簡單,它和輪詢法有些類似,雖不能保證絕對均衡,但是當請求達到一定量級時,仍然是可以基本均衡的。它和伺服器負載也無關,是靜态算法。

最小連接配接法:将使用者的請求配置設定給此時具有最小連接配接數的節點。這種算法較為複雜些,會基于伺服器目前的連接配接數來進行配置設定,是動态算法。

事實上,在負載均衡中,可能會有更多的場景以及相應的實作方案,比如說:

A節點配置優于B節點,希望由A節點承擔多于B節點的壓力。伺服器大緻位于兩個區域,北京和上海,希望上層服務可優先調用同區域的下層服務。伺服器更新時,為達到熱部署的效果,可能需要動态地對某些服務的負載權重進行修改以配合服務更新。類似的場景還有很多,由此可見,負載均衡并不是一個簡單的問題,好在,我們已經有了許多高效可靠的工具,來幫助我們解決這些問題。

Ribbon

Spring Cloud Ribbon就是一個用戶端負載均衡工具,它可以幫助我們實作各種需要的負載均衡相關的效果。在上一篇中,我們了解了Feign的簡單使用,Feign是Spring Cloud提供的一個為簡化Http調用的元件封裝,并且,在其中,也封裝了關于Ribbon的内容。當然,Ribbon也可以單獨使用,但是那種方式通常會使代碼臃腫些,大家有興趣可以自行嘗試,本文不作展示。

全局配置可以直接添加到配置檔案中,如:

ribbon設定權重_Spring Cloud學習筆記——Ribbon負載均衡和自定義負載政策

全局配置

也可以針對任意一個FeignClient用戶端進行設定,假設要對deme2進行配置,如:

ribbon設定權重_Spring Cloud學習筆記——Ribbon負載均衡和自定義負載政策

指定用戶端配置

spring cloud ribbon提供了幾個規則可供選擇,如:

随機:RandomRule,随機算法。

輪詢:RoundRobinRule,輪詢算法。

重試:RetryRule,重試算法。重試算法的含義是在固定時間内基于輪詢進行選擇,如逾時仍未選出,則線程終止。

響應時間權重:WeightedResponseTimeRule,響應時間權重算法,權重值和服務的平均響應時間相關。

最空閑連接配接政策:BestAvailableRule,最空閑連接配接算法,即最小連接配接算法。

以上這些算法類都可以在ribbon-loadbalancer中的com.netflix.loadbalancer包中找到。當然了,我們也可以模仿現有的規則,自己重新定義一個Rule,如MyRule,内容如下:

ribbon設定權重_Spring Cloud學習筆記——Ribbon負載均衡和自定義負載政策

MyRule