web-dev-qa-db-fra.com

Comment Akka se compare-t-il à Erlang?

J'ai regardé akka récemment et c'est assez impressionnant. Il semble qu'il possède la plupart des fonctionnalités les plus meurtrières d'erlang - la transparence de l'emplacement, les hiérarchies de supervision, etc. Existe-t-il des fonctionnalités que erlang n'a pas?

95
ryeguy

Avertissement: je suis le bon de commande d'Akka

  • Erlang fait de la copie sur envoi - Akka utilise la mémoire partagée (objets immuables) pour les envois dans la machine virtuelle
  • Erlang fait du GC par processus - Akka utilise des GC JVM
  • Erlang possède OTP - Akka s'intègre à l'ensemble de l'écosystème Java (Apache Camel, JAX-RS, etc.))
  • Erlang s'occupe de la planification des processus pour vous - Akka vous permet d'utiliser de nombreux répartiteurs différents avec des possibilités de configuration infinies
  • Erlang fait un rechargement de code à chaud - Akka peut le prendre en charge, mais il est moins flexible en raison du chargement de classe JVM

Ce sont ceux du haut de ma tête.

D'autre part, utiliser Akka signifie que vous pouvez utiliser Scala, Java, Groovy ou JRuby pour écrire vos applications.

121
Viktor Klang

À Erlang, les processus sont garantis pour être commutés environ toutes les 1000 réductions. Dans un cadre aussi naïf que l'agent Scala/Akka possède un planificateur jusqu'à ce qu'il finisse de travailler en réception. Échec et mat. Jeu terminé. Hasta la Vista :) Les gens, ne perdez pas votre temps sur les pseudo techs. J'ai choqué que les gars ici comparent Scala avec Erlang.

Il y a aussi beaucoup d'autres soi-disant "fonctionnalités tueuses", mais voici mon conseil, ne pensez pas en termes de fonctionnalités, pensez aux idiomes qui permettent un langage particulier. Scala vole les "meilleures fonctionnalités", Erlang vous permet/implémente avec les bons idiomes pour construire des systèmes de manière fiable, avec un langage de haut niveau qui est basé sur ces bons idiomes. Lorsque vous apprenez Erlang, vous reconstruisez votre esprit, votre façon de penser sur un système fiable distribué, Erlang vous enseigne et vous met à niveau. Scala est juste un autre impératif (oh, désolé, multiparadigmal, drôle de mot) langage qui essaie de voler de bonnes fonctionnalités à d'autres langues.

72
vjache

Presque personne ne mentionne l'isolement des processus. Sans garanties de "votre fil ne peut pas jouer avec mes déchets", les systèmes distribués sont beaucoup plus difficiles à raisonner. (Ils sont déjà assez difficiles avec les processus d'Erlang.)

AFAIK (ce qui n'est pas loin, étant donné mon expérience directe limitée avec la JVM), seul Erlang obtient réellement l'isolation du processus "juste" sur la JVM. M. Google peut donner quelques indications sur les endroits où trouver des recherches de Fox et Candea (?) Sur les systèmes de recherche qui utilisent une technique de "micro-redémarrage" ("computing orienté récupération"). Un développeur d'Erlang lit cette recherche et dit deux ou trois choses:

  1. Bienvenue au club, qu'est-ce qui vous a pris si longtemps?
  2. Cependant, la JVM rend la connexion extrêmement difficile. :-)
39

Pour moi, l'échange de code à chaud dans un cluster Erlang entier sans interruption (par exemple: make:all([netload]) est l'une des fonctionnalités du tueur d'Erlang.

Mais inversons votre question: qu'est-ce que l'akka a qu'Erlang n'a pas? Bien sûr, vous pouvez ajouter des dizaines d'extensions et de bibliothèques (scala, akka, spring, osgi, ...) à Java pour essayer de se rapprocher d'Erlang. Mais où est le point? En somme toutes ces extensions sont beaucoup plus complexes que d'apprendre le langage simple Erlang qui a maintenant prouvé depuis plus de 2 décennies qu'il peut faire le travail en offrant une évolutivité optimale sans aucun temps d'arrêt.

14
Rumpelstilz

Erlang est probablement meilleur pour les grands systèmes distribués (à la suite de la réponse de vjache) mais pour un serveur normal lorsque vous voulez simplement utiliser la pleine puissance de plusieurs processeurs, alors Akka est un bon choix - fournit une bonne abstraction, des performances et une intégration avec le Java.

4
kodstark