web-dev-qa-db-fra.com

Node.js ou Erlang

J'aime vraiment ces outils en ce qui concerne le niveau de concurrence qu'il peut gérer.

Erlang ressemble à une solution beaucoup plus stable mais nécessite beaucoup plus d'apprentissage et beaucoup de plongée dans le paradigme du langage fonctionnel. Et il semble qu'Erlang le rende beaucoup mieux en ce qui concerne les processeurs multi-cœurs (corrigez-moi si je me trompe).

Mais que dois-je choisir? Laquelle est la meilleure à court/long terme?

Mon objectif est d'apprendre un outil qui facilite la mise à l'échelle de mes projets Web sous une charge élevée par rapport aux langues traditionnelles.

86
user80805

J'essaierais Erlang. Même si ce sera une courbe d'apprentissage plus abrupte, vous en tirerez davantage puisque vous apprendrez un langage de programmation fonctionnel. De plus, comme Erlang est spécialement conçu pour créer des systèmes fiables et hautement concurrents, vous en apprendrez beaucoup sur la création de services hautement évolutifs en même temps.

87
Justin Ethier

Je ne peux pas parler pour Erlang, mais quelques choses qui n'ont pas été mentionnées sur le nœud:

  • Node utilise le moteur V8 de Google pour réellement compiler javascript en code machine. Le nœud est donc assez rapide. C'est donc en plus des avantages de vitesse offerts par la programmation événementielle et l'io non bloquant.
  • Node a une communauté assez active. Sautez sur leur groupe IRC sur freenode et vous verrez ce que je veux dire
  • J'ai remarqué les commentaires ci-dessus Push Erlang sur la base qu'il sera utile d'apprendre un langage de programmation fonctionnel. Bien que je convienne qu'il est important d'élargir vos compétences et d'en avoir une à votre actif, vous ne devriez pas baser un projet sur le fait que vous souhaitez apprendre un nouveau style de programmation
  • D'un autre côté, Javascript est déjà dans un paradigme dans lequel vous vous sentez à l'aise d'écrire! De plus, c'est du javascript, donc lorsque vous écrivez du code côté client, il sera cohérent.
  • la communauté du nœud a déjà pompé des tonnes de modules ! Il existe des modules pour redis, mongodb, canapé, et ce que vous avez. Un autre bon module à étudier est Express (pensez à Sinatra pour le nœud)

Découvrez le vidéo sur le blog de yahoo par Ryan Dahl, le gars qui a réellement écrit node. Je pense que cela vous donnera une meilleure idée de l'endroit où se trouve le nœud et où il va.

Gardez à l'esprit que le nœud est encore à des stades de développement tardifs et a donc subi pas mal de changements, changements qui ont brisé le code précédent. Cependant, soi-disant, c'est à un point où vous pouvez vous attendre à ce que l'API ne change pas trop. Donc, si vous cherchez quelque chose d'amusant, je dirais que le nœud est un excellent choix.

50
Jarsen

Je suis un programmeur Erlang de longue date, et cette question m'a incité à jeter un œil à node.js. Ça a l'air sacrément bon.

Il semble que vous devez générer plusieurs processus pour tirer parti de plusieurs cœurs. Je ne vois cependant rien sur la définition de l'affinité du processeur. Vous pouvez utiliser le jeu de tâches sur Linux, mais il devrait probablement être paramétré et défini dans le programme.

J'ai également remarqué que le support de la plateforme pourrait être un peu plus faible. Plus précisément, il semble que vous auriez besoin de s'exécuter sous la prise en charge de Cygwin pour Windows.

Ça a l'air bien.


Éditer

Node.js prend désormais en charge nativement Windows.

15
dsmith

Bien que j'irais personnellement pour Erlang, je dois admettre que je suis un peu biaisé contre JavaScript. Mon conseil est que vous évaluiez quelques points:

  1. Réutilisez-vous du code existant dans l'une de ces langues (à la fois en termes de code source et d'expérience de programmation!)
  2. Avez-vous besoin/souhaitez-vous des mises à jour à la volée sans arrêter l'application (c'est là qu'Erlang gagne par défaut - son exécution a été conçue pour ce cas, et OTP contient tous les outils nécessaires)
  3. Quelle est la taille du trafic attendu, en termes d'opérations distinctes et simultanées, pas de bande passante?
  4. Dans quelle mesure les opérations que vous effectuez pour chaque demande sont-elles "parallèles"?

