cqrs ed event sourcing su windows azure: applicazioni distribuite, scalabilità e security

52
CQRS ed Event Sourcing su Windows Azure Applicazioni Distribuite, Scalabilità e Security

Upload: dotnetmarche

Post on 18-Dec-2014

298 views

Category:

Documents


0 download

DESCRIPTION

Video del workshop: https://vimeo.com/album/2334363

TRANSCRIPT

Page 1: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security

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

…oh my god… <cit.>

Alessandro MelchioriCodicePlastico

Architect & Partner

[email protected]

//blog.codiceplastico.com/melkio

@amelchiori

Mauro ServientiManaged Designs

Technical Advisor & Partner

[email protected]

//milestone.topics.it

//blogs.ugidotnet.org/topics

@mauroservienti

Page 3: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security

Introduzione a Windows Azure

…due parole…due..

Page 4: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security

Che cosa è

Page 5: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security
Page 6: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security

PaaS vs. IaaSThe big challenge

Page 7: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security

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

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

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

Scalabilità, Scalabilità…

…e ancora scalabilità

Page 11: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security

«orizzontale»…is the word…

Page 12: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security

Tightly Coupled

Store Front End

Drivers

Shipping Service

Tracking

Page 13: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security

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

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

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

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

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

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

Le funzionalità erogate

Page 20: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security

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

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

Lock-in…è un problema?

Page 23: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security

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

Visual Studio: Windows Azure SDKBreve corso di sopravvivenza all’emulatore…

Page 25: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security

DemoWorker Role, Web Role, l’emulatore e i tool

Page 26: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security

I dialetti del ServiceBus

scalare comunicando

Page 27: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security

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

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

Perché la comunicazione è un problema…Topologia di un data-center

Page 30: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security

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

Perché la comunicazione è un problema…Disponibilità dei servizi

Page 32: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security

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

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

Tutto è asincronoUn cambio radicale a partire dalla UX

Page 35: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security

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

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

Gestione delle sicurezza in un sistema

distribuitoWindows Azure ACS

Page 38: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security

Why?Pecccchè…?

Page 39: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security

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

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

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

Profiles

L’abitudine…

App Backend/FBA UserStore

Page 43: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security

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

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

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

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

Azure ACSPower to you…

Page 48: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security

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

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

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

Architettura di un’applicazioneTutto bello ma «facce vedè»…

Page 52: CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilità e Security

Demo