Вопрос: Что нужно установить: Apache Worker или Prefork? Каковы (отрицательные) преимущества каждого из них?


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

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

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

54
2017-07-24 08:47


Источник


Видеть Как выбрать, какой Apache MPM использовать? - Janus Troelsen


Ответы:


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


39
2017-07-24 09:04



Я бы рекомендовал рабочий MPM, если вы не используете PHP. Работник - это рекомендуемый MPM от apache и дает лучшую производительность и меньшие накладные расходы. Только разработчик PHP никогда не слышал о потокобезопасности, которую нужно использовать в предпродаже. - David Pashley
PHP был потокобезопасным в течение очень долгого времени. Они только предлагают использовать pre-forkers, поскольку они не могут контролировать то, что делают другие библиотеки. Прекратите обвинять PHP для других бездействующих разработчиков. - Alister Bulman
PHP может быть потокобезопасным (хотя я сомневаюсь), но все библиотеки, с которыми он ссылается, определенно не являются. Здесь мы запускаем несколько довольно больших PHP-приложений, и каждые пару месяцев мы пытаемся переключиться с предварительного просмотра на работника, но сразу получаем поврежденные данные. - Aleksandar Ivanisevic
По крайней мере, функция изменения переменной ENV не будет потокобезопасной, setlocal php.net/manual/en/function.setlocale.php является общим примером этого. - radius
Одна нота: эти проблемы не применяются, если PHP присоединен, например. с php-fpm через FastCGI. Тогда рабочий MPM просто отлично - тогда fpm будет запускать каждый запрос PHP в собственном процессе, в то время как Apache может запускать threaded. Проблема безопасности PHP-Thread предотвращает использование mod_php, который запускает PHP внутри процесса Apache. - mschuett


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

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

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

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


12
2018-04-02 13:21



не могли бы вы расширить комментарий к mpm? Как он складывается против mpm-worker? - Sirex
В то время как рабочий MPM уже был основан на потоках, и, следовательно, гораздо быстрее запускать и легче запускать, событие MPM больше не проверяет сокет - оно получает уведомление о активности; поэтому «событие». - adaptr
поэтому он должен работать лучше на сайтах с высоким трафиком (13 к / сек)? - Sirex


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

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


5
2017-10-21 17:02





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


2
2017-07-24 13:33



Вы не можете произвольно «обменивать» MPM в apache 2.2; он устанавливается во время компиляции. - adaptr
Вы можете использовать apt или RPM. В Debian есть несколько различных пакетов Apache 2, в зависимости от того, какой стиль вы предпочитаете. - Brendan Byrd


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


1
2017-11-16 15:30



Мы предпочитаем, чтобы ответы содержали контент, а не ссылки на контент. Если бы вы могли предоставить краткое изложение того, что находится на целевой ссылке, это лучше всего подходит. Происходит Link-rot. - sysadmin1138♦
Вопрос касался Apache (nginx не apache) и относительных достоинств prefork или threads (nginx не использует ни один) - symcbean