Si la perseverancia no me falla vamos a intentar dedicar un conjunto de posts a Akka 🙂 (en cuanto pueda el de Akka+Spring :))
Y para empezar un post explicando qué es Akka y qué pretende!.
¿Qué es?
Akka es una plataforma (o framework) inspirado por Erlang que busca el desarrollo simple de aplicaciones escalables y multihilo. Akka funciona sobre Scala y por tanto corre sobre la máquina virtual Java JVM.
Si en los lenguajes más tradicionales como Java la concurrencia se basa en la memoria compartida entre varios hilos y los métodos de sincronización Akka ofrece un modelo de concurrencia basado en actores.
· Un actor es un objeto con el que puedes interactuar enviándole mensajes: cada actor puede procesar mensajes y enviarle mensajes a otros actores.
· En una máquina virtual JVM pueden correr millones de actores a la vez construyendo una jerarquía padre (supervisor)-hijo con los padres monitorizando el comportamietno de los hijos.
· Además Akka permite de una forma sencilla splitear nuestros actores entre varios nodos de un cluster.
· Los actores pueden tener un estado interno pero la comunicación sólo ocurre pasando mensajes y nunca a través de estructuras compartidas.
¿Qué pretende?
En el diagrama podemos ver la evolución de la programación:
Las aplicaciones han evolucionado desde grandes procedimientos monolíticos a un modelo orientado a objetos, y con Spring y Java EE el diseño de las aplicaciones ha evolucionado a un modelo orientado a tareas.
Los EJBs o POJOs de Spring están diseñados para ejecutar una única tarea, estos objetos serán stateless para permitir gestionar el incremento de carga y hacer que las aplicaciones sean escalables.
Este modelo encaja en un Servidor de Aplicaciones en el que este se encarga de asignar los hilos de ejecución, pero y qué pasa en una aplicación Java que no usa un contenedor, entonces tenemos que ir a un modelo de programación multi-hilo.
Trabajar con hilos requiere un mayor nivel técnico ya que tendremos que tratar con locks, mutex,…
Akka surge en este scenario, abstrayendo todos estos conceptos en el Actor. Alla permite a los programadores escribir programas que puedan ejecutar cientos de tareas en paralelo.
Akka toma conceptos y técnica de Erland para construir modelos de tolerancia a fallos para que las aplicaciones fallen rápido y se recuperen de un problema tan rápido como sea posible.
Jajajaja, Luismi hablando de Scala, me parto…
Ja,ja!tengo más sorpresas guardadas 😛
Excelente, su aplicación es la siguiente, si debes hacer un proceso largo ( no un GET ni POST) sino algo como cargar un archivo, entonces usas Akka para que el sistema no se quede pegado atendiendo solo la carga del archivo. Así tienes varios actores en paralelo. Archivo, Gets, Posts!
Mejora la concurrencia de tu Web.