2015-06-11 3 views
0

Главное преимущество Nginx процитировано, так как ему не нужно создавать отдельные потоки для каждого получаемого запроса.Nginx + FastCGI с блокирующими вызовами

Теперь, если бы мы запускали веб-приложение на основе python с использованием FastCGI, и это веб-приложение блокирует вызовы, создаст ли это узкое место?

Поскольку работает только ограниченное число работающих (1 на процессор?), Не будет ли блокирующий вызов скриптом python сделать совместную многопроцессорную обработку?

+0

Зачем вам запускать приложение Python через nginx с FastCGI? Вы будете использовать wsgi. –

+0

1. Хорошо, может быть, это не само по себе преимущество, назовем его особенностью. 2. Насколько я понимаю, WSGI - это интерфейс, и поверх FastCGI есть WSGI-обертка. 3. Да, Apache может создавать процессы. Но все дело в том, чтобы * не * обрабатывать процессы. – Anirudh

+0

@ DanielRoseman Рассматривайте пункт 2 ответа на отредактированный комментарий. И почему голос? – Anirudh

ответ

0

Nginx рассказывает о процессе fastcgi через соединение сокета.

Если блок fastcgi блокирует, это означает, что он не будет отправлять данные по сокету.

Это не будет блокировать nginx как таковой, поскольку он продолжает обрабатывать события (данные из других соединений). Он использует неблокирующие методы, такие как select, poll или эквивалентные функции, зависящие от ОС (с таймаутом) для запроса сокетов без блокировки.

Но он остановится, если клиент ожидает выхода fastcgi.

+0

Если процесс fastcgi блокируется, nginx будет продолжать обрабатывать события. Тогда не начнется ли новый экземпляр? (процесс или нить или зеленая нить). – Anirudh

+0

Именно поэтому вы всегда создаете пул бэкэнд-соединений и выполняете простой балансировочный баланс между ними, на аверидже 10 должно быть достаточно. – itpp13

+0

@Anirudh Nginx * подключает * к процессам fastcgi, но он [не запускает их] (http://wiki.nginx.org/FcgiExample). Внутри nginx имеет [управляемую событиями архитектуру] (http://www.aosabook.org/en/nginx.html). –