Posso substituir o Apache pelo Node.js?

151

Eu tenho um site em execução no CentOS usando os suspeitos do costume (Apache, MySQL e PHP). Desde a época em que este site foi lançado, ele evoluiu bastante e agora eu gostaria de fazer coisas mais sofisticadas, como notificações em tempo real. Pelo que li, o Apache lida mal com isso. Gostaria de saber se posso substituir apenas o Apache pelo Node.js (então, em vez de " LAMP ", seria "LNMP").

Tentei pesquisar online por uma solução, mas não a encontrei. Se estou interpretando corretamente as coisas que li, parece que a maioria das pessoas está dizendo que o Node.js pode substituir o Apache e o PHP juntos. Eu tenho muito código PHP existente, então prefiro mantê-lo.

Caso ainda não seja óbvio, estou bastante confuso e poderia usar alguma iluminação. Muito obrigado!

Rick
fonte
Vale a pena procurar um servidor Macaco.
TryHarder 12/01

Respostas:

86

Se você estiver preparado para reescrever seu PHP em JavaScript, sim, o Node.js poderá substituir o seu Apache.

Se você colocar uma instância do Apache ou NGINX em execução no proxy reverso entre seus servidores e clientes, poderá processar algumas solicitações em JavaScript no Node.js e algumas no PHP hospedado no Apache, até poder substituir completamente todo o seu PHP com código JavaScript. Esse pode ser o meio feliz: seus WebSockets funcionam no Node.js, um trabalho mais comum no Apache + PHP.

sarnold
fonte
1
Agradeço a resposta rápida! O nginx é muito superior ao Apache? Eu já tenho um arquivo .htaccess no lugar e seria bom mantê-lo. Além disso, li que não faz sentido o Apache encaminhar solicitações para o Node.js. porque você está perdendo as vantagens do Node.js. já que ainda está usando o Apache. Seria melhor que o Node.js escutasse na porta 80 qualquer coisa em uma subpasta chamada "nodejs" e, em seguida, qualquer coisa que não estivesse nessa subpasta poderia ser passada ao Apache pelo Node.js. Apache poderia escutar em alguma outra porta como 8000.
Rick
21
@ Rick, estou bem perto de excluir minha própria resposta; O Node pode usarsendfile , e há um módulo para suporte ao FastCGI que pode facilitar o serviço do PHP também através do Node. Quanto ao nginx vs Apache, eu sempre fui um otário para servidores no estilo assíncrono em servidores de processo ou multiprocessados ​​:), mas achei a documentação do Apache mais fácil de encontrar e ler. Eu chamaria isso de preferência pessoal, a menos que você precise escalar para números surpreendentes. :)
sarnold
3
@ Rick Você não deseja migrar o material de produção para o Node antes de entender o que é e como funciona. Node não é uma pílula mágica para tornar as coisas mais rápidas. O paradigma orientado a eventos / assíncrono não é novo e há razões para que ele não seja usado para tudo. pt.wikipedia.org/wiki/Asynchronous_I/O
Øyvind Skaar
1
@ Rick Em vez de pensar que você deve substituir o que possui, talvez seja melhor executar o Node além disso. Não pense que há algum motivo para passar tudo pelo nó (?), Parece uma má ideia. Basta executar o nó em outra porta ou host.
Øyvind Skaar
2
@ Øyvind Skaar eu concordo. Além disso, para a maioria dos sites (por exemplo, Wordpress), o verdadeiro gargalo é o banco de dados e não o acesso ao arquivo. E, se o acesso ao arquivo for um problema, o cache será sempre uma solução viável. De qualquer forma, para desempenho real, o PHP-APC é um truque muito barato.
Magallanes
26

O Node.js pode ser mais rápido que o Apache, graças à sua arquitetura de eventos / sem bloqueio, mas você pode ter problemas ao encontrar módulos / bibliotecas que substituem algumas das funcionalidades do Apache.

O Node.js em si é uma estrutura leve e de baixo nível que permite criar de forma relativamente rápida coisas do lado do servidor e partes em tempo real de seus aplicativos da web, mas o Apache oferece opções de configuração muito mais amplas e recursos "clássicos" orientados ao servidor da web.

Eu diria que, a menos que você queira substituir o PHP pelo framework de aplicativos da Web baseado no node.js. como express.js, você deve permanecer no Apache (ou pensar em migrar para o Nginx se tiver problemas de desempenho).

yojimbo87
fonte
11

Acredito que o Node.js é o futuro da veiculação na web, mas se você possui muito código PHP existente, o Apache / MySQL é sua melhor aposta. O Apache pode ser configurado para fazer proxy de solicitações para o Node.js ou o Node.js pode fazer proxy de solicitações para o Apache, mas acredito que algum desempenho seja perdido nos dois casos, principalmente no primeiro. Não é grande coisa se você não estiver executando um site de tráfego muito alto.

Acabei de me registrar no stackoverflow, e ainda não posso comentar a resposta aceita, mas hoje criei um script simples do Node.js. que realmente usa sendfile () para servir arquivos através do protocolo HTTP. (O exemplo existente ao qual a resposta aceita se vincula usa apenas o protocolo TCP simples para enviar o arquivo, e como não consegui encontrar um exemplo para HTTP, escrevi eu mesmo.)

Então pensei que alguém poderia achar isso útil. A veiculação de arquivos por meio da chamada do SO sendfile () não é necessariamente mais rápida do que quando os dados são copiados através do "espaço do usuário", mas acaba utilizando menos a CPU e a RAM, podendo assim lidar com um número maior de conexões do que o modo clássico.

O link: https://gist.github.com/1350901

youurayy
fonte
2
Embora seja verdade, ainda acredito que, se você despojasse o apache, faça exatamente o que está descrevendo, ele seria executado tão rápido e, se não, mais rápido que o node.js. O Apache faz muitas coisas que as pessoas não vêem ou realmente entendem e, se você adicionasse toda a funcionalidade desses servidores da Web ao node.js, seria executado tão lentamente quanto eles. Como exemplo simples seria provavelmente, ? Mynode.js / getfile file = / etc / shadow
Rahly
8

Postagem anterior do SO descrevendo exatamente o que estou dizendo (php + socket.io + node)

Eu acho que você pode instalar um servidor de nó em somehost: 8000 com socket.io e colocar o código do cliente socket.io em tags e, com o mínimo de trabalho, fazer com que seu aplicativo existente seja usado com socket.io (bebê em tempo real) sem muito trabalho.

Embora o nó possa ser seu único servidor back-end, lembre-se de que ele gosta de corresponder ao nome e se tornar um nó. Voltei uma palestra que Ryan Dahl deu a um grupo de Usuários de PHP e ele mencionou o nó node relacionado a uma visão de vários processos de nós trabalhando e conversando entre si.

Richard Holland
fonte
2

É LAMP versus MEAN hoje em dia. Para uma comparação direta, consulte http://tamas.io/what-is-the-mean-stack .

É claro que M, E e A são um pouco variáveis. Por exemplo, o koa mais recente pode substituir (E) xpress.

No entanto, apenas substituir o Apache por Node.js provavelmente não é o caminho certo para modernizar sua pilha da web.

Wolfgang Kuehn
fonte