Je regarde Akka récemment et c'est assez impressionnant. On dirait qu’il possède la plupart des fonctionnalités phares de erlang - transparence des localisations, hiérarchies de supervision, etc. Y a-t-il des caractéristiques que l'akka n'a pas?
Réponses
Trop de publicités?Avertissement: je suis le bon de commande pour Akka
- Erlang ne copie-sur-envoyez - Akka utilise de mémoire partagée (des objets immuables) pour en-VM envoie
- Erlang n'par processus GC - Akka utilise JVM GCs
- Erlang a OTP - Akka s'intègre à l'ensemble de l'écosystème Java (Apache Camel, JAX-RS, etc etc)
- Erlang est le processus la planification pour vous - Akka vous permet pour utiliser beaucoup de différents Répartiteurs avec une infinité de configuration possibilités
- Erlang n'chaud code recharger - Akka pouvez la soutenir, mais c'est moins souple en raison de la JVM classloading
Ce sont ceux du haut de ma tête.
D'autre part, l'utilisation d'Akka signifie que vous pouvez utiliser Scala, Java, Groovy ou JRuby pour écrire vos applications.
Dans le processus Erlang sont garantis d'être basculé à environ 1000 réductions. Dans un naïf cadre de la Scala/Akka agent possède un planificateur jusqu'à ce qu'il termine le travail en recevoir. Échec et mat. Game over. Hasta la vista:) les Gens, ne perdez pas votre temps sur les pseudo techniciens. J'ai choqué que les gars ici de comparer Scala avec Erlang.
Il y a aussi beaucoup d'autres soi-disant "killer features", mais ici, c'est mon conseil, ne pas penser en termes de fonctionnalités, de réfléchir sur les idiomes qui permet en particulier de la langue. Scala vole "meilleurs éléments", Erlang active/implémente vous avec droit idiomes de construire des systèmes de manière fiable, avec un langage de haut niveau qui conduit à partir de ceux-expressions idiomatiques. Lorsque vous apprenez Erlang vous êtes à la reconstruction de votre esprit, de votre façon de penser distribués système fiable, Erlang vous enseigne et des mises à niveau. Scala est un autre impératif (oh, désolé, multiparadigmal, drôle de mot) de la langue qui tente de voler les bonnes caractéristiques à partir d'autres langues.
Presque personne ne mentionne l'isolation des processus. Sans la garantie de "votre fils ne peut mess avec mon junk", les systèmes distribués sont beaucoup plus difficile à comprendre. (Ils sont déjà bien assez difficile avec Erlang du processus.)
Autant que je sache (ce qui n'est pas loin, étant donné mon peu d'expérience directe avec la JVM), seulement Erjang fait d'isolation du processus de "droite" sur la JVM. M. Google peut donner des conseils sur les endroits où trouver de la recherche par Fox et Candea (?) sur la recherche de systèmes qui utilisent un "micro-reboot" de la technique ("axés sur le rétablissement de l'informatique"). Un Erlang développeur indique que la recherche et le dit un certain nombre de choses:
- Bienvenue au club, ce qui vous a pris si longtemps?
- La JVM rend terriblement, terriblement dur à joindre, si. :-)
Pour moi, hot code swapping dans l'ensemble d'une Erlang cluster sans temps d'arrêt (par exemple: make:all([netload]
) est l'un des Erlang killer fonctionnalités.
Mais nous allons revenir sur votre question: Qu'est-akka ont que Erlang ne l'est pas? Bien sûr, vous pouvez ajouter des dizaines d'extensions et des bibliothèques (scala, akka, printemps, osgi, ...) afin de Java pour tenter de venir près d'Erlang. Mais où est le point? Dans la somme de toutes ces extensions sont beaucoup plus complexes que l'apprentissage de la simple Erlang langue qui a maintenant prouvé pendant plus de 2 décennies qu'il peut faire la job offrir une évolutivité sans temps mort.
Erlang convient probablement mieux aux grands systèmes distribués (suivant la réponse de vjache), mais pour un serveur normal, lorsque vous souhaitez simplement utiliser toute la puissance de plusieurs processeurs, Akka est un bon choix. Il fournit une bonne abstraction, des performances et une intégration avec l'écosystème Java.