¿Cuál es la mejor opción para una aplicación concurrente: Scala + Akka o Erlang?

Pregunta súper abierta, pero voy a morder.

Erlang, o más específicamente la parte de la Plataforma de Telecomunicaciones Abiertas (OTP) de Erlang, se diseñó específicamente para aplicaciones concurrentes de larga duración. Si bien el caso de uso original era para conmutadores telefónicos, Erlang / OTP puede ejecutarse en la mayoría del hardware en estos días.

Una de las mejores características de una plataforma concurrente y de larga duración que ofrece Erlang / OTP es la capacidad de intercambiar módulos de código en caliente sin reiniciar la aplicación. Esto permite que su código evolucione naturalmente con teóricamente 0 tiempo de inactividad, bastante impresionante.

Además, dado que Erlang se diseñó a sí mismo para tener transparencia referencial / variables inmutables y comunicación a través del paso de mensajes, hace que Erlang sea extremadamente adecuado para sistemas concurrentes. Fue construido esencialmente para funcionar excepcionalmente bien en problemas concurrentes.

Para ser justos, solo he incursionado en Scala, pero entiendo que el ecosistema Scala está tratando de construir algunos de los mismos patrones que Erlang tiene, específicamente en torno a Akka y desacoplar la transmisión de mensajes.

¡Espero que ayude! Sin embargo, realmente necesito más información sobre los detalles de tu aplicación para realmente ayudar.

Erlang y partes de Akka están diseñados para ayudar a facilitar la programación cuando ya se sabe que el modelo de actor es la construcción más apropiada para implementar la concurrencia.

Suponiendo que el modelo de actor es el constructo apropiado en el contexto dado, encuentro que erlang es mucho más completo en términos de sus construcciones OTP (por ejemplo, la diversidad de tipos de supervisores admitidos). Además, si uno quiere variantes ligeramente diferentes de gen_server o supervisores, a menudo también es relativamente fácil manejar su propia versión. p.ej. Mira la primera publicación de Joe armstrong en este hilo https://groups.google.com/forum/ … No sé si lo mismo es cierto sobre akka, aunque eso es algo que quizás quieras descubrir un poco más sobre.

La función del lenguaje también podría desempeñar un papel en la decisión. p.ej. Java / Scala son mucho mejores en las operaciones de cadena, mientras que erlang maneja la compactación de datos en flujos de bits para la comunicación de red mucho mejor. La disponibilidad de los programadores de erlang vis-a-vis java es otro asunto obvio a considerar.

Dicho esto, es menos probable que las características relacionadas con el OTP o el idioma sean los puntos críticos que influyen en la decisión aquí. Se reduce a las diferencias de plataforma. Erlang tiene un aislamiento de proceso muy superior (por ejemplo, no hay datos compartidos entre procesos y la recolección de basura se realiza en un nivel por proceso). Además, es extremadamente fácil comenzar decenas de miles de procesos en erlang. Es poco probable que JVM (no scala / akka) pueda competir bien si estos son puntos importantes. Erlang hace que sea realmente fácil trabajar con varios nodos de comunicación en la misma máquina o en la intranet, algo que no es tan intrínseco en el mundo de JVM. Por otro lado, la JVM se entiende mucho mejor, se despliega mucho más y tiene una gama increíblemente amplia de herramientas y bibliotecas de terceros para trabajar. También puede combinar construcciones de concurrencia basadas en modelos no actores cuando trabaje con Scala, por ejemplo. Colecciones paralelas o memoria transaccional de software, opciones que renunciaría en caso de erlang.

Creo que esto realmente depende mucho de sus antecedentes y de los requisitos del sistema que está creando. Si necesita acceso a una amplia variedad de bibliotecas y tiene experiencia con Java (aunque algunos podrían decir que esto puede ser una desventaja) y / o JVM, Scala y Akka son probablemente una buena opción. Por otro lado, Erlang y OTP han existido por un tiempo y son muy confiables (lo que no quiere decir que JVM y Akka no lo sean, pero Akka es un sistema mucho más joven), por lo que si se siente cómodo con Erlang, OTP podría Sé una buena elección. Ciertamente, hay áreas donde ambas plataformas brillan y se superponen mucho entre ellas, dado que Akka se basó inicialmente en muchas ideas tomadas de OTP (aunque agrega algunas capacidades únicas). Basaría mi elección en el nivel de comodidad con las plataformas a menos que haya claramente una característica de cualquiera de las plataformas que le atraiga.

More Interesting

¿Cómo puedo desarrollar mi carrera en pruebas de software y cuál es su alcance? ¿Cuáles son los mejores institutos de capacitación para las pruebas de aprendizaje?

¿Cuál es el mejor sitio de aptitud?

¿Es divertido el desarrollo de Android?

¿Qué métricas se utilizan para determinar que un programador es 10 veces mejor que otro programador?

¿Es cierto que la Ingeniería de Software tiene una gran demanda?

Cómo convertirme en ingeniero de software si ya tengo un doctorado en matemática pura y algunos conocimientos autodidactas de C ++ pero no tengo antecedentes formales de CS

¿Cuánto pagaría aproximadamente si externalizara mi desarrollo de software a Filipinas?

¿Un 'buen' ingeniero de software volvería a escribir su código para módulos Python obsoletos, o haría que su empleador actualizara dicho módulo?

¿Existe algún software que pueda usar para tomar reservas de mis clases en línea?

¿Es una buena idea que un profesional independiente ofrezca una tarifa comparativa y un bono de rendimiento premium en lugar de solo una tarifa premium con clientes conscientes del precio?

¿Qué software puedo usar para programar?

¿Por qué tanta gente cuelga trabajando para Google, Facebook, etc.?

¿Dónde puedo encontrar listas de software accesible, por ejemplo, la Sección 508, etc., preferiblemente agrupadas por propósito?

¿Qué idioma tiene el código más mantenible / reutilizable?

¿Cómo aprendió Brad Friedman las habilidades de ingeniería en ingeniería de software?