Node.js augmente-t-il réellement l'évolutivité?

21

J'ai lu sur le problème C10K, et particulièrement la partie qui se réfère aux E / S du serveur asynchrone. http://www.kegel.com/c10k.html#aio

Je pense que cela résume à peu près ce que Node.js fait sur le serveur, en permettant aux threads de traiter les demandes des utilisateurs tout en s'appuyant sur les interruptions d'E / S (événements) pour notifier les threads des travaux terminés, plutôt que de confier au thread la responsabilité de la travail CPU complet. Le thread peut continuer avec d'autres choses (non bloquant) et être averti quand un travail est terminé (par exemple, un fichier est trouvé ou une vidéo est compressée).

Cela signifie par la suite qu'un thread est plus «disponible» pour les sockets et donc pour les utilisateurs du serveur.

Ensuite, j'ai trouvé ceci: http://teddziuba.com/2011/10/straight-talk-on-event-loops.html

L'auteur affirme ici que bien que le framework événementiel (thread interrompu) puisse libérer des threads, il ne réduit pas réellement la quantité de travail qu'un CPU doit faire! La justification ici est que si, par exemple, un utilisateur demande à compresser une vidéo qu'il a téléchargée, le processeur doit toujours faire ce travail, et sera bloqué pendant qu'il le fait (par souci de simplicité, oublions le parallélisme ici - à moins que vous mieux connaître!).

Je suis un codeur simple, pas un administrateur de serveur ou quelque chose comme ça. Je suis simplement intéressé de savoir: Node.js est-il un cadeau des dieux du «cloud computing» ou est-ce de l'air chaud, et ne fera-t-il pas réellement gagner du temps et / ou de l'argent aux entreprises en améliorant l'évolutivité?

Merci beaucoup.

Alex
la source
12
Premièrement, ted est un troll, deuxièmement node.js est destiné aux applications liées aux E / S et non aux applications liées au CPU. Ce que vous voulez, c'est une combinaison des deux. Tout ce qui est lié au processeur va dans un nouveau thread / processus. Tout ce qui est lié aux entrées / sorties va dans une boucle d'événements.
Raynos
1
+! Ce mec est définitivement un troll.
Patrick Hughes,
Cela dépend de ce que vous comparez - si vous utilisez toujours Apache (pour une raison quelconque) - alors Node est un cadeau des dieux, mais si vous le comparez à Nginx - les améliorations sont beaucoup moins drastiques et Node est encore plus lent. (dix fois plus lent, 2 ms contre 20 ms pour générer une réponse, MAIS dans nos tests, Nginx donnait 504 sous une charge modérément lourde et Node donnait des réponses normales).
c69
Maintenant, vous en parlez, les gars, le troll est clairement un troll. @ c69 c'est une bonne info, merci beaucoup.
Alex
Votre lien "discussion directe sur les boucles d'événements" ne fonctionne plus.
Robert Harvey

Réponses:

20

Bien sûr, tout travail lié au CPU va utiliser le CPU. Cela va bloquer le CPU dans le langage ou le framework dans lequel vous l'écrivez.

Node.js est idéal lorsque vous avez du travail lié aux E / S, pas au processeur. Je ne ferais pas de travail lourd dans Node, bien que cela puisse être fait. Node.js résout de vrais problèmes, pas ceux fictifs ou imaginaires comme les serveurs de nombres fibonacci . Ce n'est pas de «l'air chaud».

Josh K
la source
Je vérifie simplement quelques points de référence et en effet, cela semble beaucoup plus rapide sur les pages de service: zgadzaj.com/… .. Je suppose que c'est ce que je recherchais ...
Alex
3
@AlexW: Un bon point à propos de ces références est que vous diffusez essentiellement du contenu statique. Voir ma pièce Millions of Hits a Day . Faire tourner l'interpréteur PHP pour cela est du gaspillage. Regardez quelque chose comme node-static pour servir les répertoires de fichiers.
Josh K
@AlexW, juste pour rappeler que zgadzaj.com/… utilise node.js 0.1.103, qui est vieux maintenant !!
Samyak Bhuta
4

Bien que le document C10K soit quelque peu dépassé en ce qui concerne les détails de mise en œuvre, la concurrence basée sur les événements (le modèle de réacteur) est encore à certains égards supérieure à la planification préemptive. Par exemple, un modèle de planification préemptif peut planifier des threads alors qu'ils sont bloqués par E / S. Cela permet au nœud (et à d'autres outils comme Ruby's Event Machine et Python's Twisted) de mieux utiliser les cycles disponibles en passant plus de temps à faire du vrai travail et moins de blocage de temps.

Rein Henrichs
la source
-1

Le multithreading améliore toujours les performances. L'explication originale est idiote car elle ne considère pas l'existence de plusieurs cœurs. Au moment où vous avez plus d'un noyau, les threads ne sont plus des threads. Ce sont des hyperthreads. Toute application gourmande en threads en bénéficiera plus qu'une seule application threadée.

aanand_ub
la source
2
Cela n'explique pas vraiment la ferveur de Node.JS. Le principal avantage de Node.JS est sa capacité à gérer et à distribuer rapidement plusieurs demandes à partir d'un seul thread, et non à gérer efficacement les lourdes charges de travail en arrière-plan, ce que votre réponse ne traite pas.
Robert Harvey
Le principal avantage de node.js est d'avoir une seule langue pour le front et le backend. Toutes ces autres allégations ne sont que des peluches pour le rendre plus important.
whatsisname
2
@whatsisname la simultanéité à thread unique est un énorme avantage, beaucoup plus important que d'avoir une seule langue à mon avis.
suppliez