2014-09-14 6 views
44

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

Более конкретно, эти вопросы:

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

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

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

ответ

45

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

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

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

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

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

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

+12

У меня были такие же сомнения относительно значения «предки». Естественно, я предполагал, что это означало какой-то разветвление, но «предварительная» часть меня сбила с толку. Я нашел здесь http://www.abbreviations.com/prefork, что часть «pre» на самом деле означает, что рабочие процессы создаются заранее, так что время не пропадает без изменений, только когда нужен рабочий. Мне очень нравится :) –

+1

//, @ElNinjaTrepador, почему бы не добавить отдельный ответ? Это было гораздо более понятным для меня, по крайней мере, и это может помочь другим, если этот комментарий станет более заметным местом. –

+2

Я обновил ответ, чтобы добавить немного больше информации о pre в pre-fork. @ElNinjaTrepador благодарит за это, я не понимал, что это не так хорошо известно. –

Смежные вопросы