Подтвердить что ты не робот

Что такое предварительная модель веб-сервера?

Я хочу знать, что именно это означает, когда веб-сервер описывает себя как веб-сервер pre-fork. У меня есть несколько примеров, таких как unicorn для ruby ​​и gunicorn для python.

В частности, это следующие вопросы:

  • Какую проблему решает эта модель?
  • Что происходит, когда предварительно запущен веб-сервер pre-fork?
  • Как он обрабатывает запрос?

Кроме того, более конкретный вопрос для единорога /gunicorn:

Скажем, что у меня есть webapp, который я хочу запустить с (g) единорогом. При инициализации webapp будет выполнять некоторые операции инициализации (например, заполнить дополнительные записи в базе данных). Если я настрою (g) единорог с несколькими рабочими, будут ли выполняться операции инициализации несколько раз?

4b9b3361

Ответ 1

Предварительное форкирование в основном означает, что мастер создает вилки, которые обрабатывают каждый запрос. Вилка - это совершенно отдельный процесс * nix.

Обновить в соответствии с комментариями ниже. pre в pre-fork означает, что эти процессы разветвляются до того, как приходит запрос. Однако они могут быть увеличены или уменьшены по мере увеличения и уменьшения нагрузки.

Предварительная форкировка может использоваться, когда у вас есть библиотеки, которые НЕ являются потокобезопасными. Это также означает, что проблемы в запросе, вызывающем проблемы, будут влиять только на процесс, который они обрабатывают, а не на весь сервер.

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

В потоковой модели мастер создавал бы более легкие потоки веса для отправки запросов. Но если поток вызывает массовые проблемы, это может иметь последствия для главного процесса.

С такими инструментами, как Nginx, Apache 2.4 Event MPM или gevent (которые можно использовать с Gunicorn), они асинхронны, что означает, что процесс может обрабатывать сотни запросов, а не блокировать.