Algorithm 查找负载最少的服务器

Algorithm 查找负载最少的服务器,algorithm,load-balancing,Algorithm,Load Balancing,给出了三个服务器,其中A、B、C可以处理50%的流量,B可以处理30%的流量,C可以处理20%的流量,并给出了一个公式来有效地分配负载。服务器的当前负载也是该功能的输入 我想不出他要的“公式”。这个问题有什么具体的答案吗?这里可能有几种不同的方法来分配负载 案例1。随机分配按比例偏向于每个服务器负载: for each request let x = uniformly distributed random number between 0 and 1 if x <= 0.5

给出了三个服务器,其中A、B、C可以处理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
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)

基本上,计算在每个服务器上提供服务的相对成本,并在一个小的固定周期内,将发送到所述服务器的请求的总成本相加。比如:

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)

我似乎记得几个月前有人问过这个问题。可能已迁移到ServerFault。我一直很好奇这个问题的答案是什么。这个问题的标题是“寻找负载最少的服务器”,但这篇文章暗示了要想出一个负载平衡算法?在任何情况下,如果当前负载是等式的输入,那么为什么答案不是“选择负载最少的服务器”。负载和流量不是一回事吗?我假设您使用网络连接数/流量计算每个服务器的当前负载,然后将新连接路由到负载最小的服务器?