Módulos de multiprocesamiento (MPMs)
Módulos de multiprocesamiento (MPMs):
Los MPM son uno de los mayores cambios de las versiones 2.X respecto a las anteriores. Básicamente son formas de procesar las peticiones que Apache puede usar, y normalmente suele elegirse la más ventajosa teniendo en cuenta el sistema operativo donde Apache está funcionando u otros factores de las aplicaciones web que van a funcionar sobre este servidor. A continuación describiremos brevemente los MPM disponibles hasta el momento y sus características.
Apache versión 1.X usaba únicamente una arquitectura preforking para atender las peticiones. Ésta consistía en que un proceso padre hacia fork para generar un conjunto de procesos hijos, que eran los que finalmente servían las peticiones. El proceso padre monitorizaba a sus hijos y creaba más, o los destruía, basándose en la cantidad de peticiones que recibía, regulando así la carga de trabajo en función del número de peticiones recibido en un momento dado. No obstante, este modelo tenía el inconveniente de que no funcionaba adecuadamente (por su bajo rendimiento) en algunas plataformas. Una de ellas era Windows, al no tener implementado nativamente este modelo de procesos. Por ese motivo, se creó el concepto de MPM, que está destinado a solventar este problema.
Por tanto, cada MPM es responsable de arrancar procesos del servidor y de servir peticiones usando procesos hijos o threads, según su implementación. A continuación se citan algunos de los MPM más importantes disponibles. Para un listado completo de todos se recomienda consultar: http://httpd.apache.org/docs/2.2/en/mod/
El MPM prefork
Copia el modelo de Apache 1.X, creando un pool de procesos hijos para servir peticiones. Cada proceso hijo tiene un sólo thread, por lo que si Apache inicia 20 procesos hijos, puede servir 20 peticiones simultáneamente. En el caso de que ocurra un error grave y un proceso hijo muera, sólo se pierde una petición: la que está atendiendo el hijo que acaba de cesar la actividad. Finalmente, cabe decir que el máximo y el mínimo de procesos hijos son parámetros configurables, permitiendo pues adaptar Apache a las capacidades de la máquina servidora y también fijarle un máximo de carga. Dentro de estos parámetros máximo y mínimo el servidor genera más o menos procesos en función de la carga de trabajo actual. Más información: http://httpd.apache.org/docs/2.2/mod/prefork.html
El MPM worker
Permite a Apache soportar hilos, lo cual es más eficiente en determinados SSOO. El modelo en sí es idéntico al anterior, aunque cada proceso hijo tiene un número predefinido de threads y cada thread puede servir una petición diferente. De este modo, si tenemos 30 procesos hijos x 10 threads / proceso el servidor podrá servir teóricamente hasta 300 peticiones simultaneas. Es por tanto un modelo muy escalable. En lo referente a procesos, cabe decir que éstos mueren o se crean en función del número de threads activos o libres que haya en un momento dado. Más información: http://httpd.apache.org/docs/2.2/en/mod/worker.html
El MPM por hijo:
En este módulo de multiprocesamiento se inicia un conjunto de procesos hijos con un número especificado de hilos. Las sucesivas peticiones incrementan el número de hilos según sea necesario, ocurriendo también lo contrario si el nº de peticiones disminuye. Existe además un valor máximo y mínimo, de forma que el número de hilos siempre oscilará entre ambos.
Por otro lado, el número de procesos es estático y cada uno puede ejecutarse usando un ID de usuario y grupo distinto. Esto permite ejecutar varios sitios web virtuales bajo distintas identidades de forma segura.
Desgraciadamente, en la actualidad no se recomienda su uso, pues parece que su desarrollo no se ha finalizado del todo y además se considera parado momentáneamente, por lo que es posible que este MPM nunca llegue a estar terminado completamente. Más información: http://httpd.apache.org/docs/2.0/mod/perchild.html
El MPM WinNT:
Este MPM es especial para la plataforma Windows (NT, 2000, 2003, 2008, ...). Es un módulo multihilo donde Apache creará un proceso padre y uno hijo, que es el encargado de crear todos los hilos que sirven las peticiones. Además, este modelo usa algunas funciones nativas de Windows, aumentando el rendimiento de Apache sobre esta plataforma. Más información: http://httpd.apache.org/docs/2.2/mod/mpm_winnt.html
El MPM event:
Este MPM es una variante del MPM worker, y ha sido diseñado para servir más peticiones simultáneas. Su funcionamiento se basa en pasar una porción determinada del procesamiento de una petición a hilos de soporte secundarios que se encargarán de tratarla. Esto permite liberar los threads principales para que acepten nuevas peticiones, ya que ellos delegan el volumen principal del procesamiento en entidades de proceso auxiliares. La configuración de este MPM es idéntica a la del MPM en el que se basa. Más información: http://httpd.apache.org/docs/2.1/en/mod/event.html
Al instalar Apache se selecciona teóricamente el mejor MPM para el SO destino, y por ello es raro que se necesite cambiarlo, aunque es posible hacerlo en caso necesario. Los siguientes enlaces dan más información general sobre MPMs:
- http://httpd.apache.org/docs/2.2/en/mpm.html (incluye cómo cambiar de MPM)
- http://www.howtoforge.com/running-vhosts-under-separate-uids-gids-with-apache2-mpm-itk-on-debian-etch