Codemotion 2015 - Akka.NET - EL modelo de actores
-
Upload
javier-garcia-magna -
Category
Technology
-
view
491 -
download
0
Transcript of Codemotion 2015 - Akka.NET - EL modelo de actores
![Page 1: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/1.jpg)
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](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/2.jpg)
Sistemas clásicos
EF
DAO
BLL
Servicio
Entidad
Component/Object
![Page 3: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/3.jpg)
Server
![Page 4: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/4.jpg)
CPU
![Page 5: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/5.jpg)
![Page 6: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/6.jpg)
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](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/7.jpg)
ServicioPetición
![Page 8: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/8.jpg)
ServicioPetición
![Page 9: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/9.jpg)
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](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/10.jpg)
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](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/11.jpg)
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](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/12.jpg)
Scale out”cuando una CPU sola no es suficiente”
![Page 13: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/13.jpg)
Sistemas reactivos
![Page 14: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/14.jpg)
![Page 15: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/15.jpg)
![Page 16: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/16.jpg)
akka.net
![Page 17: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/17.jpg)
akka.net
Scale up:Akka.Actor
Scale out:Akka.Remote
Elasticity:Akka.Cluster
![Page 18: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/18.jpg)
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](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/19.jpg)
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](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/20.jpg)
Internet of Things
![Page 21: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/21.jpg)
http://idorun.org
![Page 22: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/22.jpg)
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](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/23.jpg)
Event-driven thread
ActorRefActorRef
Actor
State
Supervision
Children
Mailbox
Behavior
TransportTell/Ask
![Page 24: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/24.jpg)
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](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/25.jpg)
Akka.Actor
![Page 26: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/26.jpg)
Pattern matching & Estado
![Page 27: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/27.jpg)
Manejo de errores en Java, C# o C
![Page 28: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/28.jpg)
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](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/29.jpg)
Akka.Routing
![Page 30: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/30.jpg)
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](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/31.jpg)
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](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/32.jpg)
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](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/33.jpg)
Demo: Análisis de emociones en hashtags de Twitter
Más hilos con actores...
![Page 34: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/34.jpg)
Akka.Cluster
![Page 35: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/35.jpg)
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](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/36.jpg)
Akka.Persistence
![Page 37: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/37.jpg)
Persist(elEvento, manejador);
SaveSnapShot(miEstado);
![Page 38: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/38.jpg)
Akka.TestKitAkka.DI
Akka.LoggerAkka.Monitoring
![Page 39: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/39.jpg)
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](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/40.jpg)
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](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/41.jpg)
Extra Llamar a actores desde fuera de un sistema de actores
![Page 42: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/42.jpg)
![Page 43: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/43.jpg)
![Page 44: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/44.jpg)
![Page 45: Codemotion 2015 - Akka.NET - EL modelo de actores](https://reader035.fdocuments.co/reader035/viewer/2022062412/589a94761a28abae648b5cdd/html5/thumbnails/45.jpg)