DOTNETMÁLAGA
#dotnetmalaga
@dotnetmalaga
Organiza Colaboran
SALA PEQUEÑA
akka.net
30 Mayo 2015 #dotnetmalaga
Javier García [email protected]@ndsrf
Adaptación del original de Roger Alsing - https://github.com/rogeralsing
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 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
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 1
Thread 2
Condiciones de ”carrera”
Scale out”cuando una CPU sola no es suficiente”
Sistemas reactivos
Tecnologías clásicas
Elasticity:
Scale out:WCFWeb APIMSMQ
Scale up:Parallel LinqTPL – async awaitThreadsComplejo, lento... un coñazo
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
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
Event-driven thread
ActorRefActorRef
Actor
State
Supervision
Children
Mailbox
Behavior
TransportTell/Ask
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
Akka.Actor
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
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
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
Caso de uso
http://idorun.org
Demo 2: Análisis de emociones en hashtags de Twitter
Más hilos con 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
Algunos enlaces...
Javier García [email protected]
@ndsrf
#dotnetmalaga
Introduction to Service Fabric design patternsA year into Akka.NetReal time marketing automation with Akka
Top Related