Какая разница в модулях MPM в web-сервере Apache? Что выбрать worker, prefork, event?

MPM – Multi-Processing Module(для Apache), “Модуль мультипроцессовой обработки” (не путайте с мультипроцессорной!).
Модуль MPM Используется сервером Apache для обработки нескольких запросов пользователе несколькими процессами единовременно.

Чаще всего в Apache используют 3 основных варианта MPM – это WorkerPreFork или Event.

Здесь мы разберем чем отличаються эти модули MPM- Worker, PreFork и Event.

Но для начала, если у вас уже установлен Apache, может посмотреть: какой модуль собран у вас.
Просмотр модуля в Apache 2.4 и Apache 2.2 командой:

root@linux-in:~# apachectl -t -D DUMP_MODULES | grep mpm
mpm_prefork_module (static)

или

root@linux-in:~# httpd -V | grep mpm
-D APACHE_MPM_DIR=”server/mpm/prefork”

Установка порта apache24 в FreeBSD 10.3 по умолчанию Apache 2.4 с mpm_prefork.

Что выбрать worker, prefork, event?

Apache MPM PreFork — данный модуль запускает по отдельному процессу на каждый запрос, каждый процесс единовременно обрабатывает только 1 поток (thread) на одно соединение. PreFork заранее создает определенное количество процессов, которые не требуют времени на отдельный вызов при поступлении запроса к серверу и не нуждаются в выполнении маршалинга (в технологии ORPC – процесс упаковки запроса, включая параметры, в стандартный формат, пригодный для передачи по сети) во время его обработки. Такой модуль является наиболее быстрым, по сравнению с другими модулями MPM. Это полезно когда на сервер Apache поступает ограниченное количество одновременных запросов. Каждый процесс ожидает, пока процессор сможет его обработать.

Минусом модуля MPM PreFork для web-сервера Apache, увеличения количество одновременно запускаемых процессов серьезно повлияет на используемую сервером память.

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

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

Плюсом модуля MPM Worker для web-сервера Apache является не такое ресурсоемкий при потреблении оперативной памяти сервера,  от модуля PreFork. Улучшается обработка большого количества одновременных запросов.

Минусом модуля MPM Worker для web-сервера Apache является его некоторая нестабильность, по сравнению с PreFork (проблемы в одном процессе могут затронуть другие соединения).Модуль Worker связывает каждое keep-alive соединение с потоком, а не с запросом, поток может выполнятся долгое время, пока соединение не будет полностью разорвано.

Apache MPM Event. Похож по своему подходу на MPM Worker.  Отличие Event от Worker — он поддерживает выделенный поток для каждого установленного соединения, передает дочерним потокам запрос только после того, как он был непосредственно сделан. После обработки этого запроса – поток освобождается.

Плюсом модуля MPM Event для web-сервера Apache, после обработки запроса поток освобождается и выполняет следующие запросы. Если у вас не частые запросы клиентов, но поддерживают долгие keep-alive соединения с сервером, то этот модуль для вас.

Во время обработка SSL-соединений,  

Event

 показывает  себя аналогично Worker-у.

Cравнения работы Worker и PreFork описывается  тут>>>. Из этой статьи, видна разница между Worker и PreFork, это несколько процентов. При выборе учитывайте специфику каждого сервера и обрабатываемых им запросов.

Comments

comments

Comments

  1. Иван

    Объясните пожалуйста, что такое процесс и что такое поток, так сказать на пальцах, что бы понять или ссылки на такие пояснение может подскажите? (только начинаю во все это въезжать)

    1. Alex

      Если очень коротко то процесс это сама программа (ее экземпляр) запущенная в ОС, а поток это ее ответвления для параллельного выполнения различных функций программы. На примере, процесс — это продажа в магазине товара, а потоки — это несколько продавцов которые выполняют функцию продажи непосредственно покупателю, параллельно и независимо друг от друга. Посмотреть более подробно можно тут

Ваш e-mail не будет опубликован. Обязательные поля помечены *