El documento describe el modelo de actores y Akka Streams. El modelo de actores se basa en la comunicación asíncrona entre unidades de cómputo llamadas actores. Akka Streams implementa el patrón Reactive Streams para permitir el procesamiento de datos de forma asíncrona y no bloqueante a través de fuentes, flujos y sumideros. Akka Streams separa la declaración de gráficos de procesamiento de datos de su ejecución a través de la materialización, permitiendo diferentes estrategias de implementación.
4. El modelo de actores
• Modelo matemático de computación concurrente
• Su primitiva es el Actor
• Unidad fundamental de computación o cómputo
• Basado en comunicaciones asíncronas
• “La motivación era la posibilidad de realizar
procesamiento paralelo masivo en docenas, cientos o
miles de microprocesadores, cada uno con su memoria
local y procesador de comunicaciones, capaces de
comunicarse a través de una red de alta
velocidad”
5. El modelo de actores
• Su filosofía, todo es un actor.
• Un actor
– Procesa
– Almacena
– Comunica
• Un actor actúa frente al estímulo de un mensaje. Axiomas:
– Crear nuevos actores
– Enviar mensajes a actores conocidos
– Cambiar su comportamiento para el siguiente mensaje
• Desacoplar el mensajero del receptor, fue el avance fundamental
del modelo
– Todo comunicación es asíncrona
– El receptor es identificado a través de una dirección
6. El modelo de actor
• Un actor es una abstracción de concurrencia
– Threads
– Locks
– Un mensaje a la vez
• Una solución para el desafío de la programación multicore
• Comunicación asíncrona a través de mensajes
• Como la comunicación es asíncrona, poseen un mailbox para recibir
mensajes
• Pattern Matching de mensajes
• Un actor mantiene su estado de manera interna
– Estado cambiable (Mutable state) es privado
– Estado compartido no puede ser cambiado (immutable shared state)
– Puede cambiar su estado a través de mensajes
8. Akka es un framekork y un ambiente de ejecución, para desarrollar
aplicaciones con alta concurrencia, distribuidas, resilientes y
basadas en mensajes, en la JVM
12. Receta para el éxito
• Interfaces minimalistas (Cantidad y simplicidad)
• Especificación rigurosa de la Semántica
• Full TCK (Technology Compatibility Kit) para verificar
las implementaciones
• Completa libertada para implementar las API’s en
distintos lenguajes.
12
13. Oferta y Demanda
• Los items de datos fluyen río abajo
• La demanda fluye contra la corriente
• Los items de datos solo fluyen cuando existe
Demanda
– Es el recepor quien controla la tasa de emisión de datos
– La cantidad de datos en transmisión está limitada por la demanda enviada.
13
Publisher Subscriber
data
demanda
14. Push–Pull dinámico
• “push” cuando el consumidor es más rápido
• “pull” cuando el productor es más rápido
• Puede haber comportamiento push/pull
• Se aglutina demanda y eso permite algutinar datos
14
Publisher Subscriber
data
demand
15. Back-Pressure se contagia
• C es lento
– B debe bajar su velocidad de producción
• A debe bajar su velocidad de producción
15
CA B
17. Reactive Streams
• Flujo de datos asíncrono, no bloqueante.
• Flujo de demanda asíncrono y no bloqueante. ¡
• Mínima coordinación y contención coordination and
contention
• El paso de mensajes permite la distribución
• A través de
aplicaciones, nodos, CPUs, threads, actors
17
19. Diseño de la API
• Objetivos:
– Composición al extremo
– Modelo que coloca límites al procesamiento
• Consecuencias:
– Streams Inmutables y reusables
– Paso de materialización explícito (No hay magia)
19
http://doc.akka.io/docs/akka-stream-and-http-experimental/1.0/stream-design.html
20. Materialización
• Akka Streams separa el qué del cómo
–Utilizando un DSL se declaran Source/Flow/Sink DSL para crear
un blueprint o esquema
–ActorMaterializer los transforma en Actores al ejecutar
• Esto permite varias estrategias alternativas para la
materialización
–Optimización
–Verificación/ Validación
–Deployment en Cluster
• Solo actores Akka por ahora!
20
Carl Hewitt, Lenguaje Planner, pero hoy más que nunca reconocido por el modelo de actores
the crucial addition is to make the exchange bidirectional, and explicitly so
message-passing between publisher and subscriber allows asynchronous non-blocking back pressure