что установить: apache worker или prefork? каковы (недостатки каждого?

<p>судя по описаниям для <a href="http://httpd.apache.org/docs/2.2/mod/prefork.html">prefork</a> и <a href="http://httpd.apache.org/docs/2.2/mod/worker.html">worker</a> mpm, кажется, что тип prefork несколько устарел, но я не могу найти правильное сравнение этих двух типов.</p><p><strong> что я хотел бы знать: </strong></p><ul> <li>каковы различия между двумя версиями?</li> <li>каковы (не) преимущества каждого типа сервера?</li> <li>существуют ли какие-либо основные рекомендации по выбору типа в зависимости от условий?</li> <li>есть ли большие различия в производительности между ними?</li> </ul>

<p>как говорится в документации, вы должны использовать prefork mpm, если вам нужно избежать многопоточности для совместимости с не поточно-безопасными библиотеками. как правило, любой нетривиальный модуль apache (<code>mod\_php</code> - или, точнее, множество расширений и библиотек, на которые он ссылается - являясь каноническим примером), имеет некие не поточно-ориентированные библиотеки (или содержит не поточно-безопасный код), поэтому если вы не используете довольно стандартную установку apache, я бы выбрал prefork mpm.</p>

<p>классическое решение для запуска небезопасных расширений при обслуживании большого количества (> 100) одновременных соединений состоит в том, чтобы запускать php на fastcgi (mod\_fcgid, собственный модуль apache)) и динамические запросы прокси к этому от apache экземпляр, который запускает worker mpm.</p><p>это позволит вам масштабировать от нескольких сотен до> 1000 одновременных подключений со скромным объемом памяти (4 ~ 8 гб) при обслуживании смеси статического и динамического содержимого.</p><p>конечно, вы должны также исследовать интерфейсные решения для кэширования как часть вашего общего развертывания (memcached, лак).</p><p>в качестве альтернативы, обновите до apache 2.4 и его собственного <strong>event</strong> mpm, который обрабатывает параллелизм намного улучшенным способом (потоки запускаются при соединении, не ожидая опроса).</p>

<p>прошло около 3 лет с тех пор, как вопрос был опубликован, но я бы порекомендовал вам использовать рабочий mpm вместо предварительной форка, даже если вы используете php, чтобы получить лучшую производительность.</p><p>что касается различий, предварительный форк не является многопоточным, поэтому сервер разветвляет процесс для каждого клиентского запроса (он предварительно разветвляется в ожидании новых запросов, так что разветвление не влияет на время ответа). так как запросы являются сервером в отдельном процессе, это обычно увеличивает нагрузку на вашу память и процессор. работник приносит многопоточность, которая легче и лучше использует память.</p>

<p>это что-то особенное в том, что вы служите. если вы делаете много небольших статических соединений, потоки будут легче и быстрее. если у вас постоянно появляется несколько больших приложений, у prefork может быть edge из-за его зрелости и стабильности. почему бы просто не настроить то, что вам нужно, протестировать один, заменить модуль mpm, попробовать еще раз, посмотреть, какой из них подходит вам лучше?</p>

<p>это зависит от типа и типа трафика, который вы будете иметь. а также сначала вам нужно понять главное различие между префорком и рабочим. надеюсь, что статья ниже поможет вам разобраться! <a href="http://slashroot.in/how-is-nginx-different-from-apache">http://slashroot.in/how-is-nginx-different-from-apache</a> </p>