CQRS/ES.

Slides:



Advertisements
Presentazioni simili
XmlBlackBox La presentazione Alexander Crea 11 Aprile 2010 La presentazione Alexander Crea 11 Aprile 2010.
Advertisements

CORSO DI SICUREZZA SU RETI II PROF. A. DE SANTIS ANNO 2006/07 Informatica granata Gruppo 2 ISP Gruppo 3 ISP.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità D3 Sicurezza e concorrenza nelle basi di dati.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità C1 Il linguaggio SQL.
Miglioramento della protezione dei dati mediante SQL Server 2005 Utilizzo della crittografia di SQL Server 2005 per agevolare la protezione dei dati Pubblicato:
Introduzione al datawarehouse
DOCUMENTAZIONE DI SCHEMI E/R
Acquisti OnLine Progetto
Basi di Dati prof. A. Longheu
XmlBlackBox La presentazione Alexander Crea 7 Giugno 2010 La presentazione Alexander Crea 7 Giugno 2010.
Interfaccia del file system
La Modifica dei Dati in una Base Dati La modifica dei dati contenuti allinterno di una base dati è unoperazione delicata Infatti, ogni potenziale problema.
1 9: Progettazione Architetturale Obiettivo: stabilire la struttura globale di un sistema software Descriveremo diversi tipi di modello di architettura,
1 14. Verifica e Validazione Come assicurarsi che il software corrisponda alle necessità dellutente? Introdurremo i concetti di verifica e validazione.
L’uso dei database in azienda
FONDAMENTI DI INFORMATICA III A2A1-1 CARATTERISTICHE E MODELLIZZAZIONE DEL LAVORO DUFFICIO Argomento 2 Approfondimento 1 CARATTERISTICHE E MODELLIZZAZIONE.
Basi di dati. Vantaggi degli archivi digitali Risparmio di spazio: sono facilmente trasferibili e duplicabili Risparmio di tempo: si può accedere ai dati.
Basi di dati Università Degli Studi Parthenope di Napoli
1Milano, 3 Novembre 2004Assemblea Nazionale FISM WORKSHOP La certificazione dei requisiti di qualità per le Società Medico-Scientifiche Presentazione del.
Architettura Java/J2EE
Progetto Di Uninfrastruttura Che Permetta La Modifica Di Dati Condivisi Distribuiti Su Più Nodi Reti di calcolatori L-S Gozzi Daniele
SARAH Shop Assistant in Reti Ad-Hoc Marco Montali.
Reti di Calcolatori L-S Un Sistema Decentrato di Allocazione del Carico per Applicazioni di Calcolo Distribuito Mauro Bampo.
Distributed File System Service Dario Agostinone.
Introduzione alla modellazione di sistemi interattivi
Esercitazione di Basi di Dati
L’ingegneria del software
U N INFRASTRUTTURA DI SUPPORTO PER SERVIZI DI FILE HOSTING Matteo Corvaro Matricola Corso di Reti di Calcolatori LS – Prof. A. Corradi A.A.
Fabrizio Grossi Verifica delle attività. L'operato degli amministratori di sistema deve essere oggetto, con cadenza almeno annuale, di un'attività
Sistemi di Elaborazione delle Informazioni Mod.I.
1Ingegneria Del Software L-A Progetto realizzato da: Luca Iannario, Enrico Baioni, Sara Sabioni. A.A. 2008/2009.
Sviluppo Web Agile con Castle MonoRail Diego Guidi DotNetMarche.Start() 12 ottobre 2006.
14/06/2008 – Matteo Baglini Mail: Blog:
User stories Claudio Maccari Mail:
Simulatore per un servizio di consistenza su architettura Grid
Dati e DBMS DBMS relazionali SQL Progettazione di una base di dati Programma del Corso.
Reti di calcolatori LS Manni Tiziano  IT e nuovi scenari applicativi …  … portabilità dei dati …  … condivisione dati …  … disponibilità.
Progettazione concettuale di SI basati su Web
Informatica e Algoritmi
INTRODUZIONE A JAVASCRIPT
Processo di Registrazione portali: MyCompany
Modulo 5 DataBase ACCESS. Informazioni e Dati INFORMAZIONI vengono scambiate con linguaggio scritto o parlato DATI rappresentazione di informazioni in.
1 Progettazione Architetturale. 2 Obiettivo: stabilire la struttura globale di un sistema software Descriveremo diversi tipi di modello di architettura,
Formattazione, Partizioni e dischi
O C L Object Constraint Language
FESR Consorzio COMETA Giuseppe Andronico Industry Day Catania, 30 Giugno 2011 IaaS, PaaS e SaaS: cosa significano per le aziende.
Diventa blogger Analisi degli obiettivi Piattaforma Wordpress Francesca Sanzo -
N4N Platform Architecture PA Inside outlook.
I processi.
Progetto Message Queues Service Olivelli Enrico Corso di Reti di Calcolatori LS A.A
Nemesi Creazione e pubblicazione di una rivista online tramite l’utilizzo di Java Message Service.
Progettazione Logica Il prodotto della progettazione logica è uno schema logico che rappresenta le informazioni contenute nello schema E-R in modo corretto.
Diagramma delle Classi
ATOMICITÀ Il tipo di atomicità di un programma PL/SQL è stabilito dall’ambiente chiamante oppure dal programma Gestione atomicità: –COMMIT –SAVEPOINT nome_punto.
IV D Mercurio DB Lezione 2
Informatica Lezione 5 Scienze e tecniche psicologiche dello sviluppo e dell'educazione (laurea triennale) Anno accademico:
Real World data access layers DataSet vs. Custom entities Pierre Greborio Software Architect – PEWay SrL Microsoft MVP – Solutions Architect.
TW Asp - Active Server Pages Nicola Gessa. TW Nicola Gessa Introduzione n Con l’acronimo ASP (Active Server Pages) si identifica NON un linguaggio di.
Studio di una soluzione distribuita per la gestione di un centro sondaggi.
Supporto per la replicazione attiva di servizi Progetto per il corso di Reti di Calcolatori LS Montanari Mirko Matr:
Progettazione di una base di dati Ciclo di vita di un sistema informativo Studio di fattibilità definisce le varie alternative possibili, i relativi costi.
Progettazione Logica Il prodotto della progettazione logica è uno schema logico che rappresenta le informazioni contenute nello schema E-R in modo corretto.
Servizio di newsgroup con replicazione dei server Studente: Letizia Cheng Cheng Sun Matricola: Reti di Calcolatori LS – Prof. A. Corradi A.A. 2003/2004.
SnippetSearch Database di snippet bilanciato e replicato di Gianluigi Salvi Reti di calcolatori LS – Prof. A.Corradi.
Basi di dati Funzionalità e Progettazione Giorgio Ghelli.
Consistente? De-normalizzazione, consistenza eventuale e assenza di transazioni, perché sono un vantaggio e non un problema.
Pari Gioia Reti Di Calcolatori LS A.A. 2003/04.
Le basi di dati.
Access Breve introduzione. Componenti E’ possibile utilizzare Access per gestire tutte le informazioni in un unico file. In un file di database di Access.
I DONEITÀ DI C ONOSCENZE E C OMPETENZE I NFORMATICHE ( A – D ) Un database è un insieme di record (registrazioni) e di file (archivi) organizzati per uno.
Transcript della presentazione:

