Puis-je remplacer Apache par Node.js?

151

J'ai un site Web fonctionnant sur CentOS en utilisant les suspects habituels (Apache, MySQL et PHP). Depuis le lancement de ce site Web, il a beaucoup évolué et j'aimerais maintenant faire des choses plus sophistiquées avec lui, à savoir les notifications en temps réel. D'après ce que j'ai lu, Apache gère mal cela. Je me demande si je peux simplement remplacer Apache par Node.js (donc au lieu de " LAMP ", ce serait "LNMP").

J'ai essayé de rechercher une solution en ligne, mais je n'en ai pas trouvé. Si j'interprète correctement les choses que j'ai lues, il semble que la plupart des gens disent que Node.js peut remplacer Apache et PHP ensemble. Cependant, j'ai beaucoup de code PHP existant, donc je préfère le garder.

Au cas où ce ne serait pas déjà évident, je suis assez confus et je pourrais utiliser quelques éclaircissements. Merci beaucoup!

Meule
la source
Le serveur Ape pourrait valoir la peine d'être examiné.
TryHarder

Réponses:

86

Si vous êtes prêt à réécrire votre PHP en JavaScript, alors oui, Node.js peut remplacer votre Apache.

Si vous placez une instance Apache ou NGINX fonctionnant en mode proxy inverse entre vos serveurs et vos clients, vous pouvez gérer certaines requêtes en JavaScript sur Node.js et certaines requêtes dans votre PHP hébergé par Apache, jusqu'à ce que vous puissiez remplacer complètement tout votre PHP avec du code JavaScript. Cela pourrait être le juste milieu: vos WebSockets fonctionnent dans Node.js, plus banal dans Apache + PHP.

sarnold
la source
1
J'apprécie la réponse rapide! Nginx est-il largement supérieur à Apache? J'ai déjà un fichier .htaccess en place et ce serait bien de le garder. De plus, j'ai lu qu'il était inutile que Apache transmette des requêtes à Node.js, car vous perdez alors les avantages de Node.js puisque vous passez toujours par Apache. Serait-il préférable que Node.js écoute sur le port 80 tout ce qui se trouve dans un sous-dossier nommé "nodejs", puis tout ce qui ne se trouve pas dans ce sous-dossier pourrait être transmis à Apache par Node.js? Apache pourrait écouter sur un autre port comme 8000.
Rick
21
@ Rick, je suis sur le point de supprimer ma propre réponse; Node peut l'utilisersendfile , et il existe un module pour la prise en charge de FastCGI qui pourrait également faciliter le service de votre PHP via Node. En ce qui concerne nginx vs Apache, j'ai toujours été un ventouse pour les serveurs de style asynchrone sur des serveurs threadés ou multiprocessus :) mais j'ai trouvé la documentation Apache plus facile à trouver et à lire. J'appellerais cela une préférence personnelle à moins que vous n'ayez besoin de passer à des nombres incroyables. :)
sarnold
3
@Rick Vous ne voulez pas migrer des éléments de production vers Node avant de comprendre ce que c'est et comment cela fonctionne. Node n'est pas une pilule magique pour accélérer les choses. Le paradigme événementiel / asynchrone n'est pas nouveau, et il y a des raisons pour lesquelles il n'est pas utilisé pour tout. en.wikipedia.org/wiki/Asynchronous_I/O
Øyvind Skaar
1
@Rick Au lieu de penser que vous devriez remplacer ce que vous avez, il vaut peut-être mieux exécuter Node en plus. Ne pensez pas qu'il y a une raison de tout passer par le nœud (?), Cela semble être une mauvaise idée. Exécutez simplement le nœud sur un autre port ou hôte.
Øyvind Skaar
2
@ Øyvind Skaar je suis d'accord. De plus, pour la plupart des sites Web (par exemple Wordpress), le véritable goulot d'étranglement est la base de données et non l'accès aux fichiers. Et, si l'accès aux fichiers est un problème, le cache est toujours une solution viable. Quoi qu'il en soit, pour de vraies performances, PHP-APC est une astuce sacrément bon marché.
magallanes
26

