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

Post on 18-Dec-2014

298 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

CQRS ed Event Sourcing su Windows

AzureApplicazioni Distribuite, Scalabilità e Security

…oh my god… <cit.>

Alessandro MelchioriCodicePlastico

Architect & Partner

alessandro.melchiori@codiceplastico.com

//blog.codiceplastico.com/melkio

@amelchiori

Mauro ServientiManaged Designs

Technical Advisor & Partner

mauro.servienti@manageddesigns.it

//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

top related