09

May

Publicado por: Antoni Florensa | Actor Model | Desarrollo de Software | Programación

Actor Model para construir productos digitales escalables

Si estás creando una aplicación que maneja las tareas de forma asíncrona, usar Actor Model puede ayudarte en el proceso para simplificar el código, escalar la aplicación y procesar tareas en paralelo. Pero antes de explicar qué es exactamente el Actor Model, te quiero explicar por qué se creó este modelo.

En los 70’, Carl Hewitt y Alan Kay se encontraron que sus programas eran lentos y que estos se quedaban sin memoria demasiado rápido, ya que el hardware para ese entonces no podía mantener el nivel de exigencia de los programas que creaban. El programa en concreto que intentaban desarrollar era un sistema de envío de mensajes y fue este el problema el que les llevó a idear el Actor Model.

Cada vez es más común que, como desarrolladores de software, nos encontremos con aplicaciones que deben utilizar componentes de forma concurrente y escalar en base a la demanda que la aplicación vaya a requerir. Es este requerimiento el que nos hace buscar soluciones y fijarnos entre muchas otras opciones en donde destaca el Actor Model.

Pero, ¿Qué es el Actor Model?

Es un modelo conceptual de comunicación concurrente basado en lo que se llaman “actores”. ¿Y qué es un “actor”? Se refiere a un proceso de computación o a una función explícita.

Básicamente tu le envías a un actor instrucciones y este te devuelve información a ti.

Aunque en principio no parezca nada nuevo, ni revolucionario voy a explicar el funcionamiento de estos llamados actores para que lo entiendas mejor.

Un actor es un proceso computacional con una dirección. Esta dirección es como si tu le enviaras un mensaje al Actor. Es el equivalente a una dirección de correo. Como en el correo, los actores pueden tener diferentes direcciones o una sola dirección. Tu también le puedes asignar una sola dirección a múltiples actores. De esta manera es como puedes escalar tu aplicación para que pueda cumplir los requisitos de tráfico si un actor no es suficiente.

Principales características de los actores:

– Toda la computación es efectuada dentro del actor

– Los actores solo pueden comunicarse por mensajes

– En respuesta a un mensaje recibido un actor puede:

– Cambiar su estado o comportamiento

– Crear un número infinito de actores hijos

– Enviar mensajes a otros actores

Otro aspecto importante sobre el Actor Model es que es el estado del actor está aislado, es decir nunca será expuesto a mundo exterior. Este dato nos puede resultar interesante cuando estamos trabajando con aplicaciones ampliamente concurrentes, ya que no permitimos que los actores no puedan ver ni modificar el estado de otro actor. Entonces, ¿cómo puedes ver o modificar el estado de los actores?

Todo se basa en los mensajes

Los mensajes son la columna de la comunicación en el Actor Model, ya que nos permitirán comunicarnos entre los actores.

Para poder comunicarnos con otros actores, cada actor recibe una dirección. Esa dirección solo podrá ser utilizada para enviar mensajes al actor, no para cambiar su estado.

Estos mensajes que se envían entre actores son inmutables, y son almacenados en una ‘mailbox’ que existe dentro de las direcciones de los actores.

Los mensajes son enviados al mailbox del actor y procesados en orden FIFO, un actor solo puede procesar un mensaje a la vez. Los actores están disociados, trabajan de manera asíncrona y no necesitan esperar a una respuesta de otro actor.

 

Las direcciones que utilizan los actores para poder comunicarse con otros actores solo podrán recibir, al menos que esta dirección sea de un actor que él mismo ha creado.

Los mensajes pueden ser enviados fuera de orden, o pueden no ser enviados. El Actor Model provee la mayoría de veces una garantía de entrega. Esto significa que el fallo es una opción, y que si necesitamos una garantía de entrega, tendremos que buscar otras herramientas.

El funcionamiento del sistema de Actor Model

Un Actor es una entidad de computación concurrente, independiente que responde a los mensajes.

Primero tenemos que entender el rol que hace el actor en el esquema general del Actor Model. Los programas concurrentes están divididos en entities que trabajan en subtareas distintas. Cada Actor hace su cuota de trabajo (subtarea) y cuando todos los actores han acabado sus tareas individuales, la tarea principal se da por finalizada.

Toda la tarea de construir alguna cosa se divide en subtareas/actividades que son controladas por actores especializados en esa subtarea. La supervisión general será realizada por otro actor que debe ser el manager/arquitecto del proyecto.

Tolerancia a fallos del Actor Model

En el Actor Model los actores pueden supervisar otros actores, que a su vez estos pueden supervisar a más actores que se hayan creado.

El supervisor puede decidir qué hacer en caso de fallo, por ejemplo puede reiniciar a un actor el cual esté supervisando o redirigir los mensajes a otro actor lo cual nos llevará a sistemas de auto curación.

Siendo realistas: Pros y contras

El uso de Actor Model puede aportar varios beneficios que pueden ser muy útiles. Entre ellos, que ofrece facilidades al momento de escalar un sistema, es tolerante al fallo de entregas y los mensajes no comparten estado.

Sin embargo, hay algunos contras que también debo comentar.

El modelo de actor no tiene una noción directa de herencia o jerarquía, lo que significa que consume mucho tiempo y confunde a los actores del programa con tendencias de comportamiento común. Entre otras cosas, otra desventaja es que pueden ser susceptibles a “deadlocks”.

Otro problema es el reemplazo de comportamiento. El comportamiento es dinámico y muy difícil de realizar utilizando un lenguaje estático. El análisis estático no puede admitir la reflexión o la reconfiguración del sistema de tiempo de ejecución.

El hecho de que se pueda alterar el comportamiento también hace que la optimización del programa sea muy difícil. La noción de imparcialidad débil para garantizar la entrega de mensajes requiere buzones de correo ilimitados. Esto implica alguna forma de estructura infinita de pila o puntero, pero no se puede suponer que esté disponible en todas las arquitecturas. Los requisitos de memoria de los programas orientados a objetos generalmente se pueden determinar antes del tiempo de ejecución.

También te puede interesar: El mock de las Apis y su papel en el testing de aplicaciones

Conclusión

Los problemas descritos anteriormente son algunas de las dificultades inherentes asociadas con Actor Model. Nada puede ser perfecto.

Mediante el uso de actores de diferentes tipos y sus interacciones, el desarrollador puede construir y operar flujos de trabajo de programación muy complejos, con un alto rendimiento debido a la concurrencia de cooperación y muy pocos problemas relacionados con la concurrencia.

En los últimos años, la investigación ha conducido a métodos más eficientes para implementar el Actor Model.

El crecimiento de la red distribuida verdaderamente global, debe utilizar el paso de mensajes asíncronos, debido a las ubicaciones muy remotas de los procesadores y los retrasos de tiempo inherentes a la transmisión.

Estudios más recientes han demostrado que el modelo de Actor Model en su etapa actual de desarrollo puede ser muy eficiente al nivel necesario para los requisitos actuales.

También te puede interesar: Habilidades necesarias para construir un software de calidad

 

CTA-careers-geenral-justdigital

 

Barcelona
Passeig Gaiolà 13
+34 933 801 144
Lleida
Carrer Agustins 7
+34 973 988 222
Andorra
(Escaldes-Engordany)
Parc de la Mola 10, AD700
Bogota
Carrera 9A #99-07 Piso 9. Despacho 02
Torre la Equidad