Как выбрать, какой Apache MPM использовать?

  

Это Канонический вопрос о выборе правильного Apache httpd MPM.

Я немного запутался между разными MPM, предлагаемыми Apache - «работником», «событием», «предкромным» и т. д.

Каковы основные различия между ними и как я могу решить, какой из них лучше всего подходит для данного развертывания?

235 голосов | спросил Tiffany Walker 26 PMpThu, 26 Apr 2012 22:40:45 +040040Thursday 2012, 22:40:45

4 ответа


390

Существует несколько модулей MPM (многопроцессорные модули), но наиболее распространенными (по крайней мере, на платформах * nix) являются три основных: prefork, worker и event). По сути, они представляют эволюцию веб-сервера Apache и различные способы создания сервера для обработки HTTP-запросов в вычислительных ограничениях времени в течение долгого (в программном отношении) истории.


prefork

mpm_prefork есть .. ну .. он совместим со всем. Он объединяет несколько дочерних процессов для обслуживания запросов, а дочерние процессы обрабатывают только один запрос за раз. Поскольку серверный процесс сидит там, готовый к действию и не нуждающийся в обработке маршалинга потока, на самом деле это быстрее , чем более современные MPM с потоками, когда вы имеете дело только с одним запросом на время - но одновременные запросы страдают, так как они вынуждены ждать в очереди до тех пор, пока серверный процесс не станет бесплатным. Кроме того, пытаясь увеличить количество дочерних процессов, связанных с предкаром, вы легко сосете серьезную оперативную память.

Вероятно, не рекомендуется использовать prefork, если вам не нужен модуль, который не является потокобезопасным.

Использовать, если: Вам нужны модули, которые ломаются при использовании потоков, например mod_php. Даже тогда подумайте об использовании FastCGI и php-fpm.

Не использовать, если: . Ваши модули не будут разбиваться на потоки.

worker

mpm_worker использует потоковую передачу - это большая помощь для параллелизма. Работник отталкивает некоторые дочерние процессы, которые, в свою очередь, оттягивают дочерние потоки; как и в предфильме, некоторые запасные потоки по возможности готовы, чтобы обслуживать входящие соединения. Этот подход намного более удобен в ОЗУ, поскольку количество потоков не имеет прямого отношения к использованию памяти, как это делает счетчик серверов в предпродаже. Он также упрощает параллелизм, так как соединения просто должны ждать свободного потока (который обычно доступен) вместо резервного сервера в предпрок.

Использовать, если: Вы используете Apache 2.2 или 2.4, и вы работаете в основном с SSL.

Не использовать, если: Вы действительно не ошибетесь, если вам не нужна предварительная версия для совместимости.

Однако обратите внимание, что протекторы прикреплены к соединениям , а не запросы - это означает, что соединение keep-alive всегда удерживает поток до его закрытия ( который может быть длительным, в зависимости от вашей конфигурации). Вот почему мы ...

event

mpm_event очень похож на рабочего, структурно; его просто перевели с «экспериментального» на «стабильный» статус в Apache 2.4. Большая разница заключается в том, что он использует выделенный поток для работы с поддерживаемыми соединениями, а руки запрашивают до дочерних потоков только тогда, когда запрос действительно был сделан (позволяя этим потокам освобождать резервную копию сразу после завершения запроса). Это отлично подходит для параллелизма клиентов, которые не всегда являются активными одновременно, но делают случайные запросы и когда у клиентов может быть длительный тайм-аут сохранения.

Исключением является SSL-соединение; в этом случае он ведет себя одинаково с рабочим (приклеивание данного соединения к данному потоку до тех пор, пока соединение не закроется).

Использовать if: . Вы используете Apache 2.4 и похожи на потоки, но вам не нравится, когда потоки ожидают простоя. Всем нравится темы!

Не использовать, если: . Вы не на Apache 2.4, или вам нужна предварительная версия для совместимости.


В сегодняшнем мире slowloris , AJAX и браузеров, которые любят мультиплексировать 6 TCP-соединений (с сохранением, конечно,) на ваш сервер, параллелизм является важным фактором в масштабировании и масштабировании вашего сервера. История Apache связала это в этом отношении, и, хотя на самом деле все еще не соответствует номинальным значениям nginx или lighttpd с точки зрения использования ресурсов или масштаба, ясно, что команда разработчиков работает над созданием веб-сервера, который все еще имеет значение в сегодняшнем мире с высоким запросом-параллелизмом.

ответил Shane Madden 27 AMpFri, 27 Apr 2012 06:27:05 +040027Friday 2012, 06:27:05
5

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

Если у вас нет предпочтений, я рекомендую вам перейти с предпочтительной зависимостью от вашего дистрибутива ОС. Например, Ubuntu будет по умолчанию устанавливать mpm-worker при установке Apache2.

ответил Jeroen 26 PMpThu, 26 Apr 2012 23:32:18 +040032Thursday 2012, 23:32:18
4

Вот хорошее объяснение того, как это работает с gifs:

https://www.datadoghq.com/blog/мониторинг-апаш-веб-сервер /производительность

Вкратце: если вы используете 2.4 , и вам нужен httpd как обратный прокси (диспетчер), поэтому ваш выбор Event MPM

ответил Yura 21 J0000006Europe/Moscow 2017, 16:10:11
3

По состоянию на февраль 2018 года в документации Apache 2.4 для Event MPM указано, что использование Apache в качестве прокси-сервера будет поддерживать «улучшенную обработку соединения», поскольку 2.4.24 работает от разработки. См. Раздел Ограничения .

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

По этой причине кажется, что использование модели Worker может быть лучше всего, когда apache используется как прокси. Мне не совсем ясно, есть ли преимущества для модели событий в прокси-среде, но, возможно, есть.

ответил AndOr 14 FebruaryEurope/MoscowbWed, 14 Feb 2018 18:01:57 +0300000000pmWed, 14 Feb 2018 18:01:57 +030018 2018, 18:01:57

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132