Load Balancing на основе входящих IP

Igor Sysoev is at rambler-co.ru
Wed Apr 6 13:30:07 MSD 2005


On Wed, 6 Apr 2005, Roman Golomidov wrote:

> Хочу поинтересоваться в каком виде можно сделать обработку обращения
> конкретным процессом или скриптом всякий раз когда происходит
> обращение.
>
> Допустим есть 3 одинаковых скрипта, но каждый обрабатывает
> определенный объем всех запросов. Разделять их можно условно: один
> скрипт только IE, другой FireFox.
> Или еще лучше по IP.
> A.B.C.D
> D mod 3 == 0 -> первый скрипт
> D mod 3 == 1 -> второй скрипт
> D mod 3 == 2 -> третий скрипт
>
> Самое важное, чтобы все повторные запросы приходили в тот же скрипт
> который их обрабатывал до этого.
>
> По большому счету, это что-то типа session, заведомо неточное, но
> простое и главное без кук и временных файлов. Для моих задач 100%
> точность не нужна, важна скорость и минимум нагрузочной работы любого
> вида.
>
> В голове 3 возможных варианта как это можно сделать.
> 1. через rewrite посылать на конкретный FastCGI скрипт. Отрицательным
> в этом решении является достаточная хлипкость и некрасивость
> конструкции: отдельный процесс на каждый скрипт, разные их названия
> (иначе FastCgi будет думать необходимость его запуска).
> 2. на уровне системы сразу же отдавать кокретному серверу запрос и он
> уже дальше думает чего с ним делать. Я уверен что есть такая
> возможность или какое то решение. Но найти не смог - только убогие
> варианты с куками или с временными файлами.
> 3. На уровне DNS - т.е. выдавать IP сервера из списка адресов в
> зависимости от запроса. Рабочее но не мобильное решение.
>
> Прошу подсказать как это сделать и можно ли вообще. Идеально было бы
> чтобы прямо nginx мог решить эту проблему в каком то виде.
> Первоначальную логику можно было бы написать модулем, и уже по
> необходимости передавалось бы fastcgi.

Не совсем понятно, как можно вообще сделать балансировку, привязывая сервера
к клиенту. И какой смысл привязывать, если не нужна 100% точность ?

Куки, на самом деле, правильное решение. Или сессии в УРЛе.

Что касается привязки обработки к серверу на основании ip, то для этого
можно использовать ngx_http_geo_module, но пока с его помощью нельзя
делать rewrite.


Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list