Scomponi i monoliti in microservizi utilizzando e generando eventi CQRS - Prontuario AWS

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à.

Scomponi i monoliti in microservizi utilizzando e generando eventi CQRS

Creato da Rodolfo Jr. Cerrada (AWS), Dmitry Gulin (), e Tabby Ward () AWS AWS

Ambiente: PoC o pilota

Fonte: modello Monolith CRUD

Target: microservizi

Tipo R: Re-architect

Carico di lavoro: open source

Tecnologie: modernizzazione; messaggistica e comunicazioni; serverless

AWSservizi: Amazon DynamoDB; LambdaAWS; Amazon SNS

Riepilogo

Questo modello combina due modelli, utilizzando sia il pattern command query responsibility separation (CQRS) sia il pattern di origine degli eventi. Il CQRS modello separa le responsabilità dei modelli di comando e di interrogazione. Il pattern di approvvigionamento degli eventi sfrutta la comunicazione asincrona basata sugli eventi per migliorare l'esperienza utente complessiva.

Puoi utilizzare i servizi Amazon Web Services (AWS) per mantenere CQRS e scalare ogni modello di dati in modo indipendente, rifattorizzando al contempo la tua applicazione monolitica in un'architettura di microservizi. Quindi puoi utilizzare il pattern di sourcing degli eventi per sincronizzare i dati dal database dei comandi al database delle query.

Questo modello utilizza un codice di esempio che include un file di soluzione (*.sln) che è possibile aprire utilizzando l'ultima versione di Visual Studio. L'esempio contiene API codice Reward per mostrare come CQRS funziona il sourcing degli eventi nelle applicazioni AWS serverless, tradizionali o locali.

Per ulteriori informazioni sull'CQRSapprovvigionamento di eventi, consulta la sezione Informazioni aggiuntive.

Prerequisiti e limitazioni

Prerequisiti

  • Un account attivo AWS

  • Amazon CloudWatch

  • Tabelle Amazon DynamoDB

  • Amazon DynamoDB Streams

  • AWSChiave di accesso e chiave segreta di Identity and Access Management (IAM); per ulteriori informazioni, guarda il video nella sezione Risorse correlate

  • AWSLambda

  • Familiarità con Visual Studio

  • Familiarità con AWS Toolkit for Visual Studio; per ulteriori informazioni, guarda AWSil video dimostrativo di Toolkit for Visual Studio nella sezione Risorse correlate

Versioni del prodotto

Limitazioni

  • Il codice di esempio per un'applicazione locale tradizionale (. ASP NETCore Web API and Data Access Objects) non viene fornito con un database. Tuttavia, viene fornito con l'oggetto CustomerData in memoria, che funge da database fittizio. Il codice fornito è sufficiente per testare il modello.

Architettura

Stack di tecnologia di origine

  • ASP. NETAPIProgetto Core Web

  • IISServer Web

  • Oggetto di accesso ai dati

  • CRUDmodello

Architettura di origine

Nell'architettura di origine, il CRUD modello contiene interfacce di comando e di interrogazione in un'unica applicazione. Per un esempio di codice, vedere CustomerDAO.cs (allegato).

Connessioni tra applicazione, interfaccia di servizio, CRUD modello cliente e database.

Stack tecnologico Target

  • Amazon DynamoDB

  • Amazon DynamoDB Streams

  • AWSLambda

  • (Opzionale) Amazon API Gateway

  • (Opzionale) Amazon Simple Notification Service (AmazonSNS)

Architettura Target

Nell'architettura di destinazione, le interfacce di comando e di interrogazione sono separate. L'architettura mostrata nel diagramma seguente può essere estesa con API Gateway e AmazonSNS. Per ulteriori informazioni, consulta la sezione Informazioni aggiuntive.

Connessione delle applicazioni con microservizi Customer Command e Customer Query senza server.
  1. Le funzioni Command Lambda eseguono operazioni di scrittura, come creare, aggiornare o eliminare, sul database.

  2. Le funzioni Query Lambda eseguono operazioni di lettura, come get o select, sul database.

  3. Questa funzione Lambda elabora i flussi DynamoDB dal database Command e aggiorna il database Query per le modifiche.

