給定三個服務器,其中A可以處理50%的通信量,B可以處理30%的通信量,而C可以處理20%的通信量,具有公式有效分配負載。服務器的當前負載也是該函數的輸入。找到裝載量最小的服務器
我不能想出他所要求的「公式」。這個問題有沒有具體的答案?
給定三個服務器,其中A可以處理50%的通信量,B可以處理30%的通信量,而C可以處理20%的通信量,具有公式有效分配負載。服務器的當前負載也是該函數的輸入。找到裝載量最小的服務器
我不能想出他所要求的「公式」。這個問題有沒有具體的答案?
有幾種不同的方式來分配可能適用的負載。
情況1成比例地偏壓到每個服務器負載隨機分配:
for each request
let x = uniformly distributed random number between 0 and 1
if x <= 0.5
goto A
else if x <= 0.8
goto B
else
goto C
情況2輪轉比例偏壓到每個服務器負載:
let x = new list
push A on x 5 times
push B on x 3 times
push C on x 2 times
for each request
y = pop x
goto y
push y to back of x
情況3忘掉應該容量和輪詢電流負載
let La = A, load of A
let Lb = B, load of B
let Lc = C, load of C
goto argmin (La,Lb,Lc)
基本上,計算相對成本ser在每個服務器上,並且在一個小的固定時間段內,將發送到所述服務器的請求的總成本相加。例如:
Cost_A = 20/50
Cost_B = 20/30
Cost_C = 20/20
Running_Total_A = 0
Running_Total_B = 0
Running_Total_c = 0
while true:
If One minute has passed:
Running_Total_A = 0
Running_Total_B = 0
Running_Total_c = 0
IF (Min(Running_Total_A,Running_Total_B,Running_Total_C) == Running_Total_A):
Running_Total_A += Cost_A
RouteTo(A)
ELSE IF (Min(Running_Total_A,Running_Total_B,Running_Total_C) == Running_Total_B):
Running_Total_B += Cost_B
RouteTo(B)
ELSE IF (Min(Running_Total_A,Running_Total_B,Running_Total_C) == Running_Total_C):
Running_Total_C += Cost_C
RouteTo(C)
我似乎回想起幾個月前在SO上提出的這個問題。可能已被遷移到ServerFault。我總是好奇答案是什麼。 – selbie 2012-01-08 05:06:43
這個問題的標題稱爲「找到最少加載的服務器」,但文本意味着提出一個負載平衡算法?無論如何,如果當前的負載是等式的輸入,那麼爲什麼不是答案,「選擇最少的負載服務器」。負載和流量是不是意味着同樣的事情? – selbie 2012-01-08 05:13:44
我假設您使用網絡連接數/流量來計算每個服務器當前負載,然後將新連接路由到具有最小負載的服務器? – 2012-01-08 05:21:11