Что такое модель веб-сервера pre-fork?

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

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

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

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

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

1 ответов


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

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

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

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

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

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