cqrs ed event sourcing su windows azure: applicazioni distribuite, scalabilità e security
DESCRIPTION
Video del workshop: https://vimeo.com/album/2334363TRANSCRIPT
CQRS ed Event Sourcing su Windows
AzureApplicazioni Distribuite, Scalabilità e Security
…oh my god… <cit.>
Alessandro MelchioriCodicePlastico
Architect & Partner
//blog.codiceplastico.com/melkio
@amelchiori
Mauro ServientiManaged Designs
Technical Advisor & Partner
//milestone.topics.it
//blogs.ugidotnet.org/topics
@mauroservienti
Introduzione a Windows Azure
…due parole…due..
Che cosa è
PaaS vs. IaaSThe big challenge
Boot
IaaS• Build app
• Set up account
• For each desired instance:• Install/configure OS• Install desired Ruby version, runtime• Install Rails and other libraries/gems• Install/configure app server• Install/configure HTTP server• Install/configure load balancer• Install/configure other components (DB, cache)• Debug integration of stack• Install/configure application on stack
• Get instances working together
PaaS• Build app
• Set up PaaS account
• Click several configuration choices
• Click “Boot”
Update
IaaS• Repeat items as above, per instance
• Get instances working together
PaaS• “Update Instances”
Scale
IaaS• Do as install for new instances
• Reconfigure app servers, load balancers, DB, etc.
• Ensure consistent stacks
• Get instances working together
PaaS• Add instance(s)
Scalabilità, Scalabilità…
…e ancora scalabilità
«orizzontale»…is the word…
Tightly Coupled
Store Front End
Drivers
Shipping Service
Tracking
Store Front End Shipping Service
Drivers
Tracking
Tightly Coupled
Store Front End Shipping Service
Store Front End
Drivers
Shipping Service
Tracking
Order Queue
Loosely Coupled
Store Front End Shipping Service
Store Front End Order Queue Shipping Service
Drivers
Tracking
Loosely Coupled
Order QueueStore Front End Shipping Service
Store Front End Order Queue Shipping Service
Drivers
Tracking
Loosely Coupled
Order QueueStore Front End Shipping Service
Store Front End Order Queue
Tracking
Tracking
Shipping Service
Loosely Coupled
Order QueueStore Front End Shipping Service
ma...questa cosa non mi è nuova...
• In «domain driven design» abbiamo dei concetti paralleli• Bounded context• Domain events
Le funzionalità erogate
Quello di cui parleremo oggi…
• Service bus:• Notifcation Hubs;
• Worker Role;• Web Role;• Windows Azure ACS;
È importante capire anche cosa sono:• Availability Set• Virtual Network
Service Bus
• È un «message broker»;• Altamente scalabile e performante;• Può essere sfruttato anche da applicazioni on premise:• con connettività verso Azure;
• Permette il disaccoppiamento totale tra i partecipanti:• A patto che tutti conoscano il postino;• A patto che tutti conoscano, o siano in grado di interpretare, la lingua parlata;
Lock-in…è un problema?
Lock-in
• È vero che se scegliamo come piattaforma Azure poi non possiamo, o è molto difficile, cambiare?• Quale è il «livello» di lock-in dei vari servizi?• Web Role -> è un’applicazione MVC, punto;• Worker Role -> l’entry point è strettamente legate ad Azure;• Service Bus -> è un servizio di Azure, ma usando un toolkit, come
NServiceBus, è del tutto trasparente;• Tutti: i settings, che però sono facilmente nascondibili dietro qualcosa di
rimpiazzabile a caldo;• ACS: non c’è alternativa, ma nulla ci vieta, visto il costo irrisorio, di lasciare
quello su Azure;
Visual Studio: Windows Azure SDKBreve corso di sopravvivenza all’emulatore…
DemoWorker Role, Web Role, l’emulatore e i tool
I dialetti del ServiceBus
scalare comunicando
Service Bus queue
QueueS R
S
S
R
R
Consumer “paralleli”Ogni messaggio è consumato da un solo consumer
RR
Service Bus topic
S
S
S
Topic
SubsR
R
R
Ogni subscription può essere “filtrata” in base a proprietà del messaggioOgni messaggio pubblicato è disponibile per ogni subscription
Perché la comunicazione è un problema…Topologia di un data-center
I «data center» di Azure
• Siamo ospitati in una macchina virtuale, sempre;• Non abbiamo controllo sulla topologia di rete in cui siamo deployati, se non in
minima parte con:• AvailabilitySet: vogliamo che tutti i nostri servizi siano nello stesso Set;
• ha lo scopo di contenere costi e latenza;• Virtual Network: reti virtuali che ci permettono di collegare qualsiasi cosa con qualsiasi
cosa a prescindere da dove stia;
• Davanti ad ogni servizio ci sono i Load Balancer di Azure, non è quindi detto che i round trip siano concessi;• Risulta quindi estremamente poco probabile che due o più servizi possano
comunicare tra loro come lo farebbero on premise dove abbiamo pieno controllo della topologia di rete;
Perché la comunicazione è un problema…Disponibilità dei servizi
Messaggi, messaggi e messaggiIl postino alla fine è sempre li a rompere…
Ale/mauro
• Introduzione al concetto di messaggistica;• Che cosa è un broker
Tutto è asincronoUn cambio radicale a partire dalla UX
Un cambio di paradigma radicale
• Siamo abituati troppo, sfruttiamo il «not responding» a nostro vantaggio, o comunque ci aspettiamo che le operazioni siano sempre sincrone;• Introducendo un sistema basato su messaggi tutto diventa
inevitabilmente asincrono:• Non sappiamo quando il messaggio arriva;• Non sappiamo neanche se il messaggio arriverà mai;
Che cosa viene impattato di più?
• User Experience• L’utente è abituato all’immediate feedback;• I comandi devono dare un ack il più velocemente possibile;• In certi scenari ha molto senso, nonostante la complessità, introdurre della logica client
side in stile «Facebook»:• Ti faccio credere che l’ho fatto;• Nella peggiore delle ipotesi fallisco tra un po’;
• Workflow(se ci pensiamo ogni cosa è un workflow, mal che vada con solo due stati)• I dati, intese come le «tabelle», non sono più la bibbia;• Ogni step di uno workflow deve basarsi sull’output dello step precedente e la bibbia
diventano gli eventi;
Gestione delle sicurezza in un sistema
distribuitoWindows Azure ACS
Why?Pecccchè…?
Autenticazione
• Il 100% delle “app” LOB deve «autenticare»;• Gestire le credenziali in modo sicuro;• Garantire la privacy;• Offrire un sistema per cambiare le credenziali;• Offrire un sistema per recuperare le credenziali;• Offrire un sistema per creare/si un nuovo utente;• Gestire il profilo dell’utente;
Ci serve veramente tutto ciò?
• Il 100% delle “app” LOB deve «autenticare» sapere chi è l’utente connesso;• Gestire le credenziali in modo sicuro;• Garantire la privacy;• Offrire un sistema per cambiare le credenziali;• Offrire un sistema per recuperare le credenziali;• Offrire un sistema per creare/si un nuovo utente;• Gestire il profilo dell’utente;
la federazioneIt’s a long way to the top if you wanna rock ‘n’ roll…
Profiles
L’abitudine…
App Backend/FBA UserStore
La possibilità…federata
App Backend/FBA
UserStore
Trusted3rd party
STS
Profilesnameidentifier
Non
è u
n pr
oble
ma
nost
ro
Sembra più complesso…ma…
• L’STS (security token service) non è un problema nostro;• Noi ci limitiamo alla fiducia;
Il cattivo :-)
• …se avessimo questi requisiti?• «Dipendenti» con account AD;• «Interni» con account FBA (e.g. agenti/consulenti);• «Esterni» con account Google/Facebook/LiveID;
FacebookGoogle Account
La realtà…federata
App Backend
Custom FBA
Profiles
TrustedACS
Active Directory
LiveID
nameidentifier
Non
è u
n pr
oble
ma
nost
ro
Azure ACSPower to you…
Per che cosa
• Autenticazione degli utenti;• Anche con account diversi dal Microsoft Account;
• Integrazione di servizi di terze parti che “comprendono” la lingua dell’ACS;
Lo scenario
App Backend Profiles
TrustedACS
Some STS
nameidentifier
STS Security Info/Token
Unpacked info
Come
• Configurare il namespace sull’ACS di Azure;• Predisporre un “return url” ad hoc per l’app in grado di spacchettare il
token;
• Recuperare la lista degli Identity Provider;• Far scegliere all’utente il provider da usare;• ….
Architettura di un’applicazioneTutto bello ma «facce vedè»…
Demo