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

Codemotion 2015 - Akka.NET - EL modelo de actores

Embed Size (px)

Citation preview

Page 1: Codemotion 2015 - Akka.NET - EL modelo de actores

Akka.Net: El modelo de programación con actoresJavier García Magna @ndsrfMADRID · NOV 27-28 · 2015

Page 2: Codemotion 2015 - Akka.NET - EL modelo de actores

Sistemas clásicos

EF

DAO

BLL

Servicio

Entidad

Component/Object

Page 3: Codemotion 2015 - Akka.NET - EL modelo de actores

Server

Page 4: Codemotion 2015 - Akka.NET - EL modelo de actores

CPU

Page 5: Codemotion 2015 - Akka.NET - EL modelo de actores
Page 6: Codemotion 2015 - Akka.NET - EL modelo de actores

Ley de Moore

Hemos llegado al límite de MHz para un procesadorAsí que ahora los ponemos juntitos y los llamamos ”cores”

1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 20160

500

1000

1500

2000

2500

3000

3500

4000

0

10

20

30

40

50

60

70

1 1 1 1 1 1 1 1 1 2 2 4 48 8

16 16

32 32

64

200 300 400 500

1000

1800

2530

3200

3600

2200

2930 30003200 3330 3330

3150 3200 3150 3150 3150

MHz y Número de Cores por año

Mhz Cores

Page 7: Codemotion 2015 - Akka.NET - EL modelo de actores

ServicioPetición

Page 8: Codemotion 2015 - Akka.NET - EL modelo de actores

ServicioPetición

Page 9: Codemotion 2015 - Akka.NET - EL modelo de actores

ServicioPetición

MultithreadingLos sistemas con multithreading nos permiten aprovechar más de un core al mismo tiempo

Page 10: Codemotion 2015 - Akka.NET - EL modelo de actores

MultithreadingLos sistemas con multithreading nos permiten aprovechar más de un core al mismo tiempo

ServicioPetición

Page 11: Codemotion 2015 - Akka.NET - EL modelo de actores

if (account1.Balance > amount) { account1.Withdraw(amount) account2.Deposit(amount) }

Thread 1Thread 2

Condiciones de ”carrera”

Page 12: Codemotion 2015 - Akka.NET - EL modelo de actores

Scale out”cuando una CPU sola no es suficiente”

Page 13: Codemotion 2015 - Akka.NET - EL modelo de actores

Sistemas reactivos

Page 14: Codemotion 2015 - Akka.NET - EL modelo de actores
Page 15: Codemotion 2015 - Akka.NET - EL modelo de actores
Page 16: Codemotion 2015 - Akka.NET - EL modelo de actores

akka.net

Page 17: Codemotion 2015 - Akka.NET - EL modelo de actores

akka.net

Scale up:Akka.Actor

Scale out:Akka.Remote

Elasticity:Akka.Cluster

Page 18: Codemotion 2015 - Akka.NET - EL modelo de actores

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?

Page 19: Codemotion 2015 - Akka.NET - EL modelo de actores

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?

Page 20: Codemotion 2015 - Akka.NET - EL modelo de actores

Internet of Things

Page 21: Codemotion 2015 - Akka.NET - EL modelo de actores

http://idorun.org

Page 22: Codemotion 2015 - Akka.NET - EL modelo de actores

Modelo de ActoresTres axiomas:Enviar – Un actor puede enviar mensajes a otros actoresCrear – Un actor puede crear otros actoresEstado – 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

Page 23: Codemotion 2015 - Akka.NET - EL modelo de actores

Event-driven thread

ActorRefActorRef

Actor

State

Supervision

Children

Mailbox

Behavior

TransportTell/Ask

Page 24: Codemotion 2015 - Akka.NET - EL modelo de actores

Thre

ad P

ool

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 mensaje2.5 millones de actores por GB de memoria

Actor3 Actor4

Actor2

Actor1

Actor3

Actor2

Time

Page 25: Codemotion 2015 - Akka.NET - EL modelo de actores

Akka.Actor

Page 26: Codemotion 2015 - Akka.NET - EL modelo de actores

Pattern matching & Estado

Page 27: Codemotion 2015 - Akka.NET - EL modelo de actores

Manejo de errores en Java, C# o C

Page 28: Codemotion 2015 - Akka.NET - EL modelo de actores

Servicio(actors)

Petición

Error (fallo general no controlado)

Supervisor(actor)

Manejo de errores

Respuesta

Error (Validaciones)Cliente

Supervisión

Page 29: Codemotion 2015 - Akka.NET - EL modelo de actores

Akka.Routing

Page 30: Codemotion 2015 - Akka.NET - EL modelo de actores

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

Page 31: Codemotion 2015 - Akka.NET - EL modelo de actores

RoundRobinRouter

12

1

2

3

34

4

Router

Routee1

Routee2

Routee3

Scale up!

.. Or down!

Page 32: Codemotion 2015 - Akka.NET - EL modelo de actores

RoundRobinRouter

Router

Routee1

Routee2

Routee3

Routee1

Routee2

Routee3

Routee1

Routee2

Routee3

Scale up!

Scale out!

Remote1

Remote2

Remote3

Router

Router

Router

Page 33: Codemotion 2015 - Akka.NET - EL modelo de actores

Demo: Análisis de emociones en hashtags de Twitter

Más hilos con actores...

Page 34: Codemotion 2015 - Akka.NET - EL modelo de actores

Akka.Cluster

Page 35: Codemotion 2015 - Akka.NET - EL modelo de actores

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

Page 36: Codemotion 2015 - Akka.NET - EL modelo de actores

Akka.Persistence

Page 37: Codemotion 2015 - Akka.NET - EL modelo de actores

Persist(elEvento, manejador);

SaveSnapShot(miEstado);

Page 38: Codemotion 2015 - Akka.NET - EL modelo de actores

Akka.TestKitAkka.DI

Akka.LoggerAkka.Monitoring

Page 39: Codemotion 2015 - Akka.NET - EL modelo de actores

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

Page 40: Codemotion 2015 - Akka.NET - EL modelo de actores

Muchas gracias por la atención

Javier García [email protected]

@ndsrf

Basado en el original de Roger Alsing http://rogeralsing.com

Page 41: Codemotion 2015 - Akka.NET - EL modelo de actores

Extra Llamar a actores desde fuera de un sistema de actores

Page 42: Codemotion 2015 - Akka.NET - EL modelo de actores
Page 43: Codemotion 2015 - Akka.NET - EL modelo de actores
Page 44: Codemotion 2015 - Akka.NET - EL modelo de actores
Page 45: Codemotion 2015 - Akka.NET - EL modelo de actores