Escrito en Scala, Akka es un conjunto de herramientas para crear aplicaciones distribuidas orientadas a mensajes. Basado en el sistema Actor-Model, Akka es la elección de muchas empresas para su backend. ¿Por qué?
¿Qué es Aká?
Akka es una herramienta de desarrollo de aplicaciones para crear aplicaciones Java y Scala altamente concurrentes y orientadas a mensajes. Es un marco de desarrollo que le permite crear aplicaciones distribuidas basadas en JVM .
Las aplicaciones creadas a través de Akka están basadas en eventos y son resistentes. También son altamente escalables y le permiten concentrarse en sus objetivos comerciales principales. Además, no necesita preocuparse por las primitivas de concurrencia de bajo nivel o el enrutamiento del tráfico del lado del servidor al crear su aplicación con Akka.
Las aplicaciones de Akka pueden enviar 50 millones de mensajes por segundo. También puede manejar 2,5 millones de actores por GB. Esto permite que las aplicaciones sean altamente escalables y eficientes. La máquina también es autorreparable, lo que significa que puede corregir automáticamente a los actores locales y remotos en caso de cualquier problema. El escalado se puede realizar mediante diferentes técnicas, como equilibrio, agrupación, fragmentación y partición.
¿Qué son los actores de Akka?
Los actores Akka son similares a los objetos en un diseño orientado a objetos. Reciben mensajes, los desacoplan y realizan tareas de acuerdo con las instrucciones del mensaje. Pueden realizar una tarea ellos mismos o reenviar el mensaje a otro actor con autenticación para realizar la tarea requerida.
Los actores se utilizan para crear, configurar e implementar componentes de Akka. Por lo general, se utilizan en el sistema Actor-Model para sincronización y transmisión de mensajes. Estos actores se ejecutan en diferentes hilos y se comunican entre sí a través de un enrutador grupal. El enrutador utiliza una recepcionista para descubrir actores disponibles. El recepcionista también es responsable de reenviar el mensaje únicamente a los actores registrados.
¿Cuáles son los problemas con los modelos de concurrencia tradicionales?
En la infraestructura de TI moderna, existen muchas formas de manejar la concurrencia, como el multiproceso y la encapsulación, entre otras. Sin embargo, en estos métodos, debe asignar parte de su memoria para compartir, lo que a menudo conduce a estados internos corruptos de los objetos.
Puede aplicar bloqueos para solucionar este problema. Sin embargo, son un método ineficiente y obsoleto para resolver problemas de comunicación. No se escalan de manera eficiente y pueden causar problemas como interbloqueos.
Puede utilizar pilas de llamadas para solucionar algunos de los problemas de subprocesos múltiples. Sin embargo, las pilas de llamadas no pueden manejar solicitudes fallidas. Por ejemplo, el hilo principal no accederá al hilo de trabajo si tiene un mensaje esperando en una cola. En este escenario, si el subproceso de trabajo comienza a trabajar en el mensaje y falla, el subproceso principal no recibe notificación del error. Además, si el hilo de trabajo termina cuando el hilo principal no accede a él, su falla no generará ninguna notificación. Esto significa que el hilo permanecerá defectuoso hasta la próxima vez que se acceda a él, momento en el que generará su primera excepción de estado fallido.
¿Cómo funciona Akká?
El modelo de actor de Akka resuelve el problema de concurrencia enviando mensajes a otros actores en lugar de utilizar el hilo principal. Esto le permite emular la encapsulación sin utilizar bloqueos. Akka también garantiza que los estados de los actores se mantengan de forma segura para subprocesos.
Los actores pasan la responsabilidad de enviar notificaciones al actor receptor. También procesan los mensajes de hilo entrantes de forma secuencial en lugar de instantáneamente. Esto les permite sincronizarse sin utilizar múltiples subprocesos.
¿Cómo trabajan los actores?
Akka sigue el modelo de actor y actor supervisor. Cuando ocurre una falla, los actores subordinados cierran y lanzan una excepción. En esta situación, el supervisor puede intensificar la falla, reiniciar al subordinado o detener permanentemente al actor. Sin embargo, si el actor fallido es también un supervisor, despedirlo significaría despedir a todos sus subordinados.
También puedes eliminar a los secuaces de un actor antes de reiniciarlo. Los actores no pueden vincularse a supervisores desde fuera de la red y desconectarse claramente cuando sus supervisores fallan.
En lugar de comunicación directa, los actores se comunican mediante el paso de mensajes. Las referencias del actor respaldan los mensajes que el actor quiere enviar. Los actores siguen métodos conocidos de transmisión de mensajes, como disparar y olvidar, solicitar respuesta y respuesta adaptada.
Cada actor tiene una configuración predeterminada que incluye un buzón (para la cola de mensajes), un entorno de ejecución (para la manipulación del código y el paso de mensajes), variables de comportamiento y una dirección. Sin embargo, los actores pueden diferenciarse según sus trayectorias.
Las rutas son direcciones que describen el protocolo y la ubicación de un actor. Cada actor tiene un camino físico y lógico. Estas rutas ayudan a los ingenieros a definir la ubicación funcional de un actor en el sistema de actores.
El método preferido para tratar con los actores es a través de grupos en lugar de conectarse remotamente a ellos. El módulo de clústeres se encarga de agregar y eliminar actores en diferentes sistemas de clústeres. También es responsable de la distribución informática.
Servicios Akka
Alpaca
Este es un producto de código abierto para la integración de canalizaciones Java/Scala.
Alpakka tiene una extensión llamada Alpakka Kafka que le permite conectarse a transmisiones de Kafka. El uso de transacciones de servicios de desarrollo de Akka para Kafka garantiza que todos los mensajes se consuman sin duplicaciones y se produzcan correctamente en el receptor.
Flujos de Akka
Akka Streams es un conjunto de herramientas que le permite crear flujos de abstracción de alto nivel sin preocuparse por el comportamiento y las variables de los actores.
Proyecciones de Akká
Las proyecciones de Akka le permiten procesar una transmisión desde una fuente. El flujo debe tener una carga útil y un desplazamiento rastreable. También puede usarlo para restablecer y realizar un seguimiento de estas proyecciones.
¿Akka contra Chispa?
Apache Spark es un motor de procesamiento de datos que se utiliza para procesar datos por lotes. Se centra en la tolerancia a fallos. Utiliza conjuntos de datos distribuidos resistentes para compartir y procesar datos rápidamente. También le permite ejecutar tareas en diferentes máquinas en paralelo.
Akka es un marco de propósito general para construir sistemas distribuidos de alto rendimiento. Le permite procesar transacciones sin preocuparse por la concurrencia.
Spark es mucho más útil para realizar acciones en grandes conjuntos de datos (big data), mientras que Akka enfatiza un mayor grado de control del actor. Debe utilizar Akka siempre que necesite realizar un procesamiento por lotes en tiempo real utilizando lógica empresarial.
¿Vale la pena aprender Akka en 2021?
El sistema Actor-Model es muy útil si trabaja en algoritmos y procesos distribuidos. Si deseas ejecutar tu aplicación en segundo plano, este modelo sería beneficioso para sincronizar mensajes y facilitar la comunicación, especialmente si estás trabajando en lenguajes como Scala, Java o Erlang.
Fuente: BairesDev