Nginx и WSGI

Сегодня наткнулся на просто невероятную вещь - mod_wsgi для nginx’а. На английском упоминаний нету вообще нигде, но не сомневаюсь, что они скоро появятся. :)

UPD. Он, конечно, совсем новый и ещё не юзабельный для продакшена, но, судя по всему, пока разработчик порядочно активен - только что добавился TODO

Comments: 7 (already: 0) Comment post

Да, вот это интересно :-)

Правда, это уничтожает идею выполнять app-серверы отдельно, а не внутри web-сервера, а она имеет свой резон: web-сервер, занимающийся передачей данных от юзера и обратно совершенно не нужен во время выполнения app-сервера, обрабатывающего эти данные. Если запихать их в один процесс, то одна из его частей всегда будет простаивать: Django будет сидеть и ждать, пока передаются данные, а nginx будет сидеть и ждать, пока они обрабатываются.

С другой стороны, это совсем плохо только с многопроцессной архитектурой. А с асинхронным nginx’ом это может и не быть особенной проблемой.

Иван Сагалаев , 12:53

Да, есть плюсы и минусы. Но у конкретно этого проекта большой плюс - он позволяет апач дропнуть при любых раскладах. :)

Надо FCGI - пользуйся. Надо WSGI - тоже пользуйся. И никаких огроменных апачей. ;)

Alexander Solovyov , 15:44

От lighttpd дождаться симметричного ответа не получится. Поскольку lighttpd - это state machine, то любые длительные действия будут тормозить весь сервер, так что без внешних процессов и FastCGI/SCGI/AJP/какого-нибудь-ещё протоколов уйти нельзя.

dottedmag , 09:48 (after 8 days)

А nginx - не state machine? В чём разница вообще? ;)

Alexander Solovyov , 11:13 (after 8 days)

У nginx есть пул рабочих процессов, каждый из которых можно тормозить на сколь угодно продолжительный промежуток времени (пока есть хотя бы один свободный - сервер будет работать), а lighttpd - это один процесс, внутри которого задачи и диспетчеризуются. Такая архитектура позволяет снизить overhead на переключение между процессами операционной системы, но при этом предъявляет требования к самим задачам: их нужно уметь делить на мелкие кусочки и ожидать.

Отдача статических файлов или перекачка данных из внешнего CGI/FastCGI-приложения - как раз такие подходящие задачи: их можно ждать на poll/epoll, и они естественным образом делятся на кусочки - сколько данных приехало, столько и записали в сокет.

python-интерпретатор - дело совершенно другое, его в произвольный момент времени остановить нельзя.

dottedmag , 15:06 (after 8 days)

У апачевского mod_wsgi есть возможность запускать твоё приложение как демон тут, поискать WSGIDaemonProcess. Подобную штуку можно сделать и в версии модуля для lighttpd, правильно? Т.е. только один вариант, запускать процессы как демоны, без встраивания интерпретатора в сам веб-сервер.

Alexander Solovyov , 17:12 (after 8 days)

Однако… :) Это он сильно. :) Неужели mod_wsgi настолько лучше FastCGI?

Alexander Solovyov , 09:54 (after 8 days)

Comment form for «Nginx и WSGI»

Required. 30 chars of fewer.

Required.

Comment post