Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Балансировка.
Здравствуйте уважаемые специалисты.
Хочу затронуть вопрос о балансировки нагрузки на бэкэнды.
В данный момент nginx использует не сполне адекватный роундробин для
раскидки запросов по бэкэндам.
У меня есть предложение исправить эту ситуацию, и сделать разброс
интелектуальным.
Сейчас мне известно два метода балансировки нагрузки по бэкэндам -
mod_backhand и лайфджорналовский perlbal.
Ничто из них по большому счёту не является решением проблемы, оба
опираются на heartbit.
У меня есть предложение модифицировать ngx_http_upstream и добавить в
него два модификатора весов бэкэндов.
Один по времени ответа бэкэнда, и один по, специально передаваемому
бэкэндом, заголовку, вроде Load-Average:
Как я вижу в ngx_http_upstream - можно вовремя получить эти величины и
модифицировать временные веса бэкэндов (может один из них сервер из
запасника, или там система пересобирается).
Модифицировать временные веса, и использовать цисковский раундробин по
имеющимся бэкэндам.
при получении 500-что-нибудь отдельно зарезхать бэкэнд, тоже самое с
таймаутами.
Я пытался отдельно писать подобные расширения, но не потянул.
В принципе они нужны под множество задач, особенно под разноколиберные
сервера, на которых постоянно происходит что то ещё.
Когда я выбью время у начальства под эту задачу - я буду этим заниматся
в плотную, а cейчас интересно послушать ваше мнение по поводу
необходимости такой функциональности и различных алгоритмов её воплощения.
Стандартный алгоритм - цисковский раундробин при котором вес сервера
равен время ответа минус константа , всё в минус первой.
--
Ivan B. Serezhkin
|