Codemotion 2015 - Akka.NET - EL modelo de actores

JavierGarcaMagna 746 views 45 slides Nov 28, 2015
Slide 1
Slide 1 of 45
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45

About This Presentation

AKKA.NET es un modelo de actores para la plataforma .NET, un port del ya existente para la JVM.


Slide Content

Akka.Net : El modelo de programación con actores Javier García Magna @ndsrf MADRID · NOV 27-28 · 2015

Sistemas clásicos EF DAO BLL Servicio Entidad Component/ Object

Server

CPU

Ley de Moore Hemos llegado al límite de MHz para un procesador Así que ahora los ponemos juntitos y los llamamos ”cores”

Servicio Petición

Servicio Petición

Servicio Petición Multithreading Los sistemas con multithreading nos permiten aprovechar más de un core al mismo tiempo

Multithreading Los sistemas con multithreading nos permiten aprovechar más de un core al mismo tiempo Servicio Petición

if (account1.Balance > amount) { account1.Withdraw(amount) account2.Deposit(amount) } Thread 1 Thread 2 Condiciones de ”carrera”

Scale out ”cuando una CPU sola no es suficiente”

Sistemas reactivos

akka.net

akka.net Scale up : Akka.Actor Scale out : Akka.Remote Elasticity : Akka.Cluster

Scale-up y scale-out debería ser lo mismo Queremos ejecutar código en algún sitio : un core, una máquina, un cluster... Con una sola tecnología debería de bastar, ¿no?

Scale-up y scale-out debería ser lo mismo Queremos ejecutar código en algún sitio : un core, una máquina, un cluster... Con una sola tecnología debería de bastar, ¿no?

Internet of Things

http://idorun.org

Modelo de Actores Tres axiomas: Enviar – Un actor puede enviar mensajes a otros actores Crear – Un actor puede crear otros actores Estado – Los actores tienen estado y pueden responder a mensajes de forma distinta según su estado ”An island of sanity in a sea of concurrency ” ” Shared nothing ”, ”Black box ” ” Location transparent”, ” Distributable by design” Akka.Net & Azure Service Fabric & Reactive Ext

Event-driven thread ActorRef ActorRef Actor State Supervisio n Children Mailbox Behavior Transport Tell /Ask

Thread Pool Modelo de actores Actor1 Actor1 Actor2 Actor2 Actor3 Actor4 Actor4 Actor1 Más baratos que los threads, con mucho menos context switching Sólo usan CPU cuando procesan un mensaje 2.5 millones de actores por GB de memoria Actor3 Actor4 Actor2 Actor1 Actor3 Actor2 Time

Akka.Actor

Pattern matching & Estado

Manejo de errores en Java, C# o C

Servicio (actors) Petición Error (fallo general no controlado) Supervisor (actor) Manejo de errores Respuesta Error (Validaciones) Cliente Supervisión

Akka.Routing

Un router delega los mensajes a otros actores que harán el trabajo Hay varias estrategias que puedes usar: BroadcastRouter RoundRobinRouter ConsistentHashRouter ScatterGatherFirstCompletedRouter SmallestMailboxRouter TailChoppingRouter RandomRouter Routers

RoundRobinRouter 1 2 1 2 3 3 4 4 Router Routee1 Routee2 Routee3 Scale up ! .. Or down!

RoundRobinRouter Router Routee1 Routee2 Routee3 Routee1 Routee2 Routee3 Routee1 Routee2 Routee3 Scale up ! Scale out ! Remote1 Remote2 Remote3 Router Router Router

Demo: Análisis de emociones en hashtags de Twitter Más hilos con actores...

Akka.Cluster

Extensión de Akka.Remote para crear un clúster elástico, tolerante a fallos, descentralizado, peer to peer. Seed nodes Cluster events Roles Clustered routers Pool / Group Añade routees cuando hay nuevos nodos en el cluster Cluster

Akka.Persistence

Persist ( elEvento , manejador); SaveSnapShot ( miEstado );

Akka.TestKit Akka.DI Akka.Logger Akka.Monitoring

Conclusiones Una herramienta más que puedes usar Multi hilo con estado Si no hay estado entonces usa futuros ( Task < TResult >) Location transparency – muy útil Clustering da flexibilidad

Muchas gracias por la atención Javier García Magna [email protected] @ndsrf Basado en el original de Roger Alsing http://rogeralsing.com

Extra  Llamar a actores desde fuera de un sistema de actores