36
DOTNETMÁLAGA #dotnetmalaga @dotnetmalaga Organiza Colaboran SALA PEQUEÑA

dotnetMalaga 2015 - Introducción a Akka.Net

Embed Size (px)

Citation preview

Page 1: dotnetMalaga 2015 - Introducción a Akka.Net

DOTNETMÁLAGA

#dotnetmalaga

@dotnetmalaga

Organiza Colaboran

SALA PEQUEÑA

Page 2: dotnetMalaga 2015 - Introducción a Akka.Net

akka.net

30 Mayo 2015 #dotnetmalaga

Javier García [email protected]@ndsrf

Adaptación del original de Roger Alsing - https://github.com/rogeralsing

Page 3: dotnetMalaga 2015 - Introducción a Akka.Net

Sistemas clásicos

EF

DAO

BLL

Servicio

Entidad

Component/Object

Page 4: dotnetMalaga 2015 - Introducción a Akka.Net

Server

Page 5: dotnetMalaga 2015 - Introducción a Akka.Net

CPU

Page 6: dotnetMalaga 2015 - Introducción a Akka.Net
Page 7: dotnetMalaga 2015 - Introducción a Akka.Net

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 24 4

8 8

16 16

32 32

64

200 300 400500

1000

1800

2530

3200

3600

2200

2930 30003200

3330 33303150 3200 3150 3150 3150

MHz y Número de Cores por año

Mhz Cores

Page 8: dotnetMalaga 2015 - Introducción a Akka.Net

ServicioPetición

Page 9: dotnetMalaga 2015 - Introducción a Akka.Net

ServicioPetición

Page 10: dotnetMalaga 2015 - Introducción a Akka.Net

ServicioPetición

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

Page 11: dotnetMalaga 2015 - Introducción a Akka.Net

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

ServicioPetición

Page 12: dotnetMalaga 2015 - Introducción a Akka.Net

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

Thread 1

Thread 2

Condiciones de ”carrera”

Page 13: dotnetMalaga 2015 - Introducción a Akka.Net

Scale out”cuando una CPU sola no es suficiente”

Page 14: dotnetMalaga 2015 - Introducción a Akka.Net

Sistemas reactivos

Page 15: dotnetMalaga 2015 - Introducción a Akka.Net

Tecnologías clásicas

Elasticity:

Scale out:WCFWeb APIMSMQ

Scale up:Parallel LinqTPL – async awaitThreadsComplejo, lento... un coñazo

Page 16: dotnetMalaga 2015 - Introducción a Akka.Net

akka.net

Page 17: dotnetMalaga 2015 - Introducción a Akka.Net

akka.net

Scale up:Akka.Actor

Scale out:Akka.Remote

Elasticity:Akka.Cluster

Page 18: dotnetMalaga 2015 - Introducción a Akka.Net

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: dotnetMalaga 2015 - Introducción a Akka.Net

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: dotnetMalaga 2015 - Introducción a Akka.Net

Internet of Things

Page 21: dotnetMalaga 2015 - Introducción a Akka.Net

Modelo de ActoresTres 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

Page 22: dotnetMalaga 2015 - Introducción a Akka.Net

Event-driven thread

ActorRefActorRef

Actor

State

Supervision

Children

Mailbox

Behavior

TransportTell/Ask

Page 23: dotnetMalaga 2015 - Introducción a Akka.Net

Th

read

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

Actor3 Actor4

Actor2

Actor1

Actor3

Actor2

Time

Page 24: dotnetMalaga 2015 - Introducción a Akka.Net

Akka.Actor

Page 25: dotnetMalaga 2015 - Introducción a Akka.Net

public class StringActor : ReceiveActor

{

public StringActor()

{

Receive<string>(s => s.StartsWith(”Malaga"), s =>

{

// handle string

Become(Malagueno);

});

Receive<string>(s => s.StartsWith(”Sevilla"), s =>

{

// handle string

Become(Sevillano);

});

}

public Malagueno()

{ // message processing here }

public Sevillano()

{ // message processing here }

}

Pattern matching & Estado

Page 26: dotnetMalaga 2015 - Introducción a Akka.Net

Manejo de errores en Java, C# o C

Page 27: dotnetMalaga 2015 - Introducción a Akka.Net

Servicio(actors)

Petición

Error (fallo general no controlado)

Supervisor(actor)

Manejo de errores

Respuesta

Error (Validaciones)Cliente

Supervisión

Page 28: dotnetMalaga 2015 - Introducción a Akka.Net

Akka.Routing

Page 29: dotnetMalaga 2015 - Introducción a Akka.Net

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

Routers

Page 30: dotnetMalaga 2015 - Introducción a Akka.Net

RoundRobinRouter

12

1

2

3

34

4

Router

Routee1

Routee2

Routee3

Scale up!

.. Or down!

Page 31: dotnetMalaga 2015 - Introducción a Akka.Net

RoundRobinRouter

Router

Routee1

Routee2

Routee3

Routee1

Routee2

Routee3

Routee1

Routee2

Routee3

Scale up!

Scale out!

Remote1

Remote2

Remote3

Router

Router

Router

Page 32: dotnetMalaga 2015 - Introducción a Akka.Net

Caso de uso

http://idorun.org

Page 33: dotnetMalaga 2015 - Introducción a Akka.Net

Demo 2: Análisis de emociones en hashtags de Twitter

Más hilos con actores...

Page 34: dotnetMalaga 2015 - Introducción a Akka.Net

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 35: dotnetMalaga 2015 - Introducción a Akka.Net

Muchas gracias por la atención

Javier García [email protected]

@ndsrf

#dotnetmalaga

Page 36: dotnetMalaga 2015 - Introducción a Akka.Net

Algunos enlaces...

Javier García [email protected]

@ndsrf

#dotnetmalaga

Introduction to Service Fabric design patternsA year into Akka.NetReal time marketing automation with Akka