Node.js peut être plus rapide qu'Apache grâce à son architecture événementielle / non bloquante, mais vous pouvez avoir des problèmes pour trouver des modules / bibliothèques qui remplacent certaines fonctionnalités d'Apache.

Node.js lui-même est un framework léger de bas niveau qui vous permet de créer relativement rapidement des éléments côté serveur et des parties en temps réel de vos applications Web, mais Apache offre des options de configuration beaucoup plus larges et des fonctionnalités orientées serveur Web «classiques».

Je dirais qu'à moins que vous ne souhaitiez remplacer PHP par un framework d'application Web basé sur node.js comme express.js, vous devriez rester avec Apache (ou penser à migrer vers Nginx si vous avez des problèmes de performances).

yojimbo87
la source
11

Je pense que Node.js est l'avenir du service Web, mais si vous avez beaucoup de code PHP existant, Apache / MySQL est votre meilleur pari. Apache peut être configuré pour envoyer des requêtes proxy à Node.js, ou Node.js peut envoyer des requêtes proxy à Apache, mais je pense que certaines performances sont perdues dans les deux cas, en particulier dans le premier. Ce n'est pas grave si vous n'exécutez pas un site Web à très fort trafic.

Je viens de m'inscrire à stackoverflow, et je ne peux pas encore commenter la réponse acceptée, mais aujourd'hui j'ai créé un simple script Node.js qui utilise en fait sendfile () pour servir des fichiers via le protocole HTTP. (L'exemple existant auquel la réponse acceptée est liée utilise uniquement le protocole TCP nu pour envoyer le fichier, et je n'ai pas pu trouver d'exemple pour HTTP, alors je l'ai écrit moi-même.)

J'ai donc pensé que quelqu'un pourrait trouver cela utile. Servir des fichiers via l'appel du système d'exploitation sendfile () n'est pas nécessairement plus rapide que lorsque les données sont copiées via "user land", mais cela finit par utiliser moins le CPU et la RAM, permettant ainsi de gérer un plus grand nombre de connexions que la méthode classique.

Le lien: https://gist.github.com/1350901

youurayy
la source
2
Bien que très vrai, je crois toujours que si vous supprimiez Apache, faites exactement ce que vous décrivez, il fonctionnerait aussi vite, et sinon, plus vite que node.js. Apache fait beaucoup de choses que les gens ne voient pas ou ne comprennent pas vraiment et si vous ajoutiez toutes les fonctionnalités de ces serveurs Web à node.js, cela fonctionnerait aussi lentement qu'eux. Un exemple simple serait probablement, mynode.js / getfile? File = / etc / shadow
Rahly
8

Article précédent de SO décrivant exactement ce que je dis (php + socket.io + node)

Je pense que vous pourriez mettre en place un serveur de nœuds sur somehost: 8000 avec socket.io et claquer le code client socket.io en balises et avec un minimum de travail faire basculer votre application existante avec socket.io (bébé en temps réel) sans une tonne de travail.

Bien que le nœud puisse être votre seul serveur principal, rappelez-vous que le nœud aime être à la hauteur de son nom et devenir un nœud. Il y a quelque temps, j'ai regardé un discours que Ryan Dahl a donné à un groupe d'utilisateurs PHP et il a mentionné le nom de nœud relatif à une vision de plusieurs processus de nœuds travaillant et se parlant.

Richard Holland
la source
2

Son LAMP contre MOYEN de nos jours. Pour une comparaison directe, voir http://tamas.io/what-is-the-mean-stack .

Bien sûr, M, E et A sont quelque peu variables. Par exemple, le koa plus récent peut remplacer (E) xpress.

Cependant, le simple remplacement d'Apache par Node.js n'est probablement pas le bon moyen de moderniser votre pile Web.

Wolfgang Kuehn
la source