2010-09-08 3 views
0

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

Thx для всех помочь

+0

Вы просто получаешь единовременное количество запросов, или же они приходят в один за другим время? Если по одному, примерно каждые 10? Если в единовременной сумме, как взять 10% и назначить их? – Ragster

ответ

0

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

Или

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

Или

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

Или

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

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

0

Документов Apache есть раздел load balancing (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]); 
Смежные вопросы