Codemotion 2015 - Akka.NET - EL modelo de actores

Post on 13-Apr-2017

488 views 0 download

Transcript of 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

Sistemas clásicos

EF

DAO

BLL

Servicio

Entidad

Component/Object

Server

CPU

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

ServicioPetición

ServicioPetición

ServicioPetición

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

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

ServicioPetición

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

Thread 1Thread 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 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

Event-driven thread

ActorRefActorRef

Actor

State

Supervision

Children

Mailbox

Behavior

TransportTell/Ask

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

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

12

1

2

3

34

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.TestKitAkka.DI

Akka.LoggerAkka.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 Magnajgarciamagna@sequel.com

@ndsrf

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

Extra Llamar a actores desde fuera de un sistema de actores