¿Puedo reemplazar Apache con Node.js?

151

Tengo un sitio web que se ejecuta en CentOS con los sospechosos habituales (Apache, MySQL y PHP). Desde el momento en que este sitio web se lanzó originalmente, ha evolucionado bastante y ahora me gustaría hacer cosas más sofisticadas, a saber, notificaciones en tiempo real. Por lo que he leído, Apache maneja esto mal. Me pregunto si puedo reemplazar solo Apache con Node.js (por lo que en lugar de " LAMP " sería "LNMP").

Intenté buscar una solución en línea, pero no encontré una. Si interpreto correctamente las cosas que he leído, parece que la mayoría de la gente dice que Node.js puede reemplazar tanto Apache como PHP juntos. Sin embargo, tengo un montón de código PHP existente, así que preferiría mantenerlo.

En caso de que aún no sea obvio, estoy bastante confundido y podría usar algo de iluminación. ¡Muchas gracias!

Almiar
fuente
El servidor Ape podría valer la pena.
TryHarder

Respuestas:

86

Si está preparado para volver a escribir su PHP en JavaScript, entonces sí, Node.js puede reemplazar su Apache.

Si coloca una instancia de Apache o NGINX ejecutándose en modo proxy inverso entre sus servidores y sus clientes, podría manejar algunas solicitudes en JavaScript en Node.js y algunas solicitudes en su PHP alojado en Apache, hasta que pueda reemplazar completamente todo su PHP con código JavaScript Este podría ser el medio feliz: ¿funcionan sus WebSockets en Node.js, un trabajo más mundano en Apache + PHP?

sarnold
fuente
1
¡Agradezco la respuesta rápida! ¿Es nginx muy superior a Apache? Ya tengo un archivo .htaccess y sería bueno mantenerlo. Además, he leído que no tiene sentido enviar solicitudes de Apache a Node.js porque estás perdiendo las ventajas de Node.js ya que todavía estás pasando por Apache. ¿Sería mejor que Node.js escuchara en el puerto 80 cualquier cosa en una subcarpeta llamada "nodejs" y luego Node.js pudiera pasar a Apache cualquier cosa que no esté en esa subcarpeta? Apache podía escuchar en otro puerto como 8000.
Rick
21
@ Rick, estoy bastante cerca de eliminar mi propia respuesta; Node puede usarsendfile , y hay un módulo para el soporte de FastCGI que también podría facilitar el servicio de PHP a través de Node. En cuanto a nginx vs Apache, siempre he sido un fanático de los servidores de estilo asíncrono sobre servidores roscados o multiproceso :) pero he encontrado que la documentación de Apache es más fácil de encontrar y leer. Llamaría a eso preferencia personal a menos que necesite escalar a números sorprendentes. :)
sarnold
3
@Rick No desea migrar material de producción a Node antes de comprender qué es y cómo funciona. Node no es una píldora mágica para hacer cosas más rápido. El paradigma de evento controlado / asíncrono no es nuevo, y hay razones por las cuales no se usa para todo. en.wikipedia.org/wiki/Asynchronous_I/O
Øyvind Skaar
1
@Rick En lugar de pensar que debería reemplazar lo que tiene, tal vez sea mejor ejecutar Node además. No creo que haya alguna razón para pasar todo a través del nodo (?), Parece una mala idea. Simplemente ejecute el nodo en otro puerto o host.
Øyvind Skaar
2
@ Øyvind Skaar estoy de acuerdo. Además, para la mayoría de los sitios web (por ejemplo, Wordpress), el verdadero cuello de botella es la base de datos y no el acceso a los archivos. Y, si el acceso al archivo es un problema, el caché siempre es una solución viable. De todos modos, para un rendimiento real, PHP-APC es un truco muy barato.
magallanes
26

Node.js puede ser más rápido que Apache gracias a su arquitectura de evento / sin bloqueo, pero puede tener problemas para encontrar módulos / bibliotecas que sustituyan parte de la funcionalidad de Apache.

Node.js en sí mismo es un marco ligero de bajo nivel que le permite construir de manera relativamente rápida cosas del lado del servidor y partes en tiempo real de sus aplicaciones web, pero Apache ofrece opciones de configuración mucho más amplias y características orientadas al servidor web "clásico".

Diría que a menos que desee reemplazar PHP con un marco de aplicación web basado en node.js como express.js, entonces debería quedarse con Apache (o pensar en migrar a Nginx si tiene problemas de rendimiento).

yojimbo87
fuente
11

Creo que Node.js es el futuro en el servicio web, pero si tiene muchos códigos PHP existentes, Apache / MySQL son su mejor opción. Apache se puede configurar para enviar solicitudes proxy a Node.js, o Node.js puede enviar solicitudes proxy a Apache, pero creo que se pierde algo de rendimiento en ambos casos, especialmente en el primero. Sin embargo, no es un gran problema si no está ejecutando un sitio web de mucho tráfico.

Me acabo de registrar en stackoverflow, y todavía no puedo comentar sobre la respuesta aceptada, pero hoy creé un script simple Node.js que en realidad usa sendfile () para servir archivos a través del protocolo HTTP. (El ejemplo existente al que enlaza la respuesta aceptada solo usa el protocolo TCP simple para enviar el archivo, y no pude encontrar un ejemplo para HTTP, así que lo escribí yo mismo).

Entonces pensé que alguien podría encontrar esto útil. Servir archivos a través de la llamada del sistema operativo sendfile () no es necesariamente más rápido que cuando los datos se copian a través de "tierra de usuario", pero termina utilizando menos la CPU y la RAM, lo que permite manejar un mayor número de conexiones que la forma clásica.

El enlace: https://gist.github.com/1350901

youurayy
fuente
2
Aunque es muy cierto, sigo creyendo que si despojaste a Apache de hacer lo que estás describiendo, se ejecutará tan rápido, y si no, más rápido que node.js. Apache hace muchas cosas que la gente no ve o realmente no entiende y si agrega todas las funcionalidades de estos servidores web a node.js, se ejecutará tan lento como ellos. Como ejemplo sencillo sería probablemente, ? Mynode.js / getfile file = / etc / shadow
Rahly
8

Publicación SO anterior que describe exactamente lo que estoy diciendo (php + socket.io + node)

Creo que podría instalar un servidor de nodo en somehost: 8000 con socket.io y colocar el código del cliente socket.io en etiquetas y con un trabajo mínimo hacer que su aplicación existente se balancee con socket.io (bebé en tiempo real) sin una tonelada de trabajo.

Si bien el nodo puede ser su único servidor de fondo, recuerde que al nodo le gusta estar a la altura de su nombre y convertirse en un nodo. Revisé una charla hace un tiempo que Ryan Dahl dio a un grupo de usuarios de PHP y mencionó el nombre del nodo relacionado con una visión de varios procesos de nodo que trabajan y hablan entre sí.

Richard Holland
fuente
2

Su LAMP versus MEAN hoy en día. Para una comparación directa, consulte http://tamas.io/what-is-the-mean-stack .

Por supuesto, M, E y A son algo variables. Por ejemplo, el koa más reciente puede reemplazar (E) xpress.

Sin embargo, simplemente reemplazar Apache con Node.js probablemente no sea la forma correcta de modernizar su pila web.

Wolfgang Kuehn
fuente