scala - framework - ¿Cómo se usa Akka en Play?
akka microservices (1)
La página principal de Play dice:
Construido sobre Akka, Play proporciona un consumo de recursos predecible y mínimo (CPU, memoria, hilos) para aplicaciones altamente escalables.
Me gustaría saber exactamente cómo y dónde se usa Akka en Play y cuáles son las consecuencias de tener Play build encima de Akka.
En Play 2.0 , Play delegó todas las solicitudes para pasar por un actor. Depende mucho del futuro API de Akka y otras partes.
En Play 2.1 , con el movimiento de la futura API de Akka en Scala 2.10, Play comenzó a depender menos de Akka. Obtiene todos los contextos de ejecución de Akka y proporciona integración con Akka, pero eso es todo.
En Play 2.3 , estamos agregando nuevas características para ayudar a la integración de Akka, particularmente alrededor de WebSockets.
En Play 2.4 , Play se trasladará al nuevo akka-http (anteriormente conocido como spray), momento en el que Play se desarrollará en Akka como puedas.
¿Cuáles son las consecuencias? Akka proporciona un paradigma para la programación que simplifica la concurrencia. También proporciona grandes abstracciones para la programación distribuida: lo más difícil de la programación distribuida es lidiar con las fallas (que ocurren todo el tiempo) de manera adecuada. La mayoría de las herramientas tratan de solucionar esto tratando de ocultar sus fallas, pero desafortunadamente ocultar algo no lo hace desaparecer, y realmente hace las cosas más difíciles porque cuando intentas abordar tipos específicos de fallas, el hecho de que están ocultas de ti se pone en tu camino. Akka empuja fallas en su cara, de modo que cuando está codificando, se ve obligado a pensar en cómo responderá su aplicación a fallas. En consecuencia, se ve obligado a diseñar / codificar su aplicación de forma que sea tolerante a las fallas. También le brinda las herramientas para manejarlos de manera jerárquica, lo que le permite especificar a qué nivel desea manejar qué tipo de falla y cómo debe responderse la falla (muera, vuelva a intentar hasta n veces, etc.) .
Entonces, ¿cómo ayuda esto a Play? La mejor pregunta es ¿cómo ayuda a un usuario de Play? Akka me ayuda a implementar Play, pero es posible implementarlo sin Akka (de hecho, Netty hace la mayor parte del trabajo pesado ahora, que cambiará en Play 2.4). Lo importante es que Play se integra perfectamente con Akka, lo que facilita el manejo de solicitudes HTTP con actores, maneja fallas, etc., y esto ayuda a Play users porque les permite diseñar su aplicación de forma tal que sea escalable y flexible.
ACTUALIZACIÓN: Lo anterior fue escrito hace 3 años, mucho ha cambiado desde entonces. Play 2.4 proporcionó soporte experimental para akka-http, pero Play todavía usa Netty de forma predeterminada.
En Play 2.5 , desaprobamos la API iteratees y cambiamos a las transmisiones Akka. Esto significaba que ahora todo IO asíncrono estaba pasando por las transmisiones de Akka. Pronto (no estoy seguro de si será Play 2.6 o posterior), Play moverá el interruptor para hacer que akka-http sea la implementación de respaldo predeterminada del servidor (aunque todavía no sea el cliente WS).
ACTUALIZACIÓN 2: Play 2.6 ahora hace que akka-http sea la implementación back-end predeterminada de su servidor HTTP (Netty todavía está disponible como una opción).