Akka es un juego de herramientas y un tiempo de ejecución gratuitos y de código abierto que simplifica la construcción de aplicaciones concurrentes y distribuidas en la JVM . Akka admite múltiples modelos de programación para la concurrencia, pero enfatiza la concurrencia basada en actores , con inspiración extraída de Erlang . [2]
Autor (es) original (es) | Jonas Bonér |
---|---|
Desarrollador (es) | Lightbend |
Versión inicial | Julio de 2009 |
Lanzamiento estable | 2.6.13 / 23 de febrero de 2021 [1] |
Repositorio | |
Escrito en | Scala |
Sistema operativo | Multiplataforma |
Plataforma | máquina virtual de Java |
Licencia | Licencia Apache 2.0 |
Sitio web | akka |
Existen enlaces de lenguaje para Java y Scala . Akka está escrito en Scala y, a partir de Scala 2.10, los actores de la biblioteca estándar de Scala están en desuso en favor de Akka. [3]
Historia
Una implementación de actor, escrita por Philipp Haller, fue lanzada en julio de 2006 como parte de Scala 2.1.7. [4] En 2008, Scala estaba atrayendo la atención por su uso en aplicaciones de servidor complejas, pero la simultaneidad todavía se lograba típicamente mediante la creación de subprocesos que compartían memoria y se sincronizaban cuando era necesario mediante bloqueos. Consciente de las dificultades con ese enfoque e inspirado por el soporte de la biblioteca del lenguaje de programación Erlang para escribir aplicaciones altamente concurrentes y controladas por eventos, el programador sueco Jonas Bonér creó Akka para brindar capacidades similares a Scala y Java. Bonér comenzó a trabajar en Akka a principios de 2009 [5] y escribió su visión en junio de ese año. [6] El primer lanzamiento público fue Akka 0.5, [7] anunciado en enero de 2010. [8] Akka ahora es parte de la plataforma Lightbend junto con el marco Play y el lenguaje de programación Scala .
Características distintivas
Los puntos clave que distinguen las aplicaciones basadas en actores de Akka son:
- La concurrencia se basa en mensajes y es asíncrona: normalmente no se comparten datos mutables y no se utilizan primitivas de sincronización; Akka implementa el modelo de actor .
- La forma en que los actores interactúan es la misma ya sea que estén en el mismo host o en hosts separados, comunicándose directamente oa través de instalaciones de enrutamiento, ejecutándose en algunos subprocesos o en muchos subprocesos, etc. Dichos detalles pueden modificarse en el momento de la implementación mediante un mecanismo de configuración, lo que permite un programa que se puede ampliar (para hacer uso de servidores más potentes) y expandir (para hacer uso de más servidores) sin modificación.
- Los actores están ordenados jerárquicamente con respecto a las fallas del programa, que se tratan como eventos que deben ser manejados por el supervisor de un actor (independientemente de qué actor envió el mensaje que desencadenó la falla). A diferencia de Erlang, Akka impone la supervisión de los padres, lo que significa que cada actor es creado y supervisado por su actor padre.
Akka tiene una estructura modular, con un módulo central que proporciona actores. Hay otros módulos disponibles para agregar características como distribución de red de actores, soporte de clústeres , comando y abastecimiento de eventos, integración con varios sistemas de terceros (por ejemplo, Apache Camel , ZeroMQ ) e incluso soporte para otros modelos de concurrencia como Futures y Agents.
Estructura del proyecto
Viktor Klang se convirtió en el líder técnico del proyecto Akka en septiembre de 2011. Cuando Viktor se convirtió en Director de Ingeniería en Lightbend en diciembre de 2012, Roland Kuhn se convirtió en el líder técnico de Akka. La parte principal del desarrollo la realiza un equipo central empleado en Lightbend, [9] apoyado por una comunidad activa. [10] El énfasis actual está en ampliar el apoyo a los clústeres .
Relación con otras bibliotecas
Han surgido otros marcos y conjuntos de herramientas para formar un ecosistema alrededor de Akka:
- El kit de herramientas Spray [11] se implementa mediante Akka y cuenta con un servidor HTTP , así como funciones relacionadas, como un lenguaje específico de dominio (DSL) para crear API RESTful.
- El marco de Play para el desarrollo de aplicaciones web ofrece integración con Akka [12]
- Hasta la versión 1.6, Apache Spark usaba Akka para la comunicación entre nodos [13]
- La biblioteca de Socko Web Server admite la implementación de API REST para aplicaciones Akka [14]
- La biblioteca basada en eventos [15] proporciona compatibilidad con la arquitectura impulsada por eventos (ver también diseño controlado por dominio ) para los actores de Akka
- La herramienta de prueba de esfuerzo de Gatling para servidores web de prueba de carga se basa en Akka [16]
- El marco web Scalatra se basa en Akka y ofrece integración con él [17]
- El marco de desarrollo de aplicaciones web de Vaadin se puede integrar con Akka [18]
- La plataforma Apache Flink para el procesamiento de datos por lotes y flujos distribuidos se basa en Akka. [19]
- El marco de Lagom para construir microservicios reactivos se implementa sobre akka. [20]
Hay más de 250 proyectos públicos registrados en GitHub que usan Akka. [21]
Publicaciones sobre Akka
Hay varios libros sobre Akka:
- Akka Essentials [22]
- Ejemplos de código Akka
- Concurrencia Akka [23]
- Akka en acción [24]
- Akka efectivo [25]
- Futuros componibles con Akka 2.0, con ejemplos de código Java, Scala y Akka [26]
Akka también aparece en
- "Actores en Scala" de P. Haller [27]
- "Scala en acción" de N. Raychaudhuri [28]
- D. "Programación funcional para desarrolladores de Java" de Wampler [29]
- "Libro de cocina Scala" de A. Alexander [30]
- V. Subramaniam's "Programming Concurrency on the JVM" [31]
- "Aplicaciones web reactivas" de M. Bernhardt [32]
Además de muchos artículos web que describen el uso comercial de Akka, [33] [34] también hay artículos generales al respecto. [35] [36]
Ver también
- Portal de software gratuito
Referencias
- ^ Equipo Akka. "Akka 2.6.13 lanzado" . Consultado el 24 de febrero de 2021 .
- ^ Equipo Akka. "Introducción a los actores de Scala" . Consultado el 17 de septiembre de 2018 .
- ^ Jovanovic, Vojin. "La guía de migración de Scala Actors" . Consultado el 13 de marzo de 2013 .
- ^ "Historial de versiones de Scala - versiones anteriores" . scala-lang.org. 2009-02-16. Archivado desde el original el 4 de enero de 2013.
- ^ Jonas Bonér (16 de febrero de 2009). "configuración del proyecto de inicio" . github.com.
- ^ Bonér, Jonas. "Akka Actor Kernel" . [email protected] . Archivado desde el original el 4 de marzo de 2016 . Consultado el 13 de julio de 2017 .
- ^ Jonas Bonér (12 de julio de 2009). "v0.5" . github.com.
- ^ Jonas Bonér (4 de enero de 2010). "Presentamos Akka: escalabilidad más sencilla, tolerancia a fallos, simultaneidad y comunicación remota a través de actores" . jonasboner.com.
- ^ "Equipo Akka" . akka.io . Consultado el 6 de junio de 2013 .
- ^ "Lista de contribuyentes de Akka" . github.com . Consultado el 6 de junio de 2013 .
- ^ Doenitz, Mathias. "Kit de herramientas de pulverización" . spray.io . Consultado el 6 de junio de 2013 .
- ^ "Documentación del marco de juego: integración con Akka" . playframework.com . Consultado el 6 de junio de 2013 .
- ^ "Fuentes del proyecto Spark" . github.com . Consultado el 6 de junio de 2013 .
- ^ "Servidor Web Socko" . sockoweb.org . Consultado el 6 de junio de 2013 .
- ^ "biblioteca de eventos" . eligosource . Consultado el 6 de junio de 2013 .
- ^ "Herramienta de prueba de esfuerzo Gatling" . github.com . Consultado el 6 de junio de 2013 .
- ^ "Documentación de Scalatra: Akka" . scalatra.org. Archivado desde el original el 6 de agosto de 2013 . Consultado el 6 de junio de 2013 .
- ^ "Vaadin en Akka" . Vaadin.com . Consultado el 26 de abril de 2014 .
- ^ "Apache Flink - ¡Akka por la victoria!" . flink.apache.org . Consultado el 2 de diciembre de 2015 .
- ^ https://www.lagomframework.com/documentation/1.4.x/java/Akka.html
- ^ Tasharofi, Samira. "Corpus del proyecto del actor Akka en GitHub" . cs.illinois.edu. Archivado desde el original el 30 de octubre de 2012 . Consultado el 6 de junio de 2013 .
- ^ Gupta, Munish K. (2012). Akka Essentials . Packt Publishing. pag. 334. ISBN 1849518289.
- ^ Wyatt, Derek (2013). Concurrencia Akka . Artima. pag. 521. ISBN 0981531660.
- ^ Roestenburg, Raymond (2013). Akka en acción . Publicaciones Manning. pag. 475. ISBN 1617291013.
- ^ Allen, Jamie (2013). Akka eficaz . O'Reilly Media. pag. 74. ISBN 1449360076.
- ^ Slinn, Michael (2012). Futuros compostables con Akka 2.0 . Investigación en Micronautics. pag. 178. ISBN 0984278923.
- ^ Haller, Philipp (2012). Actores en Scala . Artima. pag. 169. ISBN 0981531652.
- ^ Raychaudhuri, Nilanjan (2013). Scala en acción . Publicaciones Manning. pag. 416. ISBN 1935182757.
- ^ Wampler, Dean (2011). Programación funcional para desarrolladores de Java . O'Reilly Media. pp. 90 . ISBN 1449311032.
- ^ Alexander, Alvin (2013). Libro de cocina de Scala . O'Reilly Media. pag. 722. ISBN 1449339611.
- ^ Subramaniam, Venkat (2011). Programación de la concurrencia en la JVM: dominio de la sincronización, STM y actores . Estantería pragmática. págs. 280 . ISBN 193435676X.
- ^ Bernhardt, Manuel (2016). Aplicaciones web reactivas: cubre Play, Akka y Reactive Streams . Publicaciones Manning. pag. 328. ISBN 9781633430099.
- ^ Darrow, Barb. "Juniper Networks se une a Scala" . gigaom.com . Consultado el 8 de junio de 2013 .
- ^ Ross, David. "Escalando la API de Klout con Scala, Akka y Play" . Consultado el 8 de junio de 2013 .
- ^ Haines, Stephen (8 de mayo de 2013). "Proyectos Java de código abierto: Akka" . JavaWorld . Consultado el 15 de julio de 2020 .
- ^ "Java Magazin 6.13" . jaxenter.de. Archivado desde el original el 13 de agosto de 2013 . Consultado el 8 de junio de 2013 .
enlaces externos
- Sitio web oficial de Akka