Нахождение наименее загруженного сервера - PullRequest
5 голосов
/ 08 января 2012

Учитывая три сервера, на которых A, B, C, в которых A может обрабатывать 50% трафика, B может обрабатывать 30% трафика, а C может обрабатывать 20% трафика, разработали формулу для эффективного распределения нагрузки. Текущая загрузка серверов также является входом для функции.

Я не мог придумать "формулу", которую он просит. Есть ли конкретный ответ на этот вопрос?

Ответы [ 2 ]

5 голосов
/ 08 января 2012

Существует несколько различных способов распределения нагрузки, которые могут быть здесь применимы.

Случай 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)
2 голосов
/ 08 января 2012

По сути, вычислите относительную стоимость обслуживания на каждом из серверов и в течение некоторого небольшого фиксированного периода суммируйте общую стоимость запросов, отправленных на указанный сервер.Что-то вроде:

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)
...