¿Cómo se compara akka con Erlang? [cerrado]

97

He estado mirando akka recientemente y es bastante impresionante. Parece que tiene la mayoría de las características principales de erlang: transparencia de ubicación, jerarquías de supervisión y más. ¿Hay alguna característica que tenga erlang que no tenga akka?

centeno
fuente
Vea esta película sobre erlang en la práctica. Lástima que no haya ninguno sobre scala youtube.com/watch?v=G0eBDWigORY
mhstnsc

Respuestas:

123

Descargo de responsabilidad: soy el PO de Akka

  • Erlang copia en envío: Akka usa memoria compartida (objetos inmutables) para envíos en VM
  • Erlang hace GC por proceso - Akka usa GC de JVM
  • Erlang tiene OTP : Akka se integra con todo el ecosistema de Java (Apache Camel, JAX-RS, etc., etc.)
  • Erlang hace la programación del proceso por usted: Akka le permite utilizar muchos Despachadores diferentes con infinitas oportunidades de configuración
  • Erlang realiza la recarga de código activo: Akka puede admitirlo, pero es menos flexible debido a la carga de clases de JVM

Esos son los que están en la parte superior de mi cabeza.

Por otro lado, usar Akka significa que puede usar Scala, Java, Groovy o JRuby para escribir sus aplicaciones.

Viktor Klang
fuente
39
Los objetos Erlang también son inmutables y el modelo de simultaneidad no requiere copiar al enviar dentro del mismo nodo. BEAM para objetos grandes envía una referencia. Fuente: esta respuesta SO por @rvirdig .
FooF
26
Erlang copia en envío para hacer que GC sea más eficiente; puede funcionar por proceso. Es por eso que no hay grandes pausas GC en las aplicaciones Erlang a diferencia de las aplicaciones JVM / Akka.
andreypopp
4
Bueno, Andrey, eso depende de qué JVM / GC estés usando. azulsystems.com/products/zing/whatisit
Viktor Klang
4
Erlang tiene un número de reducción para cada proceso, incluso si está en un ciclo de cálculo pesado y ocupado, Erlang VM puede pausar el proceso y permitir que otros procesos hambrientos tomen más ciclos de CPU. Ésa es una característica muy importante que JVM no proporciona.
Daniel
6
@MaX Erlang suele ser 5 veces más lento que Java debido a la falta de soporte JIT. Pero Erlang no tiene pausa GC, está diseñado para aplicaciones de simultaneidad y telecomunicaciones 7 * 24, Erlang se preocupa más por la equidad del proceso, evitando el hambre y el punto muerto, no está diseñado para un rendimiento como JVM. Entonces, es realmente naranja y manzana.
Daniel
74

En Erlang se garantiza que los procesos se cambiarán aproximadamente cada 1000 reducciones. En un marco tan ingenuo como el de Scala / Akka, el agente posee un programador hasta que termina de funcionar en recepción. Mate. Juego terminado. Hasta la vista :) Gente, no pierdan su tiempo en pseudo-técnicos. Me sorprendió que los chicos comparen Scala con Erlang.

También hay muchas otras de las llamadas "características asesinas", pero aquí está mi consejo: no piense en términos de características, piense en modismos que habiliten un lenguaje en particular. Scala roba las "mejores características", Erlang le permite / implementa con los modismos correctos para construir sistemas de manera confiable, con un lenguaje de alto nivel que se basa en esos modismos correctos. Cuando aprendes Erlang, estás reconstruyendo tu mente, tu forma de pensar sobre un sistema confiable distribuido, Erlang te enseña y te actualiza. Scala es solo otro lenguaje imperativo (oh, lo siento, multiparadigmal, palabra divertida) que intenta robar buenas características de otros idiomas.

