Модули многопроцессорной обработки (MPM)
В этом документе описывается, что такое модуль многопроцессорной обработки и как он используется сервером Apache HTTP Server.
Введение
Сервер Apache HTTP Server разработан как мощный и гибкий веб-сервер, способный работать на самых разных платформах в различных средах. Для разных платформ и сред часто требуются разные функции или могут существовать разные способы наиболее эффективной реализации одной и той же функции. Apache httpd всегда поддерживал самые разные среды благодаря своей модульной архитектуре. Эта архитектура позволяет веб-мастеру выбирать функции, которые будут включены в сервер, выбирая модули для загрузки во время компиляции или во время выполнения.
Apache HTTP Server 2.0 распространяет эту модульную архитектуру на самые базовые функции веб-сервера. В комплект сервера входит набор модулей многопроцессорной обработки (MPM), отвечающих за привязку к сетевым портам компьютера, приём запросов и запуск дочерних процессов для их обработки.
Распространение модульной архитектуры на этот уровень сервера даёт два важных преимущества:
- Apache httpd может более чисто и эффективно поддерживать широкий спектр операционных систем. В частности, версия сервера для Windows теперь гораздо эффективнее, поскольку
mpm_winntможет использовать встроенные сетевые возможности вместо уровня POSIX, применявшегося в Apache httpd 1.3. Это преимущество распространяется и на другие операционные системы, в которых реализованы специализированные MPM. - Сервер можно лучше настроить под потребности конкретного сайта. Например, сайты, которым требуется высокая масштабируемость, могут выбрать потоковый MPM, такой как
workerилиevent, а сайты, которым необходимы стабильность или совместимость со старым программным обеспечением, могут использоватьprefork.
Для пользователя MPM выглядят почти так же, как и другие модули Apache httpd. Главное отличие заключается в том, что в каждый момент времени в сервер должен быть загружен один и только один MPM. Список доступных MPM приведён на странице со списком модулей.
MPM по умолчанию
В следующей таблице перечислены MPM по умолчанию для различных операционных систем. Этот MPM будет выбран, если во время компиляции вы не укажете другой.
| Netware | mpm_netware |
| OS/2 | mpmt_os2 |
| Unix |
prefork, worker или event, в зависимости от возможностей платформы |
| Windows | mpm_winnt |
Здесь термин «Unix» используется для обозначения Unix-подобных операционных систем, таких как Linux, BSD, Solaris, Mac OS X и т. д.
В случае Unix выбор устанавливаемого MPM зависит от ответов на два вопроса:
1. Поддерживает ли система потоки?
2. Поддерживает ли система потокобезопасный опрос (в частности, функции kqueue и epoll)?
Если ответ на оба вопроса — «да», MPM по умолчанию будет event.
Если ответ на вопрос № 1 — «да», а на вопрос № 2 — «нет», по умолчанию будет использоваться worker.
Если ответ на оба вопроса — «нет», MPM по умолчанию будет prefork.
На практике это означает, что почти всегда по умолчанию будет использоваться event, поскольку все современные операционные системы поддерживают эти две возможности.
Сборка MPM как статического модуля
На всех платформах MPM можно собирать как статические модули. Во время сборки выбирается один MPM и связывается с сервером. Чтобы изменить MPM, необходимо пересобрать сервер.
Чтобы переопределить выбор MPM по умолчанию, используйте параметр --with-mpm=NAME сценария configure. NAME — имя требуемого MPM.
После компиляции сервера можно определить, какой MPM был выбран, с помощью ./httpd -l. Эта команда выведет список всех модулей, скомпилированных в сервер, включая MPM.
Сборка MPM как модуля DSO
В Unix и подобных платформах MPM можно собирать как модули DSO и динамически загружать в сервер так же, как и другие модули DSO. Сборка MPM в виде модулей DSO позволяет изменить MPM, обновив директиву LoadModule для MPM, а не пересобирая сервер.
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
Попытка LoadModule более одного MPM приведёт к сбою запуска со следующей ошибкой.
AH00534: httpd: Configuration error: More than one MPM loaded.
Эта возможность включается с помощью параметра --enable-mpms-shared сценария configure. Если указать аргумент all, будут установлены все MPM, доступные для данной платформы. Кроме того, в качестве аргумента можно указать список MPM.
MPM по умолчанию, выбранный автоматически или заданный параметром --with-mpm сценария configure, будет загружен в созданный файл конфигурации сервера. Чтобы выбрать другой MPM, отредактируйте директиву LoadModule.
© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mpm.html