Round-Robin负载均衡算法及其实现原理
轉(zhuǎn)載:https://blog.csdn.net/xtx1990/article/details/8437622
第一次在pjsip協(xié)議棧中了解到這個(gè)實(shí)現(xiàn)負(fù)載均衡的機(jī)制,于是網(wǎng)上查了下資料,下面的介紹應(yīng)該可以很容易理解。
輪詢(xún)調(diào)度算法(Round-Robin Scheduling)
? ? 輪詢(xún)調(diào)度算法的原理是每一次把來(lái)自用戶的請(qǐng)求輪流分配給內(nèi)部中的服務(wù)器,從1開(kāi)始,直到N(內(nèi)部服務(wù)器個(gè)數(shù)),然后重新開(kāi)始循環(huán)。
? ? 算法的優(yōu)點(diǎn)是其簡(jiǎn)潔性,它無(wú)需記錄當(dāng)前所有連接的狀態(tài),所以它是一種無(wú)狀態(tài)調(diào)度。
? ? 輪詢(xún)調(diào)度算法流程
? ? 假設(shè)有一組服務(wù)器N臺(tái),S={S1, S2, ..., Sn},一個(gè)指示變量i表示上一次選擇的服務(wù)器ID。變量i被初始化為N-1.其算法如下:
j = i;
do?
{
? ? j = (j+1) mod n;
? ? i = j;
? ? return Si;
} while(j != i);
return NULL;
? ? 這種算法的邏輯實(shí)現(xiàn)如圖1所示:
? ? ? ? ? ? ? ? ? ? ? ?圖1 輪詢(xún)調(diào)度實(shí)現(xiàn)邏輯圖示
? ? 輪詢(xún)調(diào)度算法假設(shè)所有服務(wù)器的處理性能都相同,不關(guān)心每臺(tái)服務(wù)器的當(dāng)前連接數(shù)和響應(yīng)速度。當(dāng)請(qǐng)求服務(wù)間隔時(shí)間變化比較大時(shí),輪詢(xún)調(diào)度算法導(dǎo)致服務(wù)器間的負(fù)載不均衡。
? ? 所以此種均衡算法適合于服務(wù)器組中的所有服務(wù)器都有相同的軟硬件配置并且平均服務(wù)請(qǐng)求相對(duì)均衡的情況。
權(quán)重輪詢(xún)調(diào)度算法(Weighted Round-Robin Scheduling)
? ? 上面所講的輪詢(xún)調(diào)度算法并沒(méi)有考慮每臺(tái)服務(wù)器的處理能力,在實(shí)際情況中,可能并不是這種情況。由于每臺(tái)服務(wù)器的配置、安裝的業(yè)務(wù)應(yīng)用等不同,其處理能力會(huì)不一樣。所以,我們根據(jù)服務(wù)器的不同處理能力,給每個(gè)服務(wù)器分配不同的權(quán)值,使其能夠接受相應(yīng)權(quán)值數(shù)的服務(wù)請(qǐng)求。
? ? 權(quán)重輪詢(xún)調(diào)度算法流程
? ? 假設(shè)有一組服務(wù)器S={S0, S1, ..., Sn-1}, W(Si)表示服務(wù)器Si的權(quán)值,一個(gè)指示變量i表示上一次選擇的服務(wù)器,指示變量cw表示當(dāng)前調(diào)度的權(quán)值,max(S)表示集合S中所有服務(wù)器的最大權(quán)值,gcd(S)表示集合S中所有服務(wù)器權(quán)值的最大公約數(shù)。變量i初始化為-1,cw初始化為零。其算法如下:
while (true) {
? ? i = (i+1) mod n;
? ? if (i == 0) {
? ? ? ? cw = cw - gcd(S);
? ? ? ? if (cw <= 0) {
? ? ? ? ? ? cw = max(S);
? ? ? ? ? ? if (cw == 0)?
? ? ? ? ? ? ? ? return NULL;
? ? ? ? }
? ? }
? ? if (W(Si) >= cw)?
? ? ? ? return Si;
}
這種算法的邏輯實(shí)現(xiàn)如圖2所示,圖中我們假定四臺(tái)服務(wù)器的處理能力為3:1:1:1.
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖2 權(quán)重輪詢(xún)調(diào)度實(shí)現(xiàn)邏輯圖示
? ?由于權(quán)重輪詢(xún)調(diào)度算法考慮到了不同服務(wù)器的處理能力,所以這種均衡算法能確保高性能的服務(wù)器得到更多的使用率,避免低性能的服務(wù)器負(fù)載過(guò)重。所以,在實(shí)際應(yīng)用中比較常見(jiàn)。
總結(jié)
? ? ?輪詢(xún)調(diào)度算法以及權(quán)重輪詢(xún)調(diào)度算法的特點(diǎn)是實(shí)現(xiàn)起來(lái)比較簡(jiǎn)潔,并且實(shí)用。目前幾乎所有的負(fù)載均衡設(shè)備均提供這種功能。
? ? ?
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Round-Robin负载均衡算法及其实现原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 配置Apache Basic和Diges
- 下一篇: 跟我一起使用electron搭建一个文件