CQRS/ES

<CodeDesign/> Andrea Belloni abelloni@codedesign.it Twitter: andbell77 http://www.codedesign.it/

Sapete tutti cos’è CQRS?

Thank You! abelloni@codedesign.it twitter: andbell77 http://www.codedesign.it/

Domain-Driven Design

Domain-Driven Design (DDD) Bounded Context Ubiquitous Language Aggregate / Aggregate Root Domain Events Repositories Domain Model Entities & Value objects Context Map Eric Evans (2004) Process Manager

Ubiquitous Language E’ Il linguaggio del business e degli esperti di dominio per descrivere procedure, identificare processi e oggetti Sarà il linguaggio del progetto Il team di sviluppo e tutte le persone interessate al progetto devono riuscire a comprendersi Ubiquitous language Domain experts Development teams

Bounded Context All’interno delle aziende, spesso gli stessi termini hanno differenti significati se usati da differenti persone in differenti contesti Il Dominio deve essere suddiviso in differenti sottodomini: Bounded contexts. Un Bounded Context è un’area dell’applicazione che richiede il proprio Ubiquitous Language e la propria architettura. La Context map è il diagramma che raffigura i bounded context e relativi collegamenti

Domain Model E’ una rappresentazione del modello di business E’ Composto da Entities, Value objects e servizi (domain services) Modella i concetti del mondo reale Esiste un Domain Model per ogni Bounded Context

Value objects & Entities In DDD, un value object è definito attraverso le sue proprietà I value objects sono tipi immutabili, gli attributi di un value object non cambiano dopo la sua creazione Quando gli attributi non sono sufficienti a garantire l’univocità si parla di Entities Una Entity è un oggetto che necessita di un attributo ID per tracciare la sua univocità attraverso l’intero ciclo di vita I value objects sono solo un insieme di dati, le entities sono tipicamente composte da dati e comportamento

