Download - CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security
![Page 1: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/1.jpg)
CQRS ed Event Sourcing su Windows
AzureApplicazioni Distribuite, Scalabilità e Security
![Page 2: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/2.jpg)
…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
![Page 3: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/3.jpg)
Introduzione a Windows Azure
…due parole…due..
![Page 4: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/4.jpg)
Che cosa è
![Page 5: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/5.jpg)
![Page 6: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/6.jpg)
PaaS vs. IaaSThe big challenge
![Page 7: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/7.jpg)
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”
![Page 8: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/8.jpg)
Update
IaaS• Repeat items as above, per instance
• Get instances working together
PaaS• “Update Instances”
![Page 9: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/9.jpg)
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)
![Page 10: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/10.jpg)
Scalabilità, Scalabilità…
…e ancora scalabilità
![Page 11: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/11.jpg)
«orizzontale»…is the word…
![Page 12: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/12.jpg)
Tightly Coupled
Store Front End
Drivers
Shipping Service
Tracking
![Page 13: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/13.jpg)
Store Front End Shipping Service
Drivers
Tracking
Tightly Coupled
Store Front End Shipping Service
![Page 14: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/14.jpg)
Store Front End
Drivers
Shipping Service
Tracking
Order Queue
Loosely Coupled
Store Front End Shipping Service
![Page 15: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/15.jpg)
Store Front End Order Queue Shipping Service
Drivers
Tracking
Loosely Coupled
Order QueueStore Front End Shipping Service
![Page 16: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/16.jpg)
Store Front End Order Queue Shipping Service
Drivers
Tracking
Loosely Coupled
Order QueueStore Front End Shipping Service
![Page 17: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/17.jpg)
Store Front End Order Queue
Tracking
Tracking
Shipping Service
Loosely Coupled
Order QueueStore Front End Shipping Service
![Page 18: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/18.jpg)
ma...questa cosa non mi è nuova...
• In «domain driven design» abbiamo dei concetti paralleli• Bounded context• Domain events
![Page 19: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/19.jpg)
Le funzionalità erogate
![Page 20: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/20.jpg)
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
![Page 21: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/21.jpg)
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;
![Page 22: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/22.jpg)
Lock-in…è un problema?
![Page 23: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/23.jpg)
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;
![Page 24: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/24.jpg)
Visual Studio: Windows Azure SDKBreve corso di sopravvivenza all’emulatore…
![Page 25: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/25.jpg)
DemoWorker Role, Web Role, l’emulatore e i tool
![Page 26: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/26.jpg)
I dialetti del ServiceBus
scalare comunicando
![Page 27: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/27.jpg)
Service Bus queue
QueueS R
S
S
R
R
Consumer “paralleli”Ogni messaggio è consumato da un solo consumer
![Page 28: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/28.jpg)
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
![Page 29: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/29.jpg)
Perché la comunicazione è un problema…Topologia di un data-center
![Page 30: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/30.jpg)
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;
![Page 31: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/31.jpg)
Perché la comunicazione è un problema…Disponibilità dei servizi
![Page 32: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/32.jpg)
Messaggi, messaggi e messaggiIl postino alla fine è sempre li a rompere…
![Page 33: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/33.jpg)
Ale/mauro
• Introduzione al concetto di messaggistica;• Che cosa è un broker
![Page 34: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/34.jpg)
Tutto è asincronoUn cambio radicale a partire dalla UX
![Page 35: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/35.jpg)
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;
![Page 36: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/36.jpg)
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;
![Page 37: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/37.jpg)
Gestione delle sicurezza in un sistema
distribuitoWindows Azure ACS
![Page 38: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/38.jpg)
Why?Pecccchè…?
![Page 39: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/39.jpg)
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;
![Page 40: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/40.jpg)
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;
![Page 41: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/41.jpg)
la federazioneIt’s a long way to the top if you wanna rock ‘n’ roll…
![Page 42: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/42.jpg)
Profiles
L’abitudine…
App Backend/FBA UserStore
![Page 43: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/43.jpg)
La possibilità…federata
App Backend/FBA
UserStore
Trusted3rd party
STS
Profilesnameidentifier
Non
è u
n pr
oble
ma
nost
ro
![Page 44: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/44.jpg)
Sembra più complesso…ma…
• L’STS (security token service) non è un problema nostro;• Noi ci limitiamo alla fiducia;
![Page 45: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/45.jpg)
Il cattivo :-)
• …se avessimo questi requisiti?• «Dipendenti» con account AD;• «Interni» con account FBA (e.g. agenti/consulenti);• «Esterni» con account Google/Facebook/LiveID;
![Page 46: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/46.jpg)
FacebookGoogle Account
La realtà…federata
App Backend
Custom FBA
Profiles
TrustedACS
Active Directory
LiveID
nameidentifier
Non
è u
n pr
oble
ma
nost
ro
![Page 47: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/47.jpg)
Azure ACSPower to you…
![Page 48: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/48.jpg)
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;
![Page 49: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/49.jpg)
Lo scenario
App Backend Profiles
TrustedACS
Some STS
nameidentifier
STS Security Info/Token
Unpacked info
![Page 50: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/50.jpg)
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;• ….
![Page 51: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/51.jpg)
Architettura di un’applicazioneTutto bello ma «facce vedè»…
![Page 52: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security](https://reader035.vdocument.in/reader035/viewer/2022070303/5499a9aeac79592f2e8b5942/html5/thumbnails/52.jpg)
Demo