Strumenti

Strumenti

  • Amazon DynamoDB: Amazon DynamoDB è un servizio SQL No database completamente gestito che offre prestazioni veloci e prevedibili con una scalabilità perfetta.

  • Amazon DynamoDB Streams — DynamoDB Streams acquisisce una sequenza ordinata nel tempo di modifiche a livello di elemento in qualsiasi tabella DynamoDB. Quindi memorizza queste informazioni in un registro per un massimo di 24 ore. La crittografia a riposo crittografa i dati in DynamoDB Streams.

  • AWSLambda: AWS Lambda è un servizio di elaborazione che supporta l'esecuzione di codice senza effettuare il provisioning o la gestione di server. Lambda esegue il codice solo quando è necessario e si dimensiona automaticamente, da poche richieste al giorno a migliaia al secondo. Verrà addebitato soltanto il tempo di calcolo consumato e non verrà addebitato alcun costo quando il codice non è in esecuzione.

  • AWSConsole di gestione: la console di AWS gestione è un'applicazione Web che comprende un'ampia raccolta di console di servizio per la gestione dei servizi. AWS

  • Visual Studio 2019 Community Edition — Visual Studio 2019 è un ambiente di sviluppo integrato (IDE). La Community Edition è gratuita per i contributori open source. In questo modello, utilizzerai Visual Studio 2019 Community Edition per aprire, compilare ed eseguire codice di esempio. Solo per la visualizzazione, puoi utilizzare qualsiasi editor di testo o Visual Studio Code.

  • AWSToolkit for Visual Studio — AWS Il Toolkit for Visual Studio è un plugin per Visual Studio. IDE AWSToolkit for Visual Studio semplifica lo sviluppo, il debug e la distribuzione. NETapplicazioni che utilizzano servizi. AWS

Codice

Il codice di esempio è allegato. Per istruzioni sulla distribuzione del codice di esempio, consulta la sezione Epics.

Epiche

AttivitàDescrizioneCompetenze richieste

Aprire la soluzione.

  1. Scaricate il codice sorgente di esempio (CQRS-ES Code.zip) dalla sezione Allegati ed estraete i file.

  2. In Visual StudioIDE, scegli File, Apri, Project Solution e vai alla cartella in cui hai estratto il codice sorgente.

  3. ScegliAWS. APG. CQRSES.sln, quindi scegli Apri. L'intera soluzione viene caricata in Visual Studio.

Sviluppatore di app

Crea la soluzione.

Apri il menu contestuale (fai clic con il pulsante destro del mouse) per la soluzione, quindi scegli Crea soluzione. Questo creerà e compilerà tutti i progetti della soluzione. Dovrebbe essere compilato correttamente.

Visual Studio Solution Explorer dovrebbe mostrare la struttura delle cartelle.

  • CQRS On-Premises Code Samplecontiene un esempio di utilizzo CQRS in locale.

  • CQRS AWS Serverlesscontiene tutto il CQRS codice di esempio relativo all'origine degli eventi utilizzando AWS servizi serverless.

Sviluppatore di app
AttivitàDescrizioneCompetenze richieste

Fornire le credenziali.

Se non disponi ancora di una chiave di accesso, guarda il video nella sezione Risorse correlate.

  1. In Solution Explorer, espandi CQRSAWSServerless, quindi espandi la cartella Build solution.

  2. Espandi AWS. APG. CQRSES.Costruisci il progetto e visualizza il Program.cs file.

  3. Scorri fino all'inizio Program.cs e cercaProgram().

  4. YOUR ACCESS KEYSostituiscilo con la chiave di accesso del tuo account e YOUR SECRET KEY sostituiscilo con la chiave segreta del tuo account. Tieni presente che in un ambiente di produzione non è necessario codificare le chiavi. È invece possibile utilizzare AWSSecrets Manager per archiviare e recuperare le credenziali.

Sviluppatore di app, ingegnere dei dati, DBA

