Node.js ou Erlang

J’aime vraiment ces outils quand il s’agit du niveau de concurrence qu’il peut gérer.

Erlang ressemble à une solution beaucoup plus stable, mais nécessite beaucoup plus d’apprentissage et de plongée dans le paradigme du langage fonctionnel. Et il semblerait qu’Erlang améliore les performances des processeurs multi-cœurs (corrigez-moi si je me trompe).

Mais que dois-je choisir? Lequel est le meilleur à court / long terme?

Mon objective est d’apprendre un outil qui facilite la mise à l’échelle de mes projets Web sous une charge élevée par rapport aux langages traditionnels.

Je donnerais un essai à Erlang. Même s’il s’agit d’une courbe d’apprentissage plus raide, vous en tirerez plus de profit, car vous apprendrez un langage de programmation fonctionnel. De plus, comme Erlang est spécifiquement conçu pour créer des systèmes hautement concurrents et fiables, vous apprendrez beaucoup à créer des services hautement évolutifs en même temps.

Je ne peux pas parler pour Erlang, mais quelques choses qui n’ont pas été mentionnées à propos de node:

  • Node utilise le moteur V8 de Google pour comstackr réellement le javascript en code machine. Donc, le noeud est en fait assez rapide. Donc, en plus des avantages de la vitesse offerts par la programmation pilotée par les événements et les io non bloquants.
  • Node a une communauté très active. Sautez sur leur groupe IRC sur freenode et vous verrez ce que je veux dire
  • J’ai remarqué que les commentaires ci-dessus poussent Erlang sur le fait qu’il serait utile d’apprendre un langage de programmation fonctionnel. Bien que je sois d’accord sur l’importance d’élargir vos compétences et d’acquérir une de ces compétences, vous ne devriez pas vous baser sur le fait que vous voulez apprendre un nouveau style de programmation.
  • D’autre part, Javascript est déjà dans un paradigme dans lequel vous vous sentez à l’aise d’écrire! En plus, c’est du javascript, donc quand vous écrivez le code côté client, il sera cohérent.
  • La communauté de node a déjà fourni des tonnes de modules ! Il y a des modules pour redis, mongodb, canapé et ce que vous avez. Un autre bon module à examiner est Express (pensez à Sinatra pour le nœud)

Regardez la vidéo sur le blog de yahoo par Ryan Dahl, le gars qui a écrit le noeud. Je pense que cela vous aidera à mieux cerner le nœud et son évolution.

N’oubliez pas que le nœud est encore au stade de développement avancé et qu’il a subi de nombreuses modifications, des modifications qui ont dépassé le code précédent. Cependant, il est supposé que 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 node est un excellent choix.

Je suis un programmeur Erlang de longue date, et cette question m’a incité à regarder node.js. Ca a l’air vraiment bien.

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

J’ai également remarqué que le support de la plate-forme pouvait être un peu plus faible. Plus précisément, il semblerait que vous deviez exécuter Cygwin pour le support Windows.

Semble bien cependant.


modifier

Node.js a maintenant un support natif pour Windows.

Je regarde les deux alternatives que vous avez, getts, pour plusieurs projets.

Jusqu’à présent, le meilleur razor que j’ai mis au point pour décider entre eux pour un projet donné est de savoir si je dois utiliser Javascript. Un système existant que je cherche à migrer est déjà écrit en Javascript, donc sa prochaine version sera probablement faite dans node.js. D’autres projets seront réalisés dans une structure Web Erlang, car il n’y a pas de base de code à migrer.

Une autre considération est que 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 permet d’envoyer un message à un autre processus JS sans se soucier de la machine sur laquelle il se trouve, mais cela est intégré dans Erlang aux niveaux les plus bas. Si votre problème n’est pas assez important pour nécessiter plusieurs machines ou s’il ne nécessite pas plusieurs processus de coopération, cet avantage n’a pas d’importance, vous devez donc l’ignorer.

Erlang est en effet un bassin profond dans lequel 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à démarré ce chemin. Essayez de rebondir entre une functional programming pure à Erlang ou une de ses proches (Haskell, F #, Scala …) et un JS fonctionnel.

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

Alors que je vais personnellement pour Erlang, j’avoue que je suis un peu biaisé contre JavaScript. Mon conseil est que vous évaluez quelques points:

  1. Réutilisez-vous le code existant dans l’une de ces langues (à la fois en termes de code source et d’expérience du programmeur!)
  2. Avez-vous besoin ou souhaitez-vous des mises à jour à la volée sans arrêter l’application (c’est là que 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, concurrentes, pas de bande passante?
  4. Dans quelle mesure les opérations que vous effectuez pour chaque demande sont-elles “parallèles”?

Erlang a vraiment mis au point un système dissortingbué parallèle et concurentiel. Selon la nature exacte du projet, la disponibilité d’une implémentation mature de ce système pourrait compenser les problèmes liés à l’apprentissage d’une nouvelle langue. Il y a aussi deux autres langages qui fonctionnent sur Erlang VM, que vous pouvez utiliser, le Reia de type Ruby / Python et le Erlang de Lisp-Flavored .

Encore une autre option consiste à utiliser les deux, en particulier avec Erlang 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 puissent s’interfacer avec le système, comme n’importe quel autre processus Erlang.

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

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

Il y a un autre langage sur la même VM que erlang est -> Elixir

C’est une alternative très intéressante à Erlang, vérifiez celle-ci.

En outre, il a un cadre Web à croissance rapide basé sur elle-> Phoenix Framework

Je préférerai Erlang sur Node. Si vous voulez une concurrence, Node peut être remplacé par Erlang ou Golang en raison de leurs processus légers.

Erlang n’est pas facile à apprendre, cela demande beaucoup d’efforts, mais sa communauté est active et peut donc obtenir de l’aide, c’est la seule raison pour laquelle les gens préfèrent Node.