Modello CQRS - AWS Guida prescrittiva

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Modello CQRS

Il pattern CQRS (command query responsibility segregation) separa la mutazione dei dati, o la parte di comando di un sistema, dalla parte della query. È possibile utilizzare il pattern CQRS per separare gli aggiornamenti e le query se hanno requisiti diversi in termini di velocità effettiva, latenza o coerenza. Il pattern CQRS divide l'applicazione in due parti, il lato comando e il lato query, come illustrato nel diagramma seguente. Il lato comando gestisce e richiede. create update delete Il lato interrogazione esegue la query parte utilizzando le repliche di lettura.

Vista di alto livello del pattern CQRS

Il diagramma mostra il seguente processo:

  1. L'azienda interagisce con l'applicazione inviando comandi tramite un'API. I comandi sono azioni come la creazione, l'aggiornamento o l'eliminazione di dati.

  2. L'applicazione elabora il comando in entrata sul lato comando. Ciò comporta la convalida, l'autorizzazione e l'esecuzione dell'operazione.

  3. L'applicazione mantiene i dati del comando nel database write (command).

  4. Dopo che il comando è stato memorizzato nel database di scrittura, vengono attivati eventi per aggiornare i dati nel database read (query).

  5. Il database di lettura (interrogazione) elabora e mantiene i dati. I database di lettura sono progettati per essere ottimizzati per requisiti di interrogazione specifici.

  6. L'azienda interagisce con le API di lettura per inviare query al lato query dell'applicazione.

  7. L'applicazione elabora la query in entrata sul lato della query e recupera i dati dal database di lettura.

È possibile implementare il pattern CQRS utilizzando varie combinazioni di database, tra cui:

  • Utilizzo dei database del sistema di gestione dei database relazionali (RDBMS) sia per il lato dei comandi che per quello delle interrogazioni. Le operazioni di scrittura vanno al database principale e le operazioni di lettura possono essere indirizzate alle repliche di lettura. Esempio: repliche di lettura di Amazon RDS

  • Utilizzo di un database RDBMS per il lato comando e un database NoSQL per il lato query. Esempio: modernizza i database legacy utilizzando l'event sourcing e CQRS con AWS DMS

  • Utilizzo di database NoSQL sia per il lato dei comandi che per quello delle query. Esempio: crea un archivio di eventi CQRS con Amazon DynamoDB

  • Utilizzo di un database NoSQL per il lato comando e un database RDBMS per il lato query, come illustrato nell'esempio seguente.

Nella figura seguente, un data store NoSQL, come DynamoDB, viene utilizzato per ottimizzare la velocità di scrittura e fornire funzionalità di interrogazione flessibili. Ciò consente di ottenere un'elevata scalabilità di scrittura su carichi di lavoro che hanno modelli di accesso ben definiti quando si aggiungono dati. Un database relazionale, come Amazon Aurora, offre funzionalità di interrogazione complesse. Un flusso DynamoDB invia dati a una funzione Lambda che aggiorna la tabella Aurora.

Pattern CQRS implementato con i servizi AWS

L'implementazione del pattern CQRS con DynamoDB e Aurora offre questi vantaggi chiave:

  • DynamoDB è un database NoSQL completamente gestito in grado di gestire operazioni di scrittura ad alto volume e Aurora offre un'elevata scalabilità di lettura per query complesse sul lato delle query.

  • DynamoDB offre un accesso ai dati a bassa latenza e ad alto throughput, il che lo rende ideale per la gestione di operazioni di comando e aggiornamento, mentre le prestazioni di Aurora possono essere ottimizzate e ottimizzate per query complesse.

  • Sia DynamoDB che Aurora offrono opzioni serverless, che consentono alle aziende di pagare le risorse solo in base all'utilizzo.

  • DynamoDB e Aurora sono servizi completamente gestiti, che riducono il carico operativo di gestione di database, backup e scalabilità.

È consigliabile prendere in considerazione l'utilizzo del pattern CQRS se:

  • Hai implementato il database-per-service modello e desideri unire i dati di più microservizi.

  • I tuoi carichi di lavoro di lettura e scrittura hanno requisiti separati di scalabilità, latenza e coerenza.

  • La coerenza finale è accettabile per le query di lettura.

Importante

Il pattern CQRS si traduce in genere in una eventuale coerenza tra gli archivi di dati.