простой алгоритм балансировки нагрузки - PullRequest
0 голосов
/ 08 сентября 2010

Я пытаюсь написать приложение, которое будет перенаправлять или нет некоторый веб-трафик. Предположим, я хочу перенаправить 10% движения на другой веб-сервер. Дело в том, что я не знаю, как перевести это условие в логическое состояние в моем приложении. В качестве входных данных я получил количество запросов. Как получить, какой запрос следует перенаправить, а какой нет, если количество запросов все еще меняется?

Спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 08 сентября 2010

В документации Apache есть раздел по балансировке нагрузки (Ctrl + F для этого на этой странице).

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

servers = [0: server0.com, 1: server1.com, ...];
server_count = 10;
# split the crc32 range into server_count chunks
server = crc32(get_client_ip_address()) % (4294967296 / server_count);
redirect(servers[server]);
0 голосов
/ 08 сентября 2010

Получить случайное число из диапазона <0;10), а затем, если это number is equal to 0.Перенаправить на другой веб-сервер.

Или

Вы можете использовать для этого http://en.wikipedia.org/wiki/Round_robin алгоритм.

Или

Вы можете забыть об этих 10% и написать некоторые функции для получения бесплатных ресурсов на серверах, затем вы можете выбрать сервер, который имеет в свободное время больше свободных ресурсов, и, если все серверы заполнены, вы можете разорвать соединение сошибка или отправка на случайный сервер.

или

Подумайте об этом на уровне веб-прокси-сервера , я думаю, что это лучшее решение.

Читать это http://en.wikipedia.org/wiki/Reverse_proxy

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...