Erlang a vraiment affiné le système de distribution parallèle et transparent en réseau. Selon ce qu'est exactement le projet, la disponibilité d'une implémentation mature d'un tel système pourrait l'emporter sur tout problème concernant l'apprentissage d'une nouvelle langue. Il existe également deux autres langages qui fonctionnent sur Erlang VM que vous pouvez utiliser, le Ruby/Python-like Reia et LISP-Erlang Flavored Erlang =.

Encore une autre option consiste à utiliser les deux, en particulier avec Erlang étant utilisé comme une sorte de "hub". Je ne sais pas si Node.js a un système d'interface de fonction étrangère, mais si c'est le cas, Erlang a une bibliothèque C pour que les processus externes s'interfacent avec le système comme tout autre processus Erlang.

9
p_l

Je regarde les deux mêmes alternatives que vous êtes, gotts, pour plusieurs projets.

Jusqu'à présent, le meilleur rasoir que j'ai trouvé pour décider entre eux pour un projet donné est de savoir si j'ai besoin d'utiliser Javascript. Un système existant que je cherche à migrer est déjà écrit en Javascript, donc sa prochaine version est susceptible d'être faite dans node.js. D'autres projets seront réalisés dans un framework web Erlang car il n'y a pas de base de code existante pour migrer.

Une autre considération est qu'Erlang évolue bien au-delà de plusieurs cœurs, il peut évoluer vers un centre de données entier. Je ne vois pas de mécanisme intégré dans node.js qui me permette d'envoyer un message à un autre processus JS sans se soucier de la machine sur laquelle il se trouve, mais il est intégré directement à Erlang aux niveaux les plus bas. Si votre problème n'est pas suffisamment important pour nécessiter plusieurs machines ou s'il ne nécessite pas plusieurs processus de coopération, cet avantage ne devrait pas avoir d'importance, vous devez donc l'ignorer.

Erlang est en effet un bassin profond pour plonger. Je suggère d'écrire un programme fonctionnel autonome avant de commencer à créer des applications Web. Une première étape encore plus facile, puisque vous semblez à l'aise avec Javascript, est d'essayer de programmer JS dans un style plus fonctionnel. Si vous utilisez jQuery ou Prototype, vous avez déjà commencé dans cette voie. Essayez de rebondir entre la programmation fonctionnelle pure dans Erlang ou l'un de ses proches (Haskell, F #, Scala ...) et JS fonctionnel.

Une fois que vous êtes à l'aise avec la programmation fonctionnelle, recherchez l'un des nombreux frameworks Web Erlang; vous ne devriez probablement pas écrire votre application directement sur quelque chose de bas niveau comme inets à ce stade avancé. Regardez quelque chose comme azote , par exemple.

9
Warren Young

Il semble qu'Erlang soit plus performant pour un déploiement sur un serveur relativement bas de gamme (512 Mo 4 cœurs AMD VM à 2,4 GHz). Cela vient de l'expérience de SyncPad de comparer les implémentations Erlang vs Node.js de leur application de serveur de tableau blanc virtuel.

5
adib

Il y a une autre langue sur le même VM que erlang est -> Elixir

C'est une alternative très intéressante à Erlang, consultez celle-ci.

Il a également un framework web à croissance rapide basé sur celui-ci -> Phoenix Framework

4
NoDisplayName

whatsApp ne pourrait jamais atteindre le niveau d'évolutivité et de fiabilité sans erlang https://www.youtube.com/watch?v=c12cYAUTXXs

3
Henry H.

Je préférerai Erlang à Node. Si vous voulez la simultanéité, Node peut être remplacé par Erlang ou Golang en raison de leurs processus légers.

Erlang n'est pas facile à apprendre et nécessite donc beaucoup d'efforts, mais sa communauté est active et peut donc obtenir de l'aide, ce n'est que la raison pour laquelle les gens préfèrent Node.

0
Sumit Pugalia