¿Cómo se compara akka con Erlang?
(5)
Estuve mirando akk recientemente y es bastante impresionante. Parece que tiene la mayoría de las funciones de erlang: transparencia de ubicación, jerarquías de supervisión y más. ¿Hay alguna característica que erlang tenga que akka no?
Casi nadie menciona el proceso de aislamiento. Sin garantías de que "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), solo Erlang en realidad obtiene el aislamiento del proceso "correcto" en la JVM. El Sr. Google puede dar algunas pistas sobre dónde encontrar la investigación de Fox y Candea (?) En los 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:
- Bienvenido al club, ¿qué te llevó tanto tiempo?
- Sin embargo, la JVM hace que sea terriblemente difícil unirse. :-)
Descargo de responsabilidad: Yo soy el PO de Akka
- Erlang hace copy-on-send - Akka usa memoria compartida (objetos inmutables) para envíos dentro de la 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.)
- Erlang hace la programación del proceso por usted: Akka le permite usar muchos despachadores diferentes con infinitas oportunidades de configuración
- Erlang realiza una recarga de código caliente: Akka puede soportarlo, pero es menos flexible debido a la carga de clases de JVM
Esos son los que están arriba de mi cabeza.
Por otro lado, usar Akka significa que puedes usar Scala, Java, Groovy o JRuby para escribir tus aplicaciones.
En Erlang, se garantiza que los procesos se conmutarán aproximadamente cada 1000 reducciones. En un marco tan ingenuo como el agente Scala / Akka posee un planificador hasta que termina el trabajo en recibir. Mate. Juego terminado. Hasta la vista :) Gente, no pierdas el tiempo con pseudo-técnicos. Me sorprendió que los muchachos aquí comparen a Scala con Erlang.
También hay muchas otras llamadas "características asesinas", pero este es mi consejo, no piense en términos de características, piense en modismos que permitan un lenguaje particular. Scala roba las "mejores características", Erlang te habilita / implementa con modismos correctos para construir sistemas de manera confiable, con un lenguaje de alto nivel impulsado por esos modismos correctos. Cuando aprendes Erlang, estás reconstruyendo tu mente, tu forma de pensar sobre el sistema confiable distribuido, Erlang te enseña y te actualiza. Scala es simplemente otro lenguaje imperativo (¡oh !, lo siento, multiparadigmal, palabra divertida) que intenta robar buenas características de otros idiomas.
Probablemente Erlang es mejor para sistemas distribuidos más grandes (siguiendo la respuesta de vjache) pero para un servidor normal cuando solo quieres usar toda la potencia de múltiples CPU, entonces Akka es una buena opción: proporciona una buena abstracción, rendimiento e integración con el ecosistema Java.
Para mí, el intercambio de código caliente en todo un clúster de Erlang sin tiempo de inactividad (por ejemplo: make:all([netload]
) es una de las funciones de asesino de Erlang.
Pero cambiemos su pregunta: ¿qué tiene Akka que Erlang no tiene? Por supuesto, puede agregar docenas de extensiones y bibliotecas (scala, akka, spring, osgi, ...) a Java para tratar de acercarse a Erlang. Pero, ¿dónde está el punto? En resumen, todas estas extensiones son mucho más complejas que aprender el lenguaje simple de Erlang que ahora ha demostrado durante más de dos décadas que puede hacer el trabajo ofreciendo una escalabilidad superior sin tiempo de inactividad.