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