Persistenza  Repositories Un domain model deve essere persistente ma niente all’interno del Domain model fa riferimento a qualche “Load” o “Save” Generalmente i repositories vengono invocati al di fuori del Domain Model I contratti dei repositories risiedono nel Domain Layer, le implementazioni in un layer differente I repositories persistono gli Aggregates, un aggregate è uno speciale sotto-insieme di entities

Aggregate E’ un insieme di oggetti associati che trattiamo come una singola unità ai fini delle modifiche dei dati E’ fondamentalmente un confine consistente che delimita un insieme di entities e le separa da altre entities E’ un insieme logico che ha una propria dignità e che viene ben delineato dal modello di business Una pratica comune: scomporre da subito il domain model in aggregates

Aggregate Ogni aggregate ha un “entity root” chiamato “aggregate root” Value object Entity Entity Value object Entity Ogni aggregate ha un “entity root” chiamato “aggregate root”

Domain Services Sono classi i quali metodi implementano la logica di dominio che non è limitata al singolo aggregate e che abbraccia più entities I Domain services coordinano le attività fra aggregates e repositories attraverso l’implementazione di procedure di business I Domain services sono comunemente rappresentati attraverso interfacce e classi di implementazione Il tipo più comune di Domain Service è il Repository, e ne esiste uno per ogni aggregate root

Domain Events Un evento di dominio è una semplice classe che rappresenta il verificarsi di qualcosa di interessante all’interno del dominio In uno scenario Domain-Model, un evento è una classe che implementa una marker-interface (IDomainEvent) Non ha nulla a che vedere con gli eventi .NET (EventArgs) E’ una pratica comune implementare all’interno del Domain-Model un meccanismo di publish/subscribe per la propagazione degli eventi

Handlers / Worker process / Sagas Semplici classi che contengono quel minimo di logica necessaria per invocare della logica di business in reazione al comando invocato o all’evento di dominio considerato.

SAGA  NServiceBus Una «Saga» è un Workflow potenzialmente lungo (ma non sempre) che ha le seguenti caratteristiche Costituita da una serie di diverse fasi (messaggi) Può essere persistente (SQL, NoSQL, MSMQ) per assicurare la durabilità Affidabile grazie all’utilizzo del trasporto MSMQ Può essere riavviata dopo essere stata fermata Può essere completata

Un esempio di Aggregate…

CUSTOMER

Abbiamo il nostro customer… Aggregate Root Entity E la persistenza? Nome Cognome Data di Nascita Dove tengo la Password? Come gestisco l’indirizzo? Lingua Username Email address e il comportamento?

CQRS Command Query Responsibility Segregation Asymmetric Layering

Conceptual CQRS

Conceptual CQRS L’utente decide quali comandi invocare sul Sistema sulla base delle Informazioni derivanti dalla sua esperienza, e da quanto reso disponibile dall’applicazione La decisione presa si traduce in comandi verso il Sistema

Quando applico CQRS? Quando abbiamo un Domain Model Quando la differenza tra scritture e letture è significativa Quando pensiamo sia la soluzione della nostra vita  Ma se stiamo costruendo un framework o lavoriamo con metamodelli estremamente astratti… forse non ci serve!

Cosa cambia rispetto ai classici Stack del Domain Model?

Domain Model CQRS Presentation layer Presentation layer Application Layer Application + Domain Data access Domain Layer Infrastructure Layer Infrastructure Layer Commands Queries

Scrivi solo il modello Il domain model non è usato per recuperare o mostrare dati di conseguenza le relazioni tra entità orientate al recupero dei dati vengono meno Il Domain model è sempre in uno stato consistente Non è necessaria la validazione sul Domain model, I comandi sono validati prima.

Comandi Un comando ha lo scopo di definire l’intenzione e giusto livello di granularità SalvaProdotto: nessun intento di business! CreaOrdineEGeneraFattura: granularità troppo ampia Non ci può essere atomicità tra: Modificare l’indirizzo di spedizione Modificare i dati di fatturazione Inserire una qualche promozione sul cliente Sono 3 operazioni soggette a regole di business molto distanti tra loro

Comandi L’Introduzione del concetto di comando porta con se la necessità di ripensare il flusso della UX in modalità “task based” Granularità  1 : 1  Unit of Work

CQRS/ES in a nutshell L’Applicazione invia un comando al Sistema L’esecuzione del commando altera lo stato del Sistema e genera eventi che affermano il successo/fallimento del comando Gli eventi vengono notificati (e persistiti) ai sottoscrittori interessati (a.k.a. handlers), quali: Workflow manager (a.k.a. “Saghe”) in grado di eseguire ulteriori comandi Denormalizer, che aggiorneranno il database di lettura Nota: il dispatch di comandi/eventi è tipicamente effettato da un Mediator (“bus”)

