Как реализовать взвешенный круговой с помощью C #? - PullRequest
1 голос
/ 13 декабря 2011

Если у меня есть несколько серверов: 192.168.100.1, 192.168.100.2, 192.168.100.3, 192.168.100.4 ... и их вес: 5, 1, 2, 3

Я хочу реализовать балансировку нагрузки, но как я могу внедрить взвешенный циклический перебор с использованием C #?

1 Ответ

3 голосов
/ 13 декабря 2011

Скажем, у вас есть серверы a, b, c, d. И у вас есть соответствующие веса 5, 1, 2, 3. Вы можете сделать взвешенный круглый робин следующим образом:

Random rand = new Random(seed);

void processRequest(Request r){

    // assume rand.next() returns a uniformly distributed integer >= 0
    int i = rand.next() % 11; // 11 is sum of weights

    if(i <= 4)      // process r with server a
    else if(i == 5) // process r with server b
    else if(i <= 7) // process r with server c
    else            // process r with server d
}

rand.next() % 11 возвращает равномерно распределенное целое число в диапазоне [0, 10] (включительно). Мы обрабатываем запрос на сервере a для пяти возможных значений [0, 4]. Мы обрабатываем запрос на сервере b только для одного возможного значения 5 и т. Д.

Обратите особое внимание на конкретный случайный метод, который вы используете, и на начальное значение.

...