DEV012 - AKKA.NET
Multithreading & Distributed
Programming Made Easy
STEFANO DEL FURIA
IIS ROSSELLI – STOA
DELFURIA@GMAIL.COM
@STENODELFO
WPC2017 1
#DOTNETDAY2018 2
Enthusiastic adopter of C# and .NET since 2001
Computer Science Teacher @ IIS-Rosselli
Founder of EduDotNet.It community
Software Architect @ STOA
Technical writer
Drummer
WPC2017 2
•Multithreading
•Actor Model & AKKA.Net
•Actor & Messages
•ActorSystem
•Resilienza
•Persistenza
•Delivery
•Remoting
•Scale Up/Scale Out
•Testing
•Anti-Pattern
•Varie ed eventuali 
WPC2017 3
WPC2017 4
•Olivetti Elea 9003/02(1960)
•33 KW
•20 KB ram
•20 MB Nastro magnetico
•No OS, No Schermo
•3 Attività contemporanee
•Bibbiena (AR)
•www.elea9003.it
WPC2017 5
WPC2017 6
WPC2017 7
Ti studi a cosa serve il Multithread …
• Avere una UI reattiva
• Incrementare le prestazioni
• Operazioni concorrenti
• CPU (Core)
• Input / Output
WPC2017 8
… e quali siano i relativi pattern !!!
• Fire & Forget
• Polling
• Wait for Completion
• Completion Notification
WPC2017 9
10/50
Perché poi arriva un cliente …
• Presse n. 153
• Robot n. 1303
• Stazioni di
verniciatura
n. 8
… che lo vuole distribuito e pure reattivo !!!
“Un giorno andrò a
vivere in Teoria …
… perché in Teoria
va tutto bene”
WPC2017 12
Ma invece scopri che in Pratica …
• La programmazione Multithread è difficile
• Scrivere codice è MOLTO complicato
• Il tempo di progettazione delle applicazioni aumenta
• I pattern paralleli sono difficili da implementare
WPC2017 13
… ed in più  !!!
• L’Overhead può ridurre le prestazioni
• Troppe “potenziali” problematiche
• Races, deadlocks, livelocks, lock convoys, cache coherency
overheads, lost event notifications, broken serializability, priority
inversion …
WPC2017 14
Lassa Gi’
WPC2017 15
(Modo di dire perugino: ”las-sa-gì”)
Invito a rinunciare a svolgere un’attività
a causa della sua impossibilità di realizzazione
Es: «Ci provo con quella ragazza ? 😍»
«Lassa Gi’ 😒»
WPC2017 16
WPC2017 17
WPC2017 18
Shared Data Structure
WPC2017 19
WPC2017 20
“Actor Model studiare tu devi !!!”
WPC2017 21
Actor Model
• Evita che i thread collidano sui dati
• Utilizza dei task leggeri
• Scambio di messaggi in maniera asincrona
WPC2017 22
Actor Model
• 1973 Carl Hewitt definisce l’Actor model
• È un modello concettuale
• Ha a che fare con la computazione concorrente
• Definisce regole generali per come debbano interagire i
componenti di un sistema e più sistemi tra di loro.
• Origine in Erlang
WPC2017 23
Actor Model
Semplifica la realizzazione di sistemi:
• Scalabili
• Concorrenti
• Elevate prestazioni
• Bassa latenza
WPC2017 24
Ambiti applicativi
• Applicazioni transazionali (Finanziarie, social media, telecom)
• Batch (Divisione del carico di lavoro tra più Actor)
• Microservices (REST, GraphQL, System integration)
• Comunicazioni (Chat, notifiche Real time)
• Gioco (Multiplayer)
• Elaborazione numerica (Business intelligence, data mining)
• IoT (Ingestion del flusso di dati)
WPC2017 25
AKKA.NET
Un’implementazione in .NET dell’Actor Model
• Alte prestazioni (3.3M messaggi al secondo)
• Molto leggera (ogni Actor occupa 400byte)
• Akka TestKit
• Akka Persistence
• Akka Logger
WPC2017 26
• Akka DI
• Akka Remote
• Akka Cluster
Cos’è un Actor
• Tutto è un Actor
• È “lazy-by-design”
• Compiti piccoli e ben definiti
• Unità computazionale primitiva
• Ogni istanza ha un indirizzo (reference)
• Possibilità di esecuzione locale o distribuita
• Comunica con altri Actor via messaggi asincroni
WPC2017 27
Le 3 cose che può fare un Actor
• Ricevere ed elaborare un messaggio
• Creare altri Actor
• Inviare messaggi agli altri Actor (compreso se stesso)
WPC2017 28
Come è fatto un Actor
• Mailbox in ingresso
• Comportamento
• Stato
• Strategia di Supervisione
• Gerarchia di “figli”
• Processa sempre un
messaggio alla volta
WPC2017 29
Gli Actor condividono i thread
WPC2017 30
Actor & Messaggi
WPC2017 31
Cos’è un Messaggio
• Classe POCO
• Le istanze dei messaggi “dovrebbero” essere
immutabili
WPC2017 32
Gerarchia degli Actor (system context)
WPC2017 33
Actor 101
• Definizione dei ReceiveActor
• Logica di comportamento nel costruttore
• Definizione dei UntypedActor
• Logica di comportamento nel metodo OnReceive()
• Creazione dell’ActorSystem
• Creazione degli Actor
• Contenuto di un messaggio
• Utilizzo di Props
WPC2017 34
Actor 101
• Invio di messaggi ad un Actor
• Tell()
• Forward()
• Terminare un Actor
• Stop()
(Termina l’Actor immediatamente)
• PoisonPill()
(Termina l’Actor dopo l’elaborazione del messaggio corrente)
WPC2017 35
DEMO 1-2:
Akka.NET for dummies
WPC2017 36
ActorSystem
• Centro di controllo del sistema di Actor
• Evitare la creazione di più Actor System
• Oggetti “pesanti”
• Gestione più complessa
• Implementare un ”proprio” ActorSystem
• Singleton
• Configurazione di default
WPC2017 37
Actor System
WPC2017 38
Configurazione
• HOCON (Human-Optimized Config Object Notation)
• È un formato di configurazione estensibile
• Configura tutto (logging, networking, serialization, etc)
• Utilizzabile anche mediante
• App.config
• Web.config
WPC2017 39
Logging (Log su file ?… sul serio ?? .. nel 2017 ???)
• Utilizzare il meccanismo di Akka.Net
• Facile da implementare
• Evitare log sincrono
• Disabilitare la modalità “Debug” in produzione
WPC2017 40
Actor Reference, Path e Address
WPC2017 41
Actor Reference, Path e Address
WPC2017 42
Indirizzo univoco e globale
WPC2017 43
Ricapitolando …
• Implementare un Actor System gerarchico
• Evitare gerarchie FLAT con
Actor tutti creati allo stesso livello
• Implementare delle classi “base” per messaggi,
logging, supervisione, ecc.
WPC2017 44
DEMO 3-4:
Actor everywhere
WPC2017 45
“Let-it-crash”
WPC2017 46
WPC2017 47
WPC2017 48
Ciclo di vita di un Actor
Supervisione
• Resume
L’Actor viene mantenuto e lo stato viene preservato
• Restart
L’Actor viene ricreato e lo stato viene cancellato
• Stop
L’Actor viene terminato
• Escalate
L’Actor inoltra il problema al livello superiore e
successivamente termina se stesso
WPC2017 49
OneForOneStrategy
WPC2017 50
AllForOneStrategy
WPC2017 51
DEMO 5:
Supervisione
WPC2017 52
BackOff Supervisor
Certe volte il fallimento di un Actor dipende da una
risorsa esterna a cui si deve dare il tempo di “ripartire”
• Riavvio ritardato
• Strategia esponenziale (3, 6, 12, 24, …)
WPC2017 53
DEMO 6:
BackOff Supervisor
WPC2017 54
Persistenza
• Memorizzazione su di uno storage
• Event Source
• Snapshot
• Reidrata lo stato dell’Actor
• Dopo un crash
• Per qualsiasi ragione
WPC2017 55
Persistenza
• In-memory + files locali
• Microsoft SQL Server
• Azure tables
• PostgreSql
• Cassandra
WPC2017 56
• MySql
• MongoDB
• Redis
• Sqlite
• Oracle
DEMO 7:
Persistenza
WPC2017 57
Message Delivery
• Non viene garantita la consegna del messaggio
• Usa politica “At Most Once”
• Alternative
• At Least Once
• Exactly Once
WPC2017 58
WPC2017 59
AtLeastOnceDeliveryActor
WPC2017 60
DEMO 8:
Delivery
WPC2017 61
Remoting
• Il componente più importante di AKKA.NET
• Implementa un ActorSystem tra più processi
distribuiti in rete
WPC2017 62
Remoting
• Peer-to-peer
• Location transparency
• Remote addressing , messaging, deployment
• Multiple network transports (in verità solo TCP)
• Attenzione !!!
• I messaggi vengono serializzati
• Attenzione alla dimensione del payload
WPC2017 63
DEMO:
Remoting
WPC2017 64
Scalabilità
WPC2017 65
Scale UP
• Router
• Round Robin
• Broadcast
• Random
• Consistent Hashing (Cluster)
• Smallest Mailbox
• …
WPC2017 66
Scale OUT
WPC2017 67
Scale OUT
• Clustering
• Più nodi di un ActorSystem
agiscono come fosse un unico
nodo
• Alta disponibilità
• Alte prestazioni
WPC2017 68
DEMO 9:
Routing
WPC2017 69
Testing
• Akka.TestKit.*
• NUnit
• XUnit
• VsTest
• TestActorSystem
• È l’Actor System utilizzato da TestKit e viene ricreato ogni volta che
si esegue un test
• TestActor
• È il mittente implicito di tutti i messaggi che verrano inviati agli attori
WPC2017 70
WPC2017 71
Cosa si può testare
• ExpectMsg
• ExpectNoMsg
• Within
• AwaitAssert
• TestActorRef
• TestProbe
WPC2017 72
DEMO:
Testing
WPC2017 73
Anti-Pattern
• Request / Respnse
• Async / Await
Akka.Interfaced (0.5.x)
https://github.com/SaladLab/Akka.Interfaced
WPC2017 74
DEMO:
Anti-Pattern Demo
WPC2017 75
Ed altro ancora
• Event-stream
• Networking
• Finite-State-Machine
• Circuit Breaker
• Scheduler
WPC2017 76
Riferimenti
WPC2017 Demo
https://github.com/delfuria/WPC2017-AKKA.NET
Akka .NET
http://getakka.net/
Akka Bootcamp https://github.com/petabridge/akka-
bootcamp
Gitter
https://gitter.im/akkadotnet/akka.net
WPC2017 77
Don’t worry...
...be Akka.net
WPC2017 78

Akka.net & Actor Model