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.
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.
Je ne peux pas parler pour Erlang, mais quelques choses qui n'ont pas été mentionnées sur 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.
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.
Node.js prend désormais en charge nativement Windows.
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:
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.
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.
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.
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
whatsApp ne pourrait jamais atteindre le niveau d'évolutivité et de fiabilité sans erlang https://www.youtube.com/watch?v=c12cYAUTXXs
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.