Dubbo中負(fù)載均衡策略有:1、隨機(jī)選取提供者策略,能夠隨機(jī)轉(zhuǎn)發(fā)請(qǐng)求;2、輪循選取提供者策略,可以使請(qǐng)求平均分布;3、最少活躍調(diào)用策略,能夠讓慢提供者接收更少的請(qǐng)求;4、一致性Hash策略,相同參數(shù)請(qǐng)求總是發(fā)到同一提供者,如是一臺(tái)機(jī)器宕機(jī),可以基于虛擬節(jié)點(diǎn),分?jǐn)傊疗渌峁┱摺?/p>
具體內(nèi)容如下:
在分布式系統(tǒng)中有多臺(tái)的服務(wù)器作為提供者負(fù)責(zé)處理各種網(wǎng)絡(luò)請(qǐng)求,當(dāng)同時(shí)有多個(gè)請(qǐng)求同時(shí)過(guò)來(lái)時(shí),需要將其均攤在各臺(tái)服務(wù)器上,避免了某臺(tái)服務(wù)器壓力過(guò)大而某臺(tái)服務(wù)器則閑置的問(wèn)題。
Dubbo提供了四種實(shí)現(xiàn)負(fù)載均衡的機(jī)制:
1、基于權(quán)重隨機(jī)算法的 RandomLoadBalance
這種方式的思想是為每一臺(tái)服務(wù)器設(shè)置一個(gè)權(quán)值,當(dāng)有請(qǐng)求到來(lái)時(shí)就按照大體的權(quán)重比例為該請(qǐng)求分配服務(wù)器。
如圖當(dāng)orderService的消費(fèi)者請(qǐng)求userService服務(wù)時(shí),因?yàn)橐呀?jīng)提前設(shè)置了權(quán)重,每個(gè)請(qǐng)求都會(huì)按照權(quán)重的比例分配到相應(yīng)的服務(wù)器上,若有7個(gè)服務(wù)陸續(xù)發(fā)出請(qǐng)求,其中有2個(gè)請(qǐng)求將會(huì)發(fā)送到1號(hào)服務(wù)器,4個(gè)將會(huì)發(fā)送到2號(hào)服務(wù)器,1個(gè)發(fā)送到3號(hào)服務(wù)器。而即便是有權(quán)重比例,請(qǐng)求還是會(huì)隨機(jī)分配給每一個(gè)服務(wù)器,只是大體上會(huì)按照權(quán)重的比例而分配。
2、基于最少活躍調(diào)用數(shù)算法的 LeastActiveLoadBalance
這種思想會(huì)讓每一個(gè)服務(wù)提供者對(duì)應(yīng)一個(gè)Active活躍數(shù),剛開(kāi)始時(shí)每臺(tái)服務(wù)器的Active數(shù)均為0,每收到一個(gè)請(qǐng)求時(shí),Active就加一,當(dāng)下一次再有請(qǐng)求過(guò)來(lái),就會(huì)將該請(qǐng)求分配給Active數(shù)較小的服務(wù)提供者。而在實(shí)現(xiàn)上還會(huì)為每臺(tái)服務(wù)器設(shè)置一個(gè)權(quán)重,當(dāng)兩臺(tái)服務(wù)提供者的Active相同時(shí)且是最小時(shí),就按照權(quán)重的大小為請(qǐng)求分配服務(wù)器。當(dāng)然如果服務(wù)器的處理效率越高,Active數(shù)就會(huì)越少
3、基于 hash 一致性的 ConsistentHashLoadBalance
直接上圖解釋吧
當(dāng)orderService發(fā)送一個(gè)帶id參數(shù)的方法請(qǐng)求時(shí),會(huì)根據(jù)這個(gè)id分配給對(duì)應(yīng)的服務(wù)器;當(dāng)id=1時(shí)會(huì)將請(qǐng)求分配給服務(wù)提供者1,當(dāng)id=2時(shí),會(huì)將請(qǐng)求分配給服務(wù)提供者2,以此類(lèi)推…
4、基于加權(quán)輪詢(xún)算法的 RoundRobinLoadBalance
這種算法的思想首先要說(shuō)到輪詢(xún),比如說(shuō)有三臺(tái)服務(wù)器,第一個(gè)請(qǐng)求將會(huì)分配給1號(hào)服務(wù)器,第二個(gè)請(qǐng)求分給2號(hào)服務(wù)器,第三個(gè)請(qǐng)求將會(huì)分配給3號(hào)服務(wù)器,第四個(gè)請(qǐng)求又重新分配給了1號(hào)服務(wù)器,以此輪詢(xún)。而基于加權(quán)的輪詢(xún)算法則是會(huì)根據(jù)每臺(tái)服務(wù)器的性能為服務(wù)器設(shè)置一個(gè)權(quán)值,加權(quán)后,每臺(tái)服務(wù)器能夠得到的請(qǐng)求數(shù)比例,接近或等于他們的權(quán)重比。比如服務(wù)器 A、B、C 權(quán)重比為 5:2:1。那么在8次請(qǐng)求中,服務(wù)器 A 將收到其中的5次請(qǐng)求,服務(wù)器 B 會(huì)收到其中的2次請(qǐng)求,服務(wù)器 C 則收到其中的1次請(qǐng)求。