Что такое модель веб-сервера 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), это асинхронный процесс, который может обрабатывать сотни запросов, не блокируя.