全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

首頁(yè)技術(shù)文章正文

Ribbon負(fù)載均衡算法父接口IRule接口介紹

更新時(shí)間:2020-11-19 來(lái)源:黑馬程序員 瀏覽量:

1577370495235_學(xué)IT就到黑馬程序員.gif

默認(rèn)情況下,Ribbon使用的負(fù)載均衡策略是輪詢(xún),實(shí)際上,Ribbon提供了很多負(fù)載均衡算法,其中IRule接口就是所有負(fù)載均衡算法的父接口,它的實(shí)現(xiàn)類(lèi)結(jié)構(gòu)如下圖所示。

1605780364715_ribbon負(fù)責(zé)策略.jpg

IRule接口實(shí)現(xiàn)類(lèi)結(jié)構(gòu)

在下圖中,AbstractLoadBalancerRule是負(fù)載均衡策略的抽象類(lèi),該抽象類(lèi)中定義了負(fù)載均衡器ILoaderBalancer對(duì)象,該對(duì)象能夠在具體實(shí)現(xiàn)選擇服務(wù)策略時(shí),獲取到一些負(fù)載均衡器中維護(hù)的信息作為分配依據(jù),并以此設(shè)計(jì)一些算法來(lái)實(shí)現(xiàn)針對(duì)特定場(chǎng)景的高效策略。

在上圖中,各個(gè)實(shí)現(xiàn)類(lèi)實(shí)現(xiàn)了一種負(fù)載均衡算法,關(guān)于這些實(shí)現(xiàn)類(lèi)的具體介紹如下:

● RoundRobinRule:實(shí)現(xiàn)了按照線(xiàn)性輪詢(xún)的方式依次選擇服務(wù)的功能。

● WeightedResponseTimeRule: 它是對(duì)RoundRobinRule的擴(kuò)展,會(huì)根據(jù)平均響應(yīng)時(shí)間計(jì)算所有服務(wù)的權(quán)重,響應(yīng)時(shí)間越快,服務(wù)權(quán)重越大,被選中的概率越高。

● ZoneAvoidanceRule:它是PredicateBasedRule的具體實(shí)現(xiàn)類(lèi),其內(nèi)部通過(guò)使用ZoneAvoidancePredicate和AvailabilityPredicate判斷是否選擇某個(gè)服務(wù),前者用于判斷服務(wù)所在區(qū)域的性能是否可用,后者用于過(guò)濾掉連接數(shù)過(guò)多的服務(wù)。

● AvailabilityFilteringRule: 使用AvailabilityPredicate過(guò)濾由于多次訪(fǎng)問(wèn)故障而處于斷路器跳閘狀態(tài)的服務(wù),還有并發(fā)的連接數(shù)超過(guò)閥值的服務(wù),然后對(duì)剩余的服務(wù)列表進(jìn)行輪詢(xún)。

● BestAvailableRule:用于先過(guò)濾掉多次訪(fǎng)問(wèn)故障而處于斷路跳閘狀態(tài)的服務(wù),然后選擇一個(gè)并發(fā)量最小的服務(wù)。

● RetryRule: 該策略實(shí)現(xiàn)了一個(gè)具備重試功能的服務(wù)選擇功能,其內(nèi)部會(huì)先按照輪詢(xún)策略獲取服務(wù),如果獲取失敗則在指定時(shí)間內(nèi)重試,獲取可用服務(wù)。

● RandomRule:該策略實(shí)現(xiàn)了從服務(wù)清單中隨機(jī)選擇一個(gè)服務(wù)的功能。

● ClientConfigEnableRoundRobinRule:該類(lèi)是一個(gè)抽象類(lèi),該類(lèi)本身沒(méi)有實(shí)現(xiàn)什么特殊的處理邏輯,我們也不會(huì)直接使用該策略,但是通過(guò)BestAvailableRule和繼承該策略默認(rèn)實(shí)現(xiàn)了線(xiàn)性輪詢(xún),它的內(nèi)部定義了一個(gè)RoundRobinRule策略,

● PredicateBasedRule:繼承了ClientConfigEnableRoundRobinRule,其內(nèi)部會(huì)先通過(guò)chooseRoundRobinAfterFiltering()方法篩選服務(wù)清單,然后以線(xiàn)性輪詢(xún)的方式從過(guò)濾后的服務(wù)清單中選擇一個(gè)服務(wù)。


猜你喜歡:
JDK安裝教程:Jdk怎么安裝?

JDK環(huán)境變量配置win10視頻教程

分布式鎖是什么?有什么作用?

IO和NIO有什么區(qū)別?NIO有什么優(yōu)點(diǎn)?

黑馬Java高級(jí)軟件工程師培訓(xùn)課程



分享到:
在線(xiàn)咨詢(xún) 我要報(bào)名
和我們?cè)诰€(xiàn)交談!