it-swarm-ru.tech

Что установить: Apache Worker или Prefork? Каковы (недостатки каждого?

Судя по описаниям для Prefork и Worker MPM, кажется, что тип prefork несколько устарел, но я не могу найти правильное сравнение этих двух типов.

Что я хотел бы знать:

  • Каковы различия между двумя версиями?
  • Каковы (не) преимущества каждого типа сервера?
  • Существуют ли какие-либо основные рекомендации по выбору типа в зависимости от условий?
  • Есть ли большие различия в производительности между ними?
55
Aron Rotteveel

Как говорится в документации, вы должны использовать prefork MPM, если вам нужно избежать многопоточности для совместимости с не поточно-безопасными библиотеками. Как правило, любой нетривиальный модуль Apache (mod_php - или, точнее, множество расширений и библиотек, на которые он ссылается - являясь каноническим примером), имеет некие не поточно-ориентированные библиотеки (или содержит не поточно-безопасный код), поэтому если вы не используете довольно стандартную установку Apache, я бы выбрал prefork MPM.

40
womble

Классическое решение для запуска небезопасных расширений при обслуживании большого количества (> 100) одновременных соединений состоит в том, чтобы запускать PHP на fastCGI (mod_fcgid, собственный модуль Apache)) и динамические запросы прокси к этому от Apache экземпляр, который запускает Worker MPM.

Это позволит вам масштабировать от нескольких сотен до> 1000 одновременных подключений со скромным объемом памяти (4 ~ 8 ГБ) при обслуживании смеси статического и динамического содержимого.

Конечно, вы должны также исследовать интерфейсные решения для кэширования как часть вашего общего развертывания (memcached, лак).

В качестве альтернативы, обновите до Apache 2.4 и его собственного event MPM, который обрабатывает параллелизм намного улучшенным способом (потоки запускаются при соединении, не ожидая опроса).

13
adaptr

Прошло около 3 лет с тех пор, как вопрос был опубликован, но я бы порекомендовал вам использовать рабочий MPM вместо предварительной форка, даже если вы используете PHP, чтобы получить лучшую производительность.

Что касается различий, предварительный форк не является многопоточным, поэтому сервер разветвляет процесс для каждого клиентского запроса (он предварительно разветвляется в ожидании новых запросов, так что разветвление не влияет на время ответа). Так как запросы являются сервером в отдельном процессе, это обычно увеличивает нагрузку на вашу память и процессор. Работник приносит многопоточность, которая легче и лучше использует память.

6
aleemb

Это что-то особенное в том, что вы служите. Если вы делаете много небольших статических соединений, потоки будут легче и быстрее. Если у вас постоянно появляется несколько больших приложений, у prefork может быть Edge из-за его зрелости и стабильности. Почему бы просто не настроить то, что вам нужно, протестировать один, заменить модуль MPM, попробовать еще раз, посмотреть, какой из них подходит вам лучше?

2
Marcin

это зависит от типа и типа трафика, который вы будете иметь. А также сначала вам нужно понять главное различие между префорком и рабочим. Надеюсь, что статья ниже поможет вам разобраться! http://slashroot.in/how-is-nginx-different-from-Apache

1
sarath