J'aime vraiment ces outils en ce qui concerne le niveau de concurrence qu'ils peuvent gérer.
Erlang / OTP 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 / OTP le rend bien meilleur en ce qui concerne les processeurs multicœurs (corrigez-moi si je me trompe).
Mais lequel dois-je choisir? Lequel est le meilleur à court et à long terme?
Mon objectif est d'apprendre un outil qui rend la mise à l'échelle de mes projets Web sous forte charge plus facile que les langages traditionnels.
concurrency
erlang
multicore
node.js
user80805
la source
la source
Réponses:
Je voudrais essayer Erlang. Même s'il s'agira d'une courbe d'apprentissage plus raide, vous en tirerez davantage parti 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 simultanés, vous en apprendrez beaucoup sur la création simultanée de services hautement évolutifs.
la source
Je ne peux pas parler pour Erlang, mais quelques choses qui n'ont pas été mentionnées à propos de node:
Regardez la vidéo sur le blog de Yahoo par Ryan Dahl, le gars qui a écrit node. Je pense que cela vous aidera à avoir une meilleure idée de l'endroit où se trouve le nœud et de sa destination.
Gardez à l'esprit que le nœud est toujours à un stade avancé de développement et qu'il a donc subi de nombreux changements - des changements qui ont cassé le code antérieur. Cependant, c'est supposé être à 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.
la source
Je suis un programmeur Erlang de longue date, et cette question m'a incité à jeter un œil à node.js. Ça a l'air vraiment bien.
Il semble que vous deviez 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 le jeu de tâches sous 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 pourrait être un peu plus faible. Plus précisément, il semble que vous deviez exécuter avec le support Cygwin pour Windows.
Ça a l'air bien.
Éditer
Node.js a maintenant un support natif pour Windows.
la source
Je regarde les deux mêmes alternatives que vous, 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 sera probablement 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 à migrer.
Une autre considération est qu'Erlang évolue bien au-delà de simples cœurs multiples, 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 me 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 assez important pour nécessiter plusieurs machines ou s'il ne nécessite pas plusieurs processus coopérants, cet avantage n'a probablement pas d'importance, vous devez donc l'ignorer.
Erlang est en effet une piscine profonde dans laquelle plonger. Je suggérerais d'écrire un programme fonctionnel autonome avant de commencer à créer des applications Web. Une première étape encore plus simple, puisque vous semblez à l'aise avec Javascript, consiste à essayer de programmer JS dans un style plus fonctionnel. Si vous utilisez jQuery ou Prototype, vous avez déjà commencé ce chemin. Essayez de rebondir entre la programmation fonctionnelle pure dans Erlang ou l'un de ses parents (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 l' azote , par exemple.la source
Alors que je choisirais personnellement Erlang, j'admets que je suis un peu partial contre JavaScript. Mon conseil est que vous évaluez quelques points:
Erlang a vraiment affiné la concurrence et le système distribué parallèle transparent au réseau. En fonction de la nature exacte du 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 Reia de type Ruby / Python et l' Erlang à saveur de lisp .
Encore une autre option est d'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.
la source
Il semble qu'Erlang fonctionne mieux pour un déploiement dans un serveur relativement bas de gamme (machine virtuelle AMD 512 Mo 4 cœurs à 2,4 GHz). Cela vient de l'expérience de SyncPad de comparer les implémentations Erlang et Node.js de leur application serveur de tableau blanc virtuel.
la source
Il y a une autre langue sur la même VM que Erlang -> Elixir
C'est une alternative très intéressante à Erlang, regardez celle-ci.
Il dispose également d'un cadre Web à croissance rapide basé sur celui-ci-> Phoenix Framework
la source
whatsapp ne pourrait jamais atteindre le niveau d'évolutivité et de fiabilité sans erlang https://www.youtube.com/watch?v=c12cYAUTXXs
la source
Je préférerai Erlang à Node. Si vous voulez la concurrence, 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.
la source