Apache tiene varios modos de multiprocesamiento disponibles: Prefork, Worker, Event e ITK
Los tres primeros son considerados estables y el último está aún en fase experimental.
Estos módulos de multiprocesamiento (MPM) se encargan de procesar las peticiones HTTP y administrar los procesos que ello conlleva, entre otras cosas.
Vamos a hacer un resumen de las características de cada uno de ellos:
Prefok: Este módulo es el más común y es el que viene por defecto tanto en servidores planos como en cPanel.
Trabaja creando procesos independientes para procesar las requests o peticiones HTTP.
Este módulo MPM es el más compatible con mod_php, y generalmente se necesita trabajar con PHP en servidores LAMP por lo tanto es el más adecuado.
Si bien es el módulo MPM más estable y compatible de todos, también es el que más recursos consume en cuanto a CPU y RAM al crear procesos independientes para procesar las peticiones, siendo este su punto negativo.
Worker: Mejora el rendimiento del módulo MPM Prefok ya que combina los procesos de aquel con hilos.
Trabaja creando varios procesos hijo que a su vez crean hilos, de manera que cada proceso hijo pueda procesar múltiples peticiones HTTP a través de los hilos. Este método utiliza entonces menos procesos independientes haciendo uso de los hilos y por lo tanto consume menos recursos de CPU y RAM.
Como puntos negativos nos encontramos con que este módulo MPM no puede ser usado con mod_php debido a que no es de tipo «thread-safe». (no es seguro para usar con hilos de procesamiento) Otro punto negativo es que si un proceso hijo se interrumpe por algún motivo se pierden los hilos que tenía procesando múltiples conexiones, cosa que no sucede con el módulo MPM Worker ya que usa un proceso independiente para cada petición HTTP como comentábamos anteriormente.
Event: Es una evolución del módulo MPM Worker que mejora el rendimiento de aquel en el procesamiento de peticiones Keep Alive o conecciones persistentes. Por lo demás, presenta las mismas ventajas y desventajas de su inmediato predecesor. (es decir olvidense de utilizarlo con mod_php)
ITK: Este módulo MPM que todavía está en estado experimental es una evolución del módulo MPM Prefok, lo que garantiza su compatibilidad con mod_php, por este motivo puede que en los próximos años sea sumamente utilizado. Algo destacable de este módulo MPM es que suma una característica que tiene por ejemplo el mod suPHP, es decir, los procesos corren bajo los usuarios de cada dominio y no bajo el usuario de Apache, esto evita que se tengan que setear permisos 777 lo cual genera vulnerabilidades.
Entonces, ¿cuál eligo?
Creemos que actualmente la mejor opción si vamos a usar mod_php es sin duda el módulo MPM Prefok, por su estabiliad y confiabilidad y por su compatibilidad con mod_php, a pesar de que el consumo de recursos que tiene es mayor.
En un futuro cercano se podrá usar preferentemente el módulo MPM ITK porque trae mejoras que permiten obtener una seguridad muy superior.
Claro que también se pueden usar los otros módulos MPM junto con PHP, pero en lugar de hacer uso de mod_php tendrán que hacer uso de PHP-FPM, cuya configuración es más compleja.
Si NO van a trabajar con PHP y el contenido a procesar será solo estático, entonces los módulos MPM Worker y Event son los ideales.
Ni hablar que en el caso de tener un tráfico muy elevado en el que se tenga que procesar tanto contenido estático como PHP podemos hacer uso de NGINX o VARNISH para los estáticos y dejar Apache en un puerto diferente para procesar PHP mediante Prefork.