backhand

Igor Sysoev is at rambler-co.ru
Wed Jun 15 19:38:50 MSD 2005


On Mon, 13 Jun 2005, Ivan B. Serezhkin wrote:

> Подскажите пожалуйста, как слушать mod_backhand-овский spread и выбирать 
> бэкэнд наименее загруженный ?
>
> Если этого нельзя сейчас делать - то что надо написать, что бы было можно ?

Отвечаю на письмо присланное на личный адрес.

> 1. Как именно реализуются в nginx подключения модулей,

Механизм подключения на данный момент простой:

./configure --add-module=/path/to/some/module

в каталоге /path/to/some/module должен быть файл config примерно
такого содержания:

-------------
ngx_addon_name=ngx_http_some_module

HTTP_MODULES="$HTTP_MODULES ngx_http_some_module"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_some_module.c"
-------------

ngx_http_some_module.c тоже должен быть в этом же каталоге.

> по какому пути идёт запрос, и что на этом пути можно с ним сделать.

Если нужно слушать udp-пакеты и на их основании менять веса апстримов,
то это нужно делать не по пути обработки запроса, а по-другому.

> Как грамотно обрабатывать конфиг ?

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

> 2. Как можно и как лучше реализовать слушатель бродкастов бэкэндов, который
> бы хранил данные для выбора бэкэнда. И как потом к этим данным доступатся
> из модуля ?

Нужно получить список всех апстримов, открыть listen порт, написать
обработчики событий при получении UDP, которые бы изменяли веса и
доступность апстримов.

На данный момент в реализации этого есть две проблемы:
1) сейчас нельзя получить список всех апстримов, но это несложно добавить.
2) список апстримов не разделяется между процессами, это уже сложнее.

> 3. Как реализовать модуль так, что бы его портирование не составляло труда.
> (некоторое время я буду его писать только под FreeBSD причём только под
> пятёрку)

Основные исходники, как правило, от платформы мало зависят, многое вынесено
в src/os/, но что касается UDP, то тут нужно смотреть, возможно, что-то
нужно будет добавть в src/os/.


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





More information about the nginx-ru mailing list