Akka: concurrencia a lo simple

AkkaDesarrollar aplicaciones concurrentes tiene su grado de complejidad, el hecho de tener que manejar múltiples hilos, tener que realizar bloqueos (locks), entre otras cosas, hace que la probabilidad a errores y fallos sea mayor. Por otro lado, el código es más difícil de seguir, mantener y testear.

Akka framework llega para facilitarnos y simplificarnos la implementación de aplicaciones concurrentes.

¿Qué es Akka?

Es un conjunto de herramientas para el desarrollo de aplicaciones con un alto nivel de concurrencia, distribuidas y basadas en el envío de mensajes en la JVM.

Akka se basa en el modelo de actor (Actor Model) para manejar la concurrencia. Así como en el diseño orientado a objetos todo es un objeto, en el modelo de actor todo es un actor. Estos actores interactúan y comparten información mediante el envío de mensajes.

Akka se encarga de realizar las tareas más complejas, como crear hilos, manejar condiciones raras, enviar y recibir mensajes, dejando al actor la tarea de procesar el mensaje.

Akka asegura que cada instancia de un Actor corra en un hilo y que cada mensaje sea procesado de a uno por vez. De esa manera cada estado de un Actor se puede mantener de manera segura sin tener que preocuparse por la sincronización o por condiciones raras.

¿Qué es un Actor?

Es un objeto que recibe mensajes y toma acciones basadas en dicho mensaje. Está totalmente desacoplado del código de fuente del mensaje, sólo es responsable de reconocer el tipo de mensaje que recibió y realizar la acción correspondiente.

Al recibir un mensaje, el Actor puede realizar una de las siguientes acciones:

  • Realizar algunas operaciones propias (realizar algún calculo, consumir algún servicio web)
  • Reenviar el mensaje a otro Actor
  • Instanciar un nuevo Actor y reenviarle el mensaje

¿Cómo se implementa un Actor?

Para implementar un actor debemos extender el trait akka.actor.Actor e implementar el método receive. El método receive es invocado por Akka cuando un mensaje es enviado al actor.

En el siguiente ejemplo se puede ver una implementación muy sencilla de un Actor y la forma de identificar un mensaje y realizar las acciones que correspondan.

[scala]import akka.actor.{ActorSystem, ActorLogging, Actor, Props}

case object Left
case object Right
case object Forward
case object Backward

class RobotActor extends Actor {
def receive = {
case Left => move("left")
case Right => move("right")
case Forward => move("forward")
case Backward => move("backward")
case _ => error()
}
}[/scala]

Conclusión

Akka simplifica y facilita el desarrollo de aplicaciones con un alto nivel de concurrencia, distribuidas y tolerante a fallos. Se encarga de realizar tareas complejas de la programación concurrente. Probablemente sea una buena opción a tener en cuenta al momento de comenzar a evaluar la arquitectura de una aplicación con alto nivel de concurrencia.

Tags

Access top talent now!

Related

Get in Touch