Event Sourcing Perchè memorizzare gli eventi quando ho già lo stato consistente?

Un caso pratico una piattaforma HFT HFT (High frequency trading) permette di definire algoritmi per il trading automatico Si muovono consistenti volumi di azioni in un tempo brevissimo (alcuni ticks) Gli algoritmi evolvono e vengono migliorati con un ciclo di vita molto dinamico (una volta alla settimana?)

Definisco un «buon algoritmo» nella piattaforma

Verifico quanto sia buono (backtesting) Modifico Verifico

Event Store Mercato

Event Sourcing Uno scenario eventalmente consistente

Read stack Domain Layer B U S Application Layer Handlers Model Services Handlers State DB Event store Ad-hoc DB Handlers Read stack Command Event Data

Cosa impatta di più? User Experience Workflow L’utente è abituato ad avere subito risposte quindi in molti casi facebook insegna introducendo un pò di logica client-side: Ti faccio credere che l’ho fatto al massimo schianto fra un pò! Workflow Ogni step di un workflow deve basarsi sull’output dello step precedente… gli eventi sono la storia dal tempo ZERO (BigBang dell’applicazione) Ogni cosa è un workflow… quello più semplice è compost da 2 stati.

DATI “STALE”! E’ veramente un problema? se i dati sono di 5 secondi fa? o di 20 minuti fa? puoi tenere sincronizzata una stampa? Una volta letti, qualsiasi decisione presa su quei dati è da considerarsi poco affidabile

Cosa significa “Eventualmente Consistente” Che tutti i segmenti del dato non sempre mostrano gli stessi valori per tutti i consumatori in qualsiasi momento. Che PRIMA O POI quel dato sarà consistente Nel modello mentale dell’utente le “transazioni” non esistono quindi la vita reale è “Eventualmente Consistente”

Cloud and Strongly Consistent Il requisito dei dati transazionali (fortemente coerenti) richiede che tutti i valori in un dato momento siano sempre coerenti (stessa vista) ma ha un prezzo di overhead dovuto al LOCK! Per mantenere i confini transazionali e utilizzare il LOCK su lunghe distanze (Cloud) la latenza e il blocco che possono verificarsi potrebbero non essere accettabili Per la natura del cloud se fossimo SC i failures saranno molti Nel cloud la miglior scelta è «Eventually Consistent»

Non-transactional sequence… Strongly Consistence = Tutto tutto o niente niente! Eventually Consistence La compensazione non sempre si può limitare a reimpostare il valore precedente Durante l’eventuale rollback il valore può essere stato cambiato più volte da altri eventi

Eventual Consistency Patterns Compensating Transaction Pattern Database Sharding Pattern Map-Reduce Pattern

Compensating Transaction Pattern Eseguire il tutto in un Workflow (intuire il flusso di lavoro) Registrare le informazioni su ogni step e come il lavoro svolto da questo step può essere annullato Deve poter essere eseguito parallelamente In alcuni casi l’unico modo di rendere coerente il dominio è intervenire manualmente I passaggi in una transazione di compensazione dovrebbero essere idempotenti quando possono fallire; devono poter essere rieseguiti nuovamente più e più volte Non sempre è facile o è possibile

Database Sharding Pattern Dividere uno store in un set di partizioni (shards) “orizzontali” che contengono lo stesso schema La maggior parte dei dati vengono distribuiti in modo tale che ogni riga in uno specifico frammento e i dati combinati di tutti i frammenti sono uguali ai dati del database originale La collezione di frammenti è un unico database logico anche se ora ci sono più database fisici coinvolti Non si usa la replica dei dati (master-slave) altrimenti il master diventerebbe il collo di bottiglia Aumento delle performance e della ridondanza delle informazioni Hibernate Shards Framework, Apache Slice, Websphere ObjectGrid

Map-Reduce Pattern Ispirato alle funzioni map e reduce (programmazione funzionale) Supporta la computazione distribuita su grandi quantità di dati in cluster

CQRS.Dispose();

Thank You! abelloni@codedesign.it twitter: andbell77 http://www.codedesign.it/

Resources CQRS Pattern https://msdn.microsoft.com/it- it/library/dn568103.aspx?f=255&MSPPError=-2147217396 CQRS by Greg Young https://github.com/gregoryyoung/m-r Eric Evans – DDD http://www.infoq.com/presentations/model-to-work-evans Event Sourcing Pattern https://msdn.microsoft.com/en-us/library/dn589792.aspx Event Sourcing by Martin Fowler http://martinfowler.com/eaaDev/EventSourcing.html CQRS by Martin Fowler http://martinfowler.com/bliki/CQRS.html