Dubbo负载均衡算法
RandomLoadBalance
權(quán)重隨機(jī)算法,根據(jù)權(quán)重值進(jìn)行隨機(jī)負(fù)載
它的算法思想很簡(jiǎn)單。假設(shè)我們有一組服務(wù)器?servers = [A, B, C],他們對(duì)應(yīng)的權(quán)重為?weights = [5, 3, 2],權(quán)重總和為10。現(xiàn)在把這些權(quán)重值平鋪在一維坐標(biāo)值上,[0, 5)?區(qū)間屬于服務(wù)器?A,[5, 8)?區(qū)間屬于服務(wù)器?B,[8, 10)?區(qū)間屬于服務(wù)器?C。接下來(lái)通過(guò)隨機(jī)數(shù)生成器生成一個(gè)范圍在?[0, 10)?之間的隨機(jī)數(shù),然后計(jì)算這個(gè)隨機(jī)數(shù)會(huì)落到哪個(gè)區(qū)間上。比如數(shù)字3會(huì)落到服務(wù)器?A?對(duì)應(yīng)的區(qū)間上,此時(shí)返回服務(wù)器?A?即可。權(quán)重越大的機(jī)器,在坐標(biāo)軸上對(duì)應(yīng)的區(qū)間范圍就越大,因此隨機(jī)數(shù)生成器生成的數(shù)字就會(huì)有更大的概率落到此區(qū)間內(nèi)。只要隨機(jī)數(shù)生成器產(chǎn)生的隨機(jī)數(shù)分布性很好,在經(jīng)過(guò)多次選擇后,每個(gè)服務(wù)器被選中的次數(shù)比例接近其權(quán)重比例
LeastActiveLoadBalance
最少活躍調(diào)用數(shù)算法,活躍調(diào)用數(shù)越小,表明該服務(wù)提供者效率越高,單位時(shí)間內(nèi)可處理更多的請(qǐng)求這個(gè)是比較科學(xué)的負(fù)載均衡算法。
每個(gè)服務(wù)提供者對(duì)應(yīng)一個(gè)活躍數(shù)?active。初始情況下,所有服務(wù)提供者活躍數(shù)均為0。每收到一個(gè)請(qǐng)求,活躍數(shù)加1,完成請(qǐng)求后則將活躍數(shù)減1。在服務(wù)運(yùn)行一段時(shí)間后,性能好的服務(wù)提供者處理請(qǐng)求的速度更快,因此活躍數(shù)下降的也越快,此時(shí)這樣的服務(wù)提供者能夠優(yōu)先獲取到新的服務(wù)請(qǐng)求
ConsistentHashLoadBalance
hash一致性算法,相同參數(shù)的請(qǐng)求總是發(fā)到同一提供者
當(dāng)某一臺(tái)提供者掛時(shí),原本發(fā)往該提供者的請(qǐng)求,基于虛擬節(jié)點(diǎn),平攤到其它提供者,不會(huì)引起劇烈變動(dòng)
RoundRobinLoadBalance
加權(quán)輪詢(xún)算法
所謂輪詢(xún)是指將請(qǐng)求輪流分配給每臺(tái)服務(wù)器。舉個(gè)例子,我們有三臺(tái)服務(wù)器?A、B、C。我們將第一個(gè)請(qǐng)求分配給服務(wù)器?A,第二個(gè)請(qǐng)求分配給服務(wù)器?B,第三個(gè)請(qǐng)求分配給服務(wù)器?C,第四個(gè)請(qǐng)求再次分配給服務(wù)器?A。這個(gè)過(guò)程就叫做輪詢(xún)。輪詢(xún)是一種無(wú)狀態(tài)負(fù)載均衡算法,實(shí)現(xiàn)簡(jiǎn)單,適用于每臺(tái)服務(wù)器性能相近的場(chǎng)景下。但現(xiàn)實(shí)情況下,我們并不能保證每臺(tái)服務(wù)器性能均相近。如果我們將等量的請(qǐng)求分配給性能較差的服務(wù)器,這顯然是不合理的。因此,這個(gè)時(shí)候我們需要對(duì)輪詢(xún)過(guò)程進(jìn)行加權(quán),以調(diào)控每臺(tái)服務(wù)器的負(fù)載。經(jīng)過(guò)加權(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)求
?
總結(jié)
以上是生活随笔為你收集整理的Dubbo负载均衡算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Dubbo中负载均衡的应用
- 下一篇: 一致性hash算法原理