Балансировка.

Ivan B. Serezhkin ivan at serezhkin.com
Mon Dec 4 18:16:42 MSK 2006


Здравствуйте уважаемые специалисты.

Хочу затронуть вопрос о балансировки нагрузки на бэкэнды.
В данный момент nginx использует не сполне адекватный роундробин для 
раскидки запросов по бэкэндам.
У меня есть предложение исправить эту ситуацию, и сделать разброс 
интелектуальным.

Сейчас мне известно два метода балансировки нагрузки по бэкэндам - 
mod_backhand и лайфджорналовский perlbal.

Ничто из них по большому счёту не является решением проблемы, оба 
опираются на heartbit.

У  меня есть предложение модифицировать ngx_http_upstream и добавить в 
него два модификатора весов бэкэндов.
Один по времени ответа бэкэнда, и один по, специально передаваемому 
бэкэндом, заголовку, вроде Load-Average:
Как я вижу в ngx_http_upstream - можно вовремя получить эти величины и 
модифицировать временные веса бэкэндов (может один из них сервер из 
запасника, или там система пересобирается).
Модифицировать временные веса, и использовать цисковский раундробин по 
имеющимся бэкэндам.
при получении 500-что-нибудь отдельно зарезхать бэкэнд, тоже самое с 
таймаутами.

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

Стандартный алгоритм - цисковский раундробин при котором вес сервера 
равен время ответа минус константа , всё в минус первой.

-- 
Ivan B. Serezhkin






More information about the nginx-ru mailing list