vjache
fuente
9
La forma de Erlang de hacer que todos los IO sean implícitamente asincrónicos es muy elegante. Async IO se puede hacer usando las API de NIO en Scala, lo que no me parece un mate, sino una solución menos elegante.
HRJ
7
¡¿De qué demonios estas hablando?! ¿Cómo es mejor procesar 1000 tareas sencillas que una programación circular, o incluso cerca de la programación de un buzón de correo más pequeño?
FUD
8
@vjache - estoy de acuerdo. Mis muchos años como programador java me han enseñado que en algún momento tendrás que investigar la capa debajo de ti. Scala / Akka parece ser solo otra capa sobre muchas otras capas (por ejemplo, nio, netty, etc.), todas las cuales deberá comprender en algún momento. Aunque recién comencé a trabajar con Erlang, parece que tendré menos capas que necesito entender para hacer el trabajo. La programación distribuida en Erlang se siente mucho más liviana para Scala / Akka, probablemente de una manera similar a que Python era la alternativa más liviana a Java para aplicaciones web.
Chris Snow
@FUD: ¿tal vez se refería a 1000 instrucciones Erlang? no podría haber querido decir 1000 mensajes ...
Erik Kaplun
2
@ErikAllik Se refería a 1000 "reducciones". Piense en una reducción como un token para ejecutar un poco de código (no lo es, pero hace el trabajo de explicar ...). Después de 1000 reducciones, el programador cambia a un proceso diferente. Más información en erlang.org/pipermail/erlang-questions/2001-April/003132.html
Aegis
40

Casi nadie menciona el aislamiento de procesos. Sin garantías de "su hilo no puede meterse con mi basura", los sistemas distribuidos son mucho más difíciles de razonar. (Ya son bastante difíciles con los procesos de Erlang).

AFAIK (que no está lejos, dada mi limitada experiencia directa con la JVM), sólo Erlang consigue el aislamiento de procesos "correcto" en la JVM. El Sr. Google puede dar algunas pistas sobre dónde encontrar investigaciones de Fox y Candea (?) Sobre sistemas de investigación que utilizan una técnica de "micro-reinicio" ("computación orientada a la recuperación"). Un desarrollador de Erlang lee esa investigación y dice un par de cosas:

  1. Bienvenido al club, ¿por qué tardaste tanto?
  2. Sin embargo, la JVM hace que unirse sea tremendamente difícil. :-)
Scott Lystig Fritchie
fuente
El aislamiento del proceso es realmente muy agradable. Sin embargo, incluso Erlang no es inmune a que un NIF salga mal.
Viktor Klang
14

Para mí, el intercambio de código activo en todo un clúster de Erlang sin tiempo de inactividad (por ejemplo:) make:all([netload]es una de las características principales de Erlang.

Pero invirtamos tu pregunta: ¿Qué tiene akka que no tenga Erlang? Por supuesto, puede agregar decenas de extensiones y bibliotecas (scala, akka, spring, osgi, ...) a Java para intentar acercarse a Erlang. Pero, ¿dónde está el punto? En resumen, todas estas extensiones son mucho más complejas que aprender el lenguaje Erlang simple que ahora ha demostrado durante más de 2 décadas que puede hacer el trabajo ofreciendo la máxima escalabilidad sin tiempo de inactividad.

Rumpelstilz
fuente
30
En mi opinión, Scala es un lenguaje mucho mejor en el nivel de sintaxis que Erlang. Tiene objetos, rasgos, espacios de nombres adecuados, seguridad de tipos adecuada, sin sintaxis de registro desagradable, etc. La comunidad es más grande, puedo usar todas las herramientas Java disponibles y se siente más pulido.
ryeguy
15
@ryeguy: "mejor lenguaje en el nivel de sintaxis" ... hmm, defina "mejor" para "sintaxis". Cuando comparo idiomas, la sintaxis es el factor más irrelevante (porque es solo una cuestión de gusto o de lo que estás acostumbrado).
Peer Stritzinger
4
@ryeguy Semántica diferente, sintaxis diferente.
viernes
3
el intercambio de código activo se convierte en un problema si necesita mantener el estado entre diferentes versiones de código, al final, es más fácil cerrar el proceso y migrar el estado al inicio
OlegYch
4
@ryeguy La sintaxis de un lenguaje de programación es casi irrelevante; lo que importa es su semántica. Erlang es un PL funcional, por lo que, por supuesto, no tiene objetos. Los rasgos, la seguridad de tipos, etc. se deben a que Scala es un lenguaje fuertemente tipado, mientras que Erlang se tipea dinámicamente; esa es una elección de diseño. Sin embargo, te invito a echar un vistazo a Elixir si quieres los beneficios de Erlang con un toque más moderno;)
Aegis
5

Probablemente Erlang sea mejor para sistemas distribuidos más grandes (siguiendo la respuesta de vjache), pero para un servidor normal cuando solo desea utilizar toda la potencia de varias CPU, Akka es una buena opción: proporciona una buena abstracción, rendimiento e integración con el ecosistema Java.

kodstark
fuente