Según las descripciones de Prefork y Worker MPM, parece que el tipo de prefork está algo desactualizado, pero realmente no puedo encontrar una comparación adecuada de los dos tipos.
Lo que me gustaría saber:
- ¿Cuáles son las diferencias entre las dos versiones?
- ¿Cuáles son las (des) ventajas de cada tipo de servidor?
- ¿Existen pautas básicas sobre qué tipo elegir según las condiciones?
- ¿Hay alguna gran diferencia de rendimiento entre los dos?
apache-2.2
mpm-worker
mpm-prefork
Aron Rotteveel
fuente
fuente
Respuestas:
Como dicen los documentos, debe usar el MPM prefork si necesita evitar subprocesos para compatibilidad con bibliotecas no seguras para subprocesos. Por lo general, cualquier módulo Apache no trivial (
mod_php
o, más precisamente, la gran cantidad de extensiones y bibliotecas a las que se vincula, siendo el ejemplo canónico) tiene algún tipo de biblioteca no segura para subprocesos (o no tiene subprocesos) código seguro), así que a menos que esté utilizando una instalación de Apache bastante común, iría por el MPM prefork.fuente
php-fpm
FastCGI Luego, el MPM de trabajo está bien, entonces el fpm ejecutará cada solicitud de PHP en un proceso propio, mientras que el Apache puede ejecutar subprocesos. El problema de seguridad de subprocesos de PHP solo evita que lo usemod_php
, que ejecuta PHP dentro del proceso de Apache.La solución clásica para ejecutar extensiones inseguras mientras se sirven grandes cantidades (> 100) de conexiones concurrentes es ejecutar PHP en fastCGI (mod_fcgid, un módulo nativo de apache) y solicitudes dinámicas proxy desde una instancia de apache que ejecuta el Worker MPM.
Esto le permitiría escalar desde unos pocos cientos hasta> 1000 conexiones simultáneas con una cantidad modesta de memoria (4 ~ 8GB) cuando sirve una mezcla de contenido estático y dinámico.
Por supuesto, también debe investigar las soluciones de almacenamiento en caché front-end como parte de su implementación general (memcached, barniz).
Alternativamente, actualice a Apache 2.4 y su evento nativo MPM, que maneja la concurrencia de una manera mucho mejor (los hilos se disparan al momento de la conexión, sin esperar a ser encuestados).
fuente
Han pasado aproximadamente 3 años desde que se publicó la pregunta, pero recomendaría que vaya con MPM de trabajo en lugar de pre-fork, incluso si usa PHP, para obtener el mejor rendimiento.
En cuanto a las diferencias, la pre-bifurcación no está enhebrada, por lo tanto, el servidor bifurca un proceso para cada solicitud del cliente (se bifurca previamente en anticipación de nuevas solicitudes para que la bifurcación no afecte el tiempo de respuesta). Dado que las solicitudes son del servidor en un proceso separado, esto generalmente grava mucho más su memoria y CPU. El trabajador trae subprocesos múltiples que es más ligero y tiene una mejor utilización de la memoria.
fuente
Esto es algo muy particular de lo que estás sirviendo. Si está haciendo muchas pequeñas conexiones estáticas, los hilos serían más ligeros y rápidos. Si solo tiene pocas aplicaciones grandes generadas constantemente, prefork podría tener una ventaja debido a su madurez y estabilidad. ¿Por qué no configurar lo que necesita, probar uno, cambiar el módulo MPM, volver a intentarlo y ver cuál le conviene más?
fuente
que necesita sobre el tipo y tipo de tráfico que tendrá. Y también primero debe comprender la diferencia principal entre prefork y trabajador. ¡Espero que el siguiente artículo te ayude a descubrirlo! http://slashroot.in/how-is-nginx-different-from-apache
fuente