Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: keepalive от nginx к бакэнду. запрос фичи.
Здравствуйте, nginx-ru.
Уточню моменты, которые мне показались не важными в первом письме.
Господа товарищи, столкнулся с не большим багом.
1) стоит nginx версия 3.49
2) он настроен на отдачу статики и проксирование к бакэнду.
3) В качестве бакэнда стоит сервер на тредовой моделе. Назовем его "back-serv".
Теперь речь идет не о NGINX а о "back-serv".
Проблема в следующем, как я понимаю, keep-alive сооединения от nginx до
backend("back-serv") не устанавливаются(где в рассылке встречал, что
connection: всегда close).
Если один пользователь послал к примеру одновременно 7-10 запросов(к
NGINX на keep-alive от браузера юзера до NGINX), NGINX создает 7-10
запросов к backend("back-serv") не на одном соединение, а как
отдельные соединения каждый.
В этом случае, у backend("back-serv") все треды(пул из 10-ти тредов),
забиваются, выполнением схожей ф-и для этого
пользователя(например просмотр одной динамической таблицы, которая
строится быстро, но всеже использует общиее ресурсы, используя
разделение блокирование(mutex) ). Теперь, когда треды по очереди начинают
блочить ресурс по
пути работы ф-ии, они начинают тормозить(ожидая освобождения ресурса.)...
Создается толкучка в борьбе за ресуры, сервер практически подвисает в ожидании.
Мое видиние решения этой проблемы:
Сделать поддержку keep-alive соединений от NGINX до ПРОКСИРУЕМЫХ
backend'ов. В этом случае, nginx бы не открывал несколько
соединений, а довольствовался бы одним, по которому и пересылал бы
запросы от браузера одного пользователя к backend(в один тред,
к которому он бы подсоединялся).
Также было бы не плохо, если бы NGINX умел собирать, соединения без
keep-alive (одного пользователя, соединения с одного ip или сети) и
соединясь с back-end устанавливать keep-alive соединение, передавать
эти запросы по нему. Предвижу простой ответ, мол это все ненужною.
какие будут идеи?
Игорь, планируете ли вы когда либо, сделать настраивоемо keep-alive
между nginx и backend'ами ?
|