Compilare il progetto.

Per creare il progetto, apri il menu contestuale (fai clic con il pulsante destro del mouse) per AWS. APG. CQRSES.Costruisci progetto, quindi scegli Costruisci.

Sviluppatore di app, ingegnere dei dati, DBA

Crea e popola le tabelle.

Per creare le tabelle e popolarle con i dati iniziali, apri il menu contestuale (fai clic con il pulsante destro del mouse) per AWS. APG. CQRSES.Build project, quindi scegli Debug, Start New Instance.

Sviluppatore di app, ingegnere dei dati, DBA

Verifica la struttura della tabella e i dati.

Per verificare, accedi a AWSExplorer ed espandi Amazon DynamoDB. Dovrebbe visualizzare le tabelle. Apri ogni tabella per visualizzare i dati di esempio.

Sviluppatore di app, ingegnere dei dati, DBA
AttivitàDescrizioneCompetenze richieste

Compilare il progetto CQRS.

  1. Aprire la soluzione e accedere alla cartella della CQRSAWSServices/CQRS/Testssoluzione.

  2. Nel AWS. APG. CQRSES. CQRSLambda.Tests progetta, apri BaseFunctionTest.cs e sostituisci AccessKeye SecretKeycon le IAM chiavi che hai creato.

  3. Salvare le modifiche.

  4. Per compilare e creare il progetto di test, apri il menu contestuale (fai clic con il pulsante destro del mouse) del progetto, quindi scegli Build.

Sviluppatore di app, tecnico di test

Crea il progetto di event-sourcing.

  1. Vai alla cartella della soluzione. CQRSAWSServices/Event Source/Tests 

  2. Nel AWS. APG. CQRSES. EventSourceLambda.Tests progetta, apri BaseFunctionTest.cs e sostituisci AccessKeye SecretKeycon le IAM chiavi che hai creato. 

  3. Salvare le modifiche.

  4. Per compilare e creare il progetto di test, apri il menu contestuale (fai clic con il pulsante destro del mouse) del progetto, quindi scegli Build.

Sviluppatore di app, tecnico di test

Esegui i test.

Per eseguire tutti i test, scegliete Visualizza, Test Explorer, quindi scegliete Esegui tutti i test in visualizzazione. Tutti i test devono essere superati, come indicato da un'icona verde con un segno di spunta. 

Sviluppatore di app, tecnico di test
AttivitàDescrizioneCompetenze richieste

Pubblica la prima funzione Lambda.

  1. In Solution Explorer, aprite il menu contestuale (facendo clic con il pulsante destro del AWS mouse) per. APG. CQRSES. CommandCreateLambda progetto, quindi scegli Pubblica su AWS Lambda.

  2. Seleziona il profilo che desideri utilizzare e la AWS regione in cui desideri distribuire la funzione Lambda e il nome della funzione.

  3. Per i campi rimanenti, mantieni i valori predefiniti e scegli Avanti.

  4. Nell'elenco a discesa Nome ruolo, seleziona AWSLambdaFullAccess.

  5. Per fornire le chiavi dell'account, scegli Aggiungi e inserisci AcessKey come variabile e la chiave di accesso come valore. Quindi scegli nuovamente Aggiungi, inserisci SecretKey come variabile e la tua chiave segreta come valore.

  6. Per i campi rimanenti, mantieni i valori predefiniti e scegli Carica. Dopo il caricamento della funzione di test Lambda, viene visualizzata automaticamente in Visual Studio.

  7. Ripeti i passaggi 1-6 per i seguenti progetti:

    • AWS.APG.CQRSES.CommandDeleteLambda

    • AWS.APG.CQRSES.CommandUpdateLambda

    • AWS.APG.CQRSES.CommandAddRewardLambda

    • AWS.APG.CQRSES.CommandRedeemRewardLambda

    • AWS.APG.CQRSES.QueryCustomerListLambda

    • AWS.APG.CQRSES.QueryRewqardLambda

Sviluppatore di app, DevOps ingegnere

Verifica il caricamento della funzione.

(Facoltativo) È possibile verificare che la funzione sia stata caricata correttamente accedendo a AWS Explorer ed espandendo AWSLambda. Per aprire la finestra di test, scegliete la funzione Lambda (doppio clic).

Sviluppatore di app, ingegnere DevOps

Prova la funzione Lambda.

  1. Inserisci i dati della richiesta o copia un esempio di dati di richiesta da Dati di test nella sezione Informazioni aggiuntive. Assicurati di selezionare i dati relativi alla funzione che stai testando.

  2. Per eseguire il test, scegli Invoke. La risposta e gli eventuali errori vengono visualizzati nella casella di testo Risposta, mentre i registri vengono visualizzati nella casella di testo Registri o in Registri. CloudWatch

  3. Per verificare i dati, in AWS Explorer, scegli la tabella DynamoDB (doppio clic).

Tutti i progetti CQRS Lambda si trovano nelle cartelle CQRS AWS Serverless\CQRS\Command Microservice e  CQRS AWS Serverless\CQRS\Command Microservice solution. Per la directory e i progetti della soluzione, consulta Directory del codice sorgente nella sezione Informazioni aggiuntive.

Sviluppatore di app, DevOps ingegnere

Pubblica le funzioni rimanenti.

Ripetete i passaggi precedenti per i seguenti progetti:

  • AWS.APG.CQRSES.CommandDeleteLambda

  • AWS.APG.CQRSES.CommandUpdateLambda

  • AWS.APG.CQRSES.CommandAddRewardLambda

  • AWS.APG.CQRSES.CommandRedeemRewardLambda

  • AWS.APG.CQRSES.QueryCustomerListLambda

  • AWS.APG.CQRSES.QueryRewqardLambda

Sviluppatore di app, DevOps ingegnere
AttivitàDescrizioneCompetenze richieste

Pubblica i gestori di eventi Customer and Reward Lambda.

Per pubblicare ogni gestore di eventi, segui i passaggi dell'epopea precedente.

I progetti si trovano nelle cartelle CQRS AWS Serverless\Event Source\Customer Event e CQRS AWS Serverless\Event Source\Reward Event solution. Per ulteriori informazioni, consulta la directory del codice sorgente nella sezione Informazioni aggiuntive.

Sviluppatore di app

Collega il listener di eventi Lambda event-sourcing.

  1. Accedi alla console di AWS gestione utilizzando lo stesso account che usi quando pubblichi i progetti Lambda.

  2. Per la regione, seleziona US East 1 o la regione in cui hai distribuito le funzioni Lambda nell'epopea precedente.

  3. Vai al servizio Lambda.

  4. Seleziona la funzione EventSourceCustomer Lambda.

  5. Scegli Aggiungi trigger.

  6. Nell'elenco a discesa di configurazione Trigger, seleziona DynamoDB.

  7. Nell'elenco a discesa della tabella DynamoDB, selezionare. cqrses-customer-cmd

  8. Nell'elenco a discesa Posizione iniziale, seleziona Taglia orizzonte da. Trim horizon significa che il trigger DynamoDB inizierà a leggere dall'ultimo record di stream (non tagliato), che è il record più vecchio dello shard.

  9. Seleziona la casella di controllo Abilita trigger.

  10. Per i campi rimanenti, mantieni i valori predefiniti e scegli Aggiungi.

Dopo che il listener è stato collegato correttamente alla tabella DynamoDB, verrà visualizzato nella pagina di progettazione Lambda.

Sviluppatore di app

Pubblica e allega la funzione EventSourceReward Lambda.

Per pubblicare e allegare la funzione EventSourceReward Lambda, ripeti i passaggi delle due storie precedenti, selezionando cqrses-reward-cmddall'elenco a discesa della tabella DynamoDB.

Sviluppatore di app
AttivitàDescrizioneCompetenze richieste

Prova lo stream e il trigger Lambda.

  1. In Visual Studio, vai a AWS Explorer.

  2. Espandi AWS Lambda e scegli la CommandRedeemRewardfunzione (fai doppio clic). Nella finestra della funzione che si apre, puoi testare la funzione.

  3. Nella casella di testo Request, inserisci i dati della richiesta in formato JavaScript Object Notation (JSON). Per una richiesta di esempio, vedete Dati di test nella sezione Informazioni aggiuntive.

  4. Scegli Richiama .

Sviluppatore di app

Convalida utilizzando la tabella delle query di ricompensa di DynamodDB.

  1. Apri la tabella. cqrses-reward-query

  2. Controlla i punti del cliente che ha riscattato il premio. I punti riscattati devono essere sottratti dal totale dei punti aggregati del cliente.

Sviluppatore di app

Convalida, utilizzando i registri. CloudWatch

  1. Vai a CloudWatch e scegli Gruppi di log.

  2. Il gruppo/aws/lambda/EventSourceRewardlog contiene i log del EventSourceReward trigger. Tutte le chiamate Lambda vengono registrate, inclusi i messaggi inseriti context.Logger.LogLine e Console.Writeline inseriti nel codice Lambda.

Sviluppatore di app

Convalida il trigger. EventSourceCustomer

Per convalidare il EventSourceCustomer trigger, ripeti i passaggi di questa epopea, utilizzando la tabella dei clienti e i registri relativi al EventSourceCustomer trigger. CloudWatch

Sviluppatore di app

Risorse correlate

Riferimenti

Video

Informazioni aggiuntive

CQRSe approvvigionamento di eventi

CQRS

Il CQRS modello separa un singolo modello di operazioni concettuali, ad esempio un singolo modello di oggetto di accesso ai dati CRUD (creazione, lettura, aggiornamento, eliminazione), in modelli di operazioni di comando e interrogazione. Il modello di comando si riferisce a qualsiasi operazione, come la creazione, l'aggiornamento o l'eliminazione, che modifica lo stato. Il modello di interrogazione si riferisce a qualsiasi operazione che restituisce un valore.

Architettura con interfaccia di servizio, CRUD modello e database.
  1. Il CRUD modello Customer include le seguenti interfacce:

    • Create Customer()

    • UpdateCustomer()

    • DeleteCustomer()

    • AddPoints()

    • RedeemPoints()

    • GetVIPCustomers()

    • GetCustomerList()

    • GetCustomerPoints()

Man mano che i requisiti diventano più complessi, puoi passare da questo approccio a modello singolo. CQRSutilizza un modello di comandi e un modello di interrogazione per separare la responsabilità di scrittura e lettura dei dati. In questo modo, i dati possono essere mantenuti e gestiti in modo indipendente. Con una chiara separazione delle responsabilità, i miglioramenti apportati a ciascun modello non influiscono sull'altro. Questa separazione migliora la manutenzione e le prestazioni e riduce la complessità dell'applicazione man mano che cresce.

L'applicazione si è divisa in modelli di comando e query, condividendo un unico database.
  1. Interfacce nel modello Customer Command:

    • Create Customer()

    • UpdateCustomer()

    • DeleteCustomer()

    • AddPoints()

    • RedeemPoints()

  2. Interfacce nel modello Customer Query:

    • GetVIPCustomers()

    • GetCustomerList()

    • GetCustomerPoints()

    • GetMonthlyStatement()

Per un esempio di codice, vedi Directory del codice sorgente.

Il CQRS pattern quindi disaccoppia il database. Questo disaccoppiamento porta alla totale indipendenza di ogni servizio, che è l'ingrediente principale dell'architettura dei microservizi.

Database separati per modelli di comando e interrogazione.

Utilizzando CQRS in the AWS Cloud, puoi ottimizzare ulteriormente ogni servizio. Ad esempio, puoi impostare diverse impostazioni di elaborazione o scegliere tra un microservizio serverless o basato su container. Puoi sostituire la memorizzazione nella cache locale con Amazon. ElastiCache Se disponi di un messaggio di pubblicazione/sottoscrizione locale, puoi sostituirlo con Amazon Simple Notification Service (Amazon). SNS Inoltre, puoi sfruttare pay-as-you-go i prezzi e l'ampia gamma di AWS servizi che paghi solo per ciò che usi.

CQRSinclude i seguenti vantaggi:

  • Scalabilità indipendente: ogni modello può avere la propria strategia di scalabilità adattata per soddisfare i requisiti e la domanda del servizio. Analogamente alle applicazioni ad alte prestazioni, la separazione di lettura e scrittura consente al modello di scalare in modo indipendente per soddisfare ogni esigenza. È inoltre possibile aggiungere o ridurre le risorse di elaborazione per soddisfare la richiesta di scalabilità di un modello senza influire sull'altro.

  • Manutenzione indipendente: la separazione dei modelli di query e comando migliora la manutenibilità dei modelli. È possibile apportare modifiche e miglioramenti al codice di un modello senza influire sull'altro.

  • Sicurezza: è più semplice applicare le autorizzazioni e le politiche a modelli separati per la lettura e la scrittura.

  • Letture ottimizzate: è possibile definire uno schema ottimizzato per le query. Ad esempio, è possibile definire uno schema per i dati aggregati e uno schema separato per le tabelle dei fatti.

  • Integrazione: CQRS si adatta bene ai modelli di programmazione basati su eventi.

  • Complessità gestita: la separazione in modelli di query e comandi è adatta a domini complessi.

Durante l'utilizzoCQRS, tieni presente le seguenti avvertenze:

  • Il CQRS modello si applica solo a una parte specifica di un'applicazione e non all'intera applicazione. Se implementato in un dominio che non corrisponde al modello, può ridurre la produttività, aumentare i rischi e introdurre complessità.

  • Il pattern funziona meglio per i modelli utilizzati di frequente che presentano uno squilibrio nelle operazioni di lettura e scrittura.

  • Per le applicazioni che richiedono molta lettura, come i report di grandi dimensioni che richiedono tempo per l'elaborazione, CQRS offre la possibilità di selezionare il database giusto e creare uno schema per archiviare i dati aggregati. Ciò migliora il tempo di risposta di lettura e visualizzazione del report elaborando i dati del report una sola volta e scaricandoli nella tabella aggregata.

  • Per le applicazioni che richiedono molta scrittura, è possibile configurare il database per le operazioni di scrittura e consentire al comando microservice di scalare in modo indipendente quando la richiesta di scrittura aumenta. Per esempi, consulta and microservices. AWS.APG.CQRSES.CommandRedeemRewardLambda AWS.APG.CQRSES.CommandAddRewardLambda

Approvvigionamento di eventi

Il passaggio successivo consiste nell'utilizzare l'origine degli eventi per sincronizzare il database delle query quando viene eseguito un comando. Ad esempio, considerate i seguenti eventi:

  • Viene aggiunto un punto premio cliente che richiede l'aggiornamento dei punti premio totali o aggregati del cliente nel database delle query.

  • Il cognome di un cliente viene aggiornato nel database dei comandi, il che richiede l'aggiornamento delle informazioni sostitutive sul cliente contenute nel database delle query.

Nel CRUD modello tradizionale, si garantisce la coerenza dei dati bloccandoli fino al termine di una transazione. Nell'event sourcing, i dati vengono sincronizzati mediante la pubblicazione di una serie di eventi che verranno utilizzati da un abbonato per aggiornare i rispettivi dati.

Il modello di sourcing degli eventi garantisce e registra una serie completa di azioni intraprese sui dati e le pubblica attraverso una sequenza di eventi. Questi eventi rappresentano un insieme di modifiche ai dati che i sottoscrittori di quell'evento devono elaborare per mantenere aggiornato il proprio record. Questi eventi vengono utilizzati dal sottoscrittore, sincronizzando i dati nel database del sottoscrittore. In questo caso, si tratta del database delle interrogazioni.

Il diagramma seguente mostra l'origine degli eventi utilizzata con CQRS on. AWS

Architettura a microservizi CQRS e modelli di sourcing degli eventi che utilizzano servizi serverless. AWS
  1. Le funzioni Command Lambda eseguono operazioni di scrittura, come creare, aggiornare o eliminare, sul database.

  2. Le funzioni Query Lambda eseguono operazioni di lettura, come get o select, sul database.

  3. Questa funzione Lambda elabora i flussi DynamoDB dal database Command e aggiorna il database Query per le modifiche. Puoi utilizzare questa funzione anche per pubblicare un messaggio su Amazon in SNS modo che i suoi abbonati possano elaborare i dati.

  4. (Facoltativo) Il sottoscrittore dell'evento Lambda elabora il messaggio pubblicato da Amazon SNS e aggiorna il database Query.

  5. (Facoltativo) Amazon SNS invia una notifica via e-mail dell'operazione di scrittura.

AttivoAWS, il database delle query può essere sincronizzato tramite DynamoDB Streams. DynamoDB acquisisce una sequenza ordinata nel tempo di modifiche a livello di elemento in una tabella DynamoDB quasi in tempo reale e archivia le informazioni in modo duraturo entro 24 ore.

L'attivazione di DynamoDB Streams consente al database di pubblicare una sequenza di eventi che rende possibile lo schema di sourcing degli eventi. Il pattern di origine degli eventi aggiunge il sottoscrittore dell'evento. L'applicazione Event Subscriber utilizza l'evento e lo elabora in base alla responsabilità del sottoscrittore. Nel diagramma precedente, il sottoscrittore dell'evento invia le modifiche al database Query DynamoDB per mantenere i dati sincronizzati. L'uso di AmazonSNS, del broker di messaggi e dell'applicazione per abbonati agli eventi mantiene l'architettura disaccoppiata.

L'approvvigionamento di eventi include i seguenti vantaggi:

  • Coerenza per i dati transazionali

  • Una pista di controllo e una cronologia delle azioni affidabili, che possono essere utilizzate per monitorare le azioni intraprese nei dati

  • Consente alle applicazioni distribuite come i microservizi di sincronizzare i dati in tutto l'ambiente

  • Pubblicazione affidabile degli eventi ogni volta che lo stato cambia

  • Ricostruzione o riproduzione degli stati passati

  • Entità liberamente accoppiate che scambiano eventi per la migrazione da un'applicazione monolitica ai microservizi

  • Riduzione dei conflitti causati dagli aggiornamenti simultanei; l'event sourcing evita la necessità di aggiornare gli oggetti direttamente nell'archivio dati

  • Flessibilità ed estensibilità grazie al disaccoppiamento tra attività ed evento

  • Aggiornamenti di sistema esterni

  • Gestione di più attività in un unico evento

Quando utilizzi il sourcing degli eventi, tieni presente le seguenti avvertenze:

  • Poiché si verifica un certo ritardo nell'aggiornamento dei dati tra i database degli abbonati di origine, l'unico modo per annullare una modifica consiste nell'aggiungere un evento di compensazione all'archivio eventi.

  • L'implementazione dell'event sourcing presenta una curva di apprendimento a causa del suo diverso stile di programmazione.

Dati di test

Utilizza i seguenti dati di test per testare la funzione Lambda dopo una corretta implementazione.

CommandCreate Cliente

{ "Id":1501, "Firstname":"John", "Lastname":"Done", "CompanyName":"AnyCompany", "Address": "USA", "VIP":true }

CommandUpdate Cliente

{ "Id":1501, "Firstname":"John", "Lastname":"Doe", "CompanyName":"Example Corp.", "Address": "Seattle, USA", "VIP":true }

CommandDelete Cliente

Inserisci l'ID cliente come dati della richiesta. Ad esempio, se l'ID cliente è 151, inserisci 151 come dati della richiesta.

151

QueryCustomerList

Questo campo è vuoto. Quando viene richiamato, restituirà tutti i clienti.

CommandAddReward

Ciò aggiungerà 40 punti al cliente con ID 1 (Richard).

{ "Id":10101, "CustomerId":1, "Points":40 }

CommandRedeemReward

In questo modo verranno detratti 15 punti dal cliente con ID 1 (Richard).

{ "Id":10110, "CustomerId":1, "Points":15 }

QueryReward

Inserisci l'ID del cliente. Ad esempio, inserisci 1 per Richard, 2 per Arnav e 3 per Shirley.

2

Directory del codice sorgente

Usa la tabella seguente come guida alla struttura di directory della soluzione Visual Studio. 

CQRSDirectory della soluzione di esempio di codice locale

Directory di soluzioni con servizi di comando e interrogazione ampliata.

CRUDModello di cliente

CQRSEsempio di codice locale\ CRUD Model\AWS. APG. CQRSES. DALprogetto

CQRSversione del CRUD modello Customer

  • Comando cliente: CQRS On-Premises Code Sample\CQRS Model\Command Microservice\AWS.APG.CQRSES.Command progetto

  • Richiesta del cliente: CQRS On-Premises Code Sample\CQRS Model\Query Microservice\AWS.APG.CQRSES.Query progetto

Microservizi Command and Query

Il microservizio Command si trova nella cartella della soluzione: CQRS On-Premises Code Sample\CQRS Model\Command Microservice

  • AWS.APG.CQRSES.CommandMicroserviceASP. NETAPIIl progetto principale funge da punto di ingresso in cui i consumatori interagiscono con il servizio.

  • AWS.APG.CQRSES.Command. NETIl progetto principale è un oggetto che ospita oggetti e interfacce relativi ai comandi.

Il microservizio di interrogazione si trova nella cartella della soluzione: CQRS On-Premises Code Sample\CQRS Model\Query Microservice

  • AWS.APG.CQRSES.QueryMicroserviceASP. NETAPIIl progetto principale funge da punto di ingresso in cui i consumatori interagiscono con il servizio.

  • AWS.APG.CQRSES.Query. NETIl progetto principale è un oggetto che ospita oggetti e interfacce relativi alle query.

CQRSAWSDirectory di soluzioni di codice serverless

Directory di soluzioni che mostra sia i microservizi che la fonte degli eventi espansa.

Questo codice è la AWS versione del codice locale che utilizza servizi AWS serverless.

In C#. NETCore, ogni funzione Lambda è rappresentata da una. NETProgetto principale. Nel codice di esempio di questo modello, esiste un progetto separato per ogni interfaccia nei modelli di comando e query.

CQRSutilizzo AWS dei servizi

È possibile trovare la directory della soluzione principale per CQRS l'utilizzo dei servizi AWS serverless nella CQRS AWS Serverless\CQRS cartella. L'esempio include due modelli: Customer e Reward.

Le funzioni di comando Lambda per Customer e Reward si trovano nelle cartelle CQRS\Command Microservice\Customer eCQRS\Command Microservice\Reward. Contengono i seguenti progetti Lambda:

  • Comando cliente: CommandCreateLambdaCommandDeleteLambda, e CommandUpdateLambda

  • Comando di ricompensa: CommandAddRewardLambda e CommandRedeemRewardLambda

Le funzioni di interrogazione Lambda per Customer e Reward si trovano nelle cartelle CQRS\Query Microservice\Customer andCQRS\QueryMicroservice\Reward. Contengono i progetti QueryCustomerListLambda e QueryRewardLambda Lambda.

CQRSprogetto di test

Il progetto di test si trova nella CQRS\Tests cartella. Questo progetto contiene uno script di test per automatizzare il test delle funzioni CQRS Lambda.

Approvvigionamento di eventi tramite servizi AWS

I seguenti gestori di eventi Lambda vengono avviati dai flussi DynamoDB Customer e Reward per elaborare e sincronizzare i dati nelle tabelle di query.

  • La funzione EventSourceCustomer Lambda è mappata sul flusso cqrses-customer-cmd DynamoDB della tabella Customer ().

  • La funzione EventSourceReward Lambda è mappata sul flusso cqrses-reward-cmd DynamoDB della tabella Reward ().

Allegati

Per accedere a contenuti aggiuntivi associati a questo documento, decomprimi il seguente file: attachment.zip