Décomposez les monolithes en microservices en utilisant le CQRS et le sourcing d'événements - Recommandations AWS

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Décomposez les monolithes en microservices en utilisant le CQRS et le sourcing d'événements

Créée par Rodolfo Jr. Cerrada (AWS), Dmitry Gulin (AWS) et Tabby Ward (AWS)

Environnement : PoC ou pilote

Source : modèle Monolith CRUD

Cible : Microservices

Type R : Ré-architecte

Charge de travail : Open source

Technologies : Modernisation ; Messagerie et communications ; Sans serveur

Services AWS : Amazon DynamoDB ; AWS Lambda ; Amazon SNS

Récapitulatif

Ce modèle combine deux modèles, en utilisant à la fois le modèle de séparation des responsabilités des requêtes de commande (CQRS) et le modèle de source d'événements. Le modèle CQRS sépare les responsabilités des modèles de commande et de requête. Le modèle d'approvisionnement en événements tire parti de la communication asynchrone axée sur les événements pour améliorer l'expérience utilisateur globale.

Vous pouvez utiliser les services CQRS et Amazon Web Services (AWS) pour gérer et dimensionner chaque modèle de données indépendamment tout en refactorisant votre application monolithe en architecture de microservices. Vous pouvez ensuite utiliser le modèle d'origine des événements pour synchroniser les données de la base de commandes vers la base de données de requêtes.

Ce modèle utilise un exemple de code qui inclut un fichier de solution (*.sln) que vous pouvez ouvrir à l'aide de la dernière version de Visual Studio. L'exemple contient le code de l'API Reward pour montrer comment le CQRS et le sourcing d'événements fonctionnent dans les applications AWS sans serveur, traditionnelles ou sur site.

Pour en savoir plus sur le CQRS et le sourcing événementiel, consultez la section Informations supplémentaires.

Conditions préalables et limitations

Prérequis

  • Un compte AWS actif

  • Amazon CloudWatch

  • Tables Amazon DynamoDB

  • Streams Amazon DynamoDB

  • Clé d'accès et clé secrète d'AWS Identity and Access Management (IAM) ; pour plus d'informations, regardez la vidéo dans la section Ressources connexes

  • AWS Lambda

  • Connaissance de Visual Studio

  • Connaissance d'AWS Toolkit for Visual Studio ; pour plus d'informations, consultez la vidéo de démonstration d'AWS Toolkit for Visual Studio dans la section Ressources connexes

Versions du produit

Limites

  • L'exemple de code pour une application locale traditionnelle (API Web ASP.NET Core et objets d'accès aux données) n'est pas fourni avec une base de données. Cependant, il est fourni avec l'objet CustomerData en mémoire, qui agit comme une base de données fictive. Le code fourni est suffisant pour que vous puissiez tester le modèle.

Architecture

Pile technologique source

  • Projet d'API Web ASP.NET Core

  • Serveur Web IIS

  • Objet d'accès aux données

  • Modèle CRUD

Architecture de la source

Dans l'architecture source, le modèle CRUD contient à la fois des interfaces de commande et de requête dans une seule application. Pour un exemple de code, voir CustomerDAO.cs (ci-joint).

Connexions entre l'application, l'interface de service, le modèle CRUD du client et la base de données.

Pile technologique cible

  • Amazon DynamoDB

  • Streams Amazon DynamoDB

  • AWS Lambda

  • (Facultatif) Amazon API Gateway

  • (Facultatif) Amazon Simple Notification Service (Amazon SNS)

Architecture cible

Dans l'architecture cible, les interfaces de commande et de requête sont séparées. L'architecture illustrée dans le schéma suivant peut être étendue avec API Gateway et Amazon SNS. Pour plus d'informations, consultez la section Informations supplémentaires.

Application connectée aux microservices Customer Command et Customer Query sans serveur.
  1. Les fonctions Command Lambda exécutent des opérations d'écriture, telles que la création, la mise à jour ou la suppression, sur la base de données.

  2. Les fonctions Query Lambda exécutent des opérations de lecture, telles que get ou select, sur la base de données.

  3. Cette fonction Lambda traite les flux DynamoDB à partir de la base de données de commandes et met à jour la base de données Query en fonction des modifications.

Outils

Outils

  • Amazon DynamoDB — Amazon DynamoDB est un service de base de données NoSQL entièrement géré qui fournit des performances rapides et prévisibles ainsi qu'une évolutivité sans faille.

  • Amazon DynamoDB Streams — DynamoDB Streams capture une séquence chronologique de modifications au niveau des éléments dans n'importe quelle table DynamoDB. Il enregistre ensuite ces informations dans un journal pendant 24 heures au maximum. Le chiffrement au repos chiffre les données dans les flux DynamoDB Streams.

  • AWS Lambda — AWS Lambda est un service de calcul qui prend en charge l'exécution de code sans provisionner ni gérer de serveurs. Lambda exécute le code uniquement lorsque cela est nécessaire et se met à l'échelle automatiquement, qu'il s'agisse de quelques requêtes par jour ou de milliers de requêtes par seconde. Vous payez uniquement le temps de calcul que vous utilisez. Vous n'exposez aucuns frais quand votre code n'est pas exécuté.

  • AWS Management Console — L'AWS Management Console est une application Web qui comprend un large éventail de consoles de service pour gérer les services AWS.

  • Visual Studio 2019 Community Edition — Visual Studio 2019 est un environnement de développement intégré (IDE). L'édition communautaire est gratuite pour les contributeurs open source. Dans ce modèle, vous utiliserez Visual Studio 2019 Community Edition pour ouvrir, compiler et exécuter un exemple de code. Pour l'affichage uniquement, vous pouvez utiliser n'importe quel éditeur de texte ou Visual Studio Code.

  • AWS Toolkit for Visual Studio — Le kit AWS Toolkit pour Visual Studio est un plugin pour l'IDE Visual Studio. L'AWS Toolkit for Visual Studio facilite le développement, le débogage et le déploiement d'applications .NET utilisant les services AWS.

Code

L'exemple de code est joint. Pour obtenir des instructions sur le déploiement de l'exemple de code, consultez la section Epics.

Épopées

TâcheDescriptionCompétences requises

Ouvrez la solution.

  1. Téléchargez l'exemple de code source (CQRS-ES Code.zip) depuis la section Pièces jointes et extrayez les fichiers.

  2. Dans l'IDE Visual Studio, choisissez Fichier, Ouvrir, Solution de projet, puis accédez au dossier dans lequel vous avez extrait le code source.

  3. Choisissez AWS.APG.CQRSES.sln, puis Open. La solution complète est chargée dans Visual Studio.

Développeur d'applications

Créez la solution.

Ouvrez le menu contextuel (clic droit) de la solution, puis choisissez Build Solution. Cela permettra de créer et de compiler tous les projets de la solution. Il devrait être compilé avec succès.

L'explorateur de solutions Visual Studio doit afficher la structure du répertoire.

  • CQRS On-Premises Code Samplecontient un exemple d'utilisation du CQRS sur site.

  • CQRS AWS Serverlesscontient tous les exemples de code CQRS et de sourcing d'événements utilisant les services sans serveur AWS.

Développeur d'applications
TâcheDescriptionCompétences requises

Fournissez des informations d'identification.

Si vous n'avez pas encore de clé d'accès, regardez la vidéo dans la section Ressources connexes.

  1. Dans l'explorateur de solutions, développez CQRS AWS Serverless, puis développez le dossier Build solution.

  2. Développez le projet aws.apg.cqrses.build et visualisez le fichier. Program.cs

  3. Faites défiler l'écran vers le haut Program.cs et recherchezProgram().

  4. YOUR ACCESS KEYRemplacez-la par la clé d'accès à votre compte et YOUR SECRET KEY remplacez-la par la clé secrète de votre compte. Notez que dans un environnement de production, vous ne devez pas coder vos clés en dur. Vous pouvez plutôt utiliser AWS Secrets Manager pour stocker et récupérer les informations d'identification.

Développeur d'applications, ingénieur de données, DBA

Générez le projet.

Pour créer le projet, ouvrez le menu contextuel (clic droit) du projet aws.apg.cqrses.build, puis choisissez Build.

Développeur d'applications, ingénieur de données, DBA

Créez et remplissez les tables.

Pour créer les tables et les remplir avec des données de départ, ouvrez le menu contextuel (clic droit) du projet aws.apg.cqrses.build, puis choisissez Debug, Start New Instance.

Développeur d'applications, ingénieur de données, DBA

Vérifiez la construction de la table et les données.

Pour vérifier, accédez à AWS Explorer et développez Amazon DynamoDB. Il doit afficher les tables. Ouvrez chaque table pour afficher les exemples de données.

Développeur d'applications, ingénieur de données, DBA
TâcheDescriptionCompétences requises

Construisez le projet CQRS.

  1. Ouvrez la solution et accédez au dossier de solution CQRS AWS Services/CQRS/Tests.

  2. Dans le projet aws.apg.cqrses.cqrslambda.tests, ouvrez BaseFunctionTest .cs et remplacez et par les clés IAM que vous avez créées. AccessKeySecretKey

  3. Enregistrez les Modifications.

  4. Pour compiler et créer le projet de test, ouvrez le menu contextuel (clic droit) du projet, puis choisissez Construire.

Développeur d'applications, ingénieur de test

Construisez le projet d'approvisionnement en événements.

  1. Accédez au dossier de la solution CQRS AWS Services/Event Source/Tests

  2. Dans le fichier AWS.APG.CQRSES. EventSourceLambda.Teste le projet, ouvrez BaseFunctionTest.cs et remplacez AccessKeyet par SecretKeyles clés IAM que vous avez créées. 

  3. Enregistrez les Modifications.

  4. Pour compiler et créer le projet de test, ouvrez le menu contextuel (clic droit) du projet, puis choisissez Construire.

Développeur d'applications, ingénieur de test

Exécutez les tests.

Pour exécuter tous les tests, choisissez Afficher, Explorateur de tests, puis sélectionnez Exécuter tous les tests en mode Affichage. Tous les tests doivent réussir, ce qui est indiqué par une icône en forme de coche verte. 

Développeur d'applications, ingénieur de test
TâcheDescriptionCompétences requises

Publiez la première fonction Lambda.

  1. Dans l'Explorateur de solutions, ouvrez le menu contextuel (clic droit) du fichier AWS.APG.CQRSES. CommandCreateLambda projet, puis choisissez Publier sur AWS Lambda.

  2. Sélectionnez le profil que vous souhaitez utiliser, la région AWS dans laquelle vous souhaitez déployer la fonction Lambda, ainsi que le nom de la fonction.

  3. Pour les autres champs, conservez les valeurs par défaut et choisissez Next.

  4. Dans la liste déroulante Nom du rôle, sélectionnez AWSLambdaFullAccess.

  5. Pour fournir vos clés de compte, choisissez Ajouter, puis entrez AcessKey comme variable et votre clé d'accès comme valeur. Choisissez ensuite à nouveau Ajouter, entrez SecretKey comme variable et votre clé secrète comme valeur.

  6. Pour les autres champs, conservez les valeurs par défaut et choisissez Upload. Une fois la fonction de test Lambda chargée, elle apparaît automatiquement dans Visual Studio.

  7. Répétez les étapes 1 à 6 pour les projets suivants :

    • AWS.APG.CARSES. CommandDeleteLambda

    • AWS.APG.CARSES. CommandUpdateLambda

    • AWS.APG.CARSES. CommandAddRewardLambda

    • AWS.APG.CARSES. CommandRedeemRewardLambda

    • AWS.APG.CARSES. QueryCustomerListLambda

    • AWS.APG.CARSES. QueryRewqardLambda

Développeur d'applications, DevOps ingénieur

Vérifiez le téléchargement de la fonction.

(Facultatif) Vous pouvez vérifier que la fonction a été correctement chargée en accédant à AWS Explorer et en développant AWS Lambda. Pour ouvrir la fenêtre de test, choisissez la fonction Lambda (double-clic).

Développeur d'applications, DevOps ingénieur

Testez la fonction Lambda.

  1. Entrez les données de la demande ou copiez un exemple de données de demande à partir des données de test dans la section Informations supplémentaires. Assurez-vous de sélectionner les données correspondant à la fonction que vous testez.

  2. Pour exécuter le test, choisissez Invoquer. La réponse et les erreurs éventuelles sont affichées dans la zone de texte Réponse, et les journaux sont affichés dans la zone de texte Journaux ou dans CloudWatch Journaux.

  3. Pour vérifier les données, dans AWS Explorer, choisissez la table DynamoDB (double-cliquez).

Tous les projets Lambda du CQRS se trouvent dans CQRS AWS Serverless\CQRS\Command Microservice les dossiers  CQRS AWS Serverless\CQRS\Command Microservice et solution. Pour le répertoire des solutions et les projets, voir Répertoire du code source dans la section Informations supplémentaires.

Développeur d'applications, DevOps ingénieur

Publiez les fonctions restantes.

Répétez les étapes précédentes pour les projets suivants :

  • AWS.APG.CARSES. CommandDeleteLambda

  • AWS.APG.CARSES. CommandUpdateLambda

  • AWS.APG.CARSES. CommandAddRewardLambda

  • AWS.APG.CARSES. CommandRedeemRewardLambda

  • AWS.APG.CARSES. QueryCustomerListLambda

  • AWS.APG.CARSES. QueryRewqardLambda

Développeur d'applications, DevOps ingénieur
TâcheDescriptionCompétences requises

Publiez les gestionnaires d'événements Lambda destinés aux clients et aux récompenses.

Pour publier chaque gestionnaire d'événements, suivez les étapes décrites dans l'épopée précédente.

Les projets se trouvent dans les dossiers CQRS AWS Serverless\Event Source\Customer Event et CQRS AWS Serverless\Event Source\Reward Event solutions. Pour plus d'informations, consultez le répertoire du code source dans la section Informations supplémentaires.

Développeur d'applications

Joignez l'écouteur d'événements Lambda de source d'événements.

  1. Connectez-vous à l'AWS Management Console en utilisant le même compte que celui que vous utilisez lorsque vous publiez les projets Lambda.

  2. Pour la région, sélectionnez US East 1 ou la région dans laquelle vous avez déployé les fonctions Lambda lors de l'épopée précédente.

  3. Accédez au service Lambda.

  4. Sélectionnez la fonction EventSourceCustomer Lambda.

  5. Choisissez Ajouter un déclencheur.

  6. Dans la liste déroulante Configuration du déclencheur, sélectionnez DynamoDB.

  7. Dans la liste déroulante du tableau DynamoDB, sélectionnez. cqrses-customer-cmd

  8. Dans la liste déroulante Position de départ, sélectionnez Découper l'horizon à partir de. Le découpage de l'horizon signifie que le déclencheur DynamoDB commence à lire le dernier enregistrement de flux (non découpé), qui est le plus ancien enregistrement de la partition.

  9. Cochez la case Activer le déclencheur.

  10. Pour les autres champs, conservez les valeurs par défaut et choisissez Ajouter.

Une fois que l'écouteur est correctement attaché à la table DynamoDB, il s'affiche sur la page du concepteur Lambda.

Développeur d'applications

Publiez et attachez la fonction EventSourceReward Lambda.

Pour publier et associer la fonction EventSourceReward Lambda, répétez les étapes décrites dans les deux articles précédents, en sélectionnant dans la liste déroulante cqrses-reward-cmddu tableau DynamoDB.

Développeur d'applications
TâcheDescriptionCompétences requises

Testez le flux et le déclencheur Lambda.

  1. Dans Visual Studio, accédez à AWS Explorer.

  2. Développez AWS Lambda et choisissez la CommandRedeemRewardfonction (double-cliquez). Dans la fenêtre de fonction qui s'ouvre, vous pouvez tester la fonction.

  3. Dans la zone de texte Demande, entrez les données de la demande au format JSON ( JavaScript Object Notation). Pour un exemple de demande, voir Données de test dans la section Informations supplémentaires.

  4. Sélectionnez Invoquer .

Développeur d'applications

Validez à l'aide de la table de requêtes de récompenses DynamodDB.

  1. Ouvrez la cqrses-reward-querytable.

  2. Vérifiez les points du client qui a utilisé la récompense. Les points échangés doivent être soustraits du total des points cumulés du client.

Développeur d'applications

Validez à l'aide CloudWatch des journaux.

  1. Accédez aux groupes de journaux CloudWatch et choisissez-les.

  2. Le groupe de journaux /aws/lambda/ contient les EventSourceReward journaux du déclencheur. EventSourceReward Tous les appels Lambda sont enregistrés, y compris les messages que vous avez placés dans context.Logger.LogLine et Console.Writeline dans le code Lambda.

Développeur d'applications

Validez le EventSourceCustomer déclencheur.

Pour valider le EventSourceCustomer déclencheur, répétez les étapes de cette épopée en utilisant le tableau des clients et les CloudWatch journaux correspondants du EventSourceCustomer déclencheur.

Développeur d'applications

Ressources connexes

Références

Vidéos

Informations supplémentaires

CQRS et approvisionnement événementiel

CARS

Le modèle CQRS sépare un modèle d'opérations conceptuel unique, tel qu'un modèle CRUD (création, lecture, mise à jour, suppression) d'un objet d'accès aux données, en modèles d'opérations de commande et de requête. Le modèle de commande fait référence à toute opération, telle que la création, la mise à jour ou la suppression, qui modifie l'état. Le modèle de requête fait référence à toute opération qui renvoie une valeur.

Architecture avec interface de service, modèle CRUD et base de données.
  1. Le modèle Customer CRUD inclut les interfaces suivantes :

    • Create Customer()

    • UpdateCustomer()

    • DeleteCustomer()

    • AddPoints()

    • RedeemPoints()

    • GetVIPCustomers()

    • GetCustomerList()

    • GetCustomerPoints()

Au fur et à mesure que vos exigences se complexifient, vous pouvez abandonner cette approche à modèle unique. Le CQRS utilise un modèle de commande et un modèle de requête pour séparer les responsabilités d'écriture et de lecture des données. Ainsi, les données peuvent être maintenues et gérées de manière indépendante. Grâce à une séparation claire des responsabilités, les améliorations apportées à chaque modèle n'ont aucune incidence sur l'autre. Cette séparation améliore la maintenance et les performances, et elle réduit la complexité de l'application à mesure qu'elle grandit.

L'application s'est séparée en modèles de commande et de requête, partageant une seule base de données.
  1. Interfaces dans le modèle de commande client :

    • Create Customer()

    • UpdateCustomer()

    • DeleteCustomer()

    • AddPoints()

    • RedeemPoints()

  2. Interfaces dans le modèle de requête client :

    • GetVIPCustomers()

    • GetCustomerList()

    • GetCustomerPoints()

    • GetMonthlyStatement()

Pour un exemple de code, voir Répertoire du code source.

Le modèle CQRS découple ensuite la base de données. Ce découplage conduit à l'indépendance totale de chaque service, qui est l'ingrédient principal de l'architecture des microservices.

Bases de données distinctes pour les modèles de commande et de requête.

En utilisant le CQRS dans le cloud AWS, vous pouvez optimiser davantage chaque service. Par exemple, vous pouvez définir différents paramètres de calcul ou choisir entre un microservice sans serveur ou un microservice basé sur des conteneurs. Vous pouvez remplacer votre mise en cache sur site par Amazon. ElastiCache Si vous disposez d'un message de publication/d'abonnement sur site, vous pouvez le remplacer par Amazon Simple Notification Service (Amazon SNS). En outre, vous pouvez profiter de la pay-as-you-go tarification et de la vaste gamme de services AWS selon lesquels vous ne payez que pour ce que vous utilisez.

Le CQRS inclut les avantages suivants :

  • Mise à l'échelle indépendante : la stratégie de mise à l'échelle de chaque modèle peut être ajustée pour répondre aux exigences et à la demande du service. Comme pour les applications hautes performances, la séparation de la lecture et de l'écriture permet au modèle d'évoluer indépendamment pour répondre à chaque demande. Vous pouvez également ajouter ou réduire des ressources de calcul pour répondre à la demande d'évolutivité d'un modèle sans affecter l'autre.

  • Maintenance indépendante : la séparation des modèles de requête et de commande améliore la maintenabilité des modèles. Vous pouvez apporter des modifications et des améliorations au code d'un modèle sans affecter l'autre.

  • Sécurité — Il est plus facile d'appliquer les autorisations et les politiques à des modèles distincts pour la lecture et l'écriture.

  • Lectures optimisées : vous pouvez définir un schéma optimisé pour les requêtes. Par exemple, vous pouvez définir un schéma pour les données agrégées et un schéma distinct pour les tables de faits.

  • Intégration — Le CQRS s'adapte parfaitement aux modèles de programmation basés sur les événements.

  • Complexité gérée — La séparation en modèles de requête et de commande convient aux domaines complexes.

Lorsque vous utilisez le CQRS, gardez à l'esprit les mises en garde suivantes :

  • Le modèle CQRS ne s'applique qu'à une partie spécifique d'une application et non à l'ensemble de l'application. Si elle est mise en œuvre dans un domaine qui ne correspond pas au modèle, elle peut réduire la productivité, augmenter les risques et introduire de la complexité.

  • Le modèle fonctionne mieux pour les modèles fréquemment utilisés dont les opérations de lecture et d'écriture sont déséquilibrées.

  • Pour les applications nécessitant beaucoup de lecture, telles que les rapports volumineux dont le traitement prend du temps, le CQRS vous permet de sélectionner la bonne base de données et de créer un schéma pour stocker vos données agrégées. Cela améliore le temps de réponse lors de la lecture et de l'affichage du rapport en traitant les données du rapport une seule fois et en les enregistrant dans le tableau agrégé.

  • Pour les applications nécessitant beaucoup d'écriture, vous pouvez configurer la base de données pour les opérations d'écriture et autoriser le microservice de commande à évoluer indépendamment lorsque la demande d'écriture augmente. Pour des exemples, consultez les AWS.APG.CQRSES.CommandAddRewardLambda microservices AWS.APG.CQRSES.CommandRedeemRewardLambda et.

Approvisionnement d’événement

L'étape suivante consiste à utiliser la source d'événements pour synchroniser la base de données de requêtes lorsqu'une commande est exécutée. Par exemple, considérez les événements suivants :

  • Un point de récompense client est ajouté, ce qui nécessite la mise à jour du total ou du cumul des points de récompense du client dans la base de données de requêtes.

  • Le nom de famille d'un client est mis à jour dans la base de données de commandes, ce qui nécessite la mise à jour des informations du client de substitution dans la base de données de requêtes.

Dans le modèle CRUD traditionnel, vous garantissez la cohérence des données en verrouillant les données jusqu'à la fin d'une transaction. Lors de l'approvisionnement en événements, les données sont synchronisées grâce à la publication d'une série d'événements qui seront utilisés par un abonné pour mettre à jour ses données respectives.

Le modèle d'approvisionnement en événements garantit et enregistre une série complète d'actions entreprises sur les données et les publie par le biais d'une séquence d'événements. Ces événements représentent un ensemble de modifications apportées aux données que les abonnés à cet événement doivent traiter pour maintenir leur dossier à jour. Ces événements sont consommés par l'abonné, synchronisant les données de la base de données de l'abonné. Dans ce cas, il s'agit de la base de données de requêtes.

Le schéma suivant montre le sourcing d'événements utilisé avec CQRS sur AWS.

Architecture de microservices pour le CQRS et modèles d'approvisionnement d'événements à l'aide des services sans serveur AWS.
  1. Les fonctions Command Lambda exécutent des opérations d'écriture, telles que la création, la mise à jour ou la suppression, sur la base de données.

  2. Les fonctions Query Lambda exécutent des opérations de lecture, telles que get ou select, sur la base de données.

  3. Cette fonction Lambda traite les flux DynamoDB à partir de la base de données de commandes et met à jour la base de données Query en fonction des modifications. Vous pouvez également utiliser cette fonction pour publier un message sur Amazon SNS afin que ses abonnés puissent traiter les données.

  4. (Facultatif) L'abonné à l'événement Lambda traite le message publié par Amazon SNS et met à jour la base de données Query.

  5. (Facultatif) Amazon SNS envoie une notification par e-mail concernant l'opération d'écriture.

Sur AWS, la base de données de requêtes peut être synchronisée par DynamoDB Streams. DynamoDB capture une séquence chronologique de modifications au niveau des éléments dans une table DynamoBDB en temps quasi réel et stocke les informations de manière durable dans les 24 heures.

L'activation de DynamoDB Streams permet à la base de données de publier une séquence d'événements qui rend possible le modèle d'approvisionnement des événements. Le modèle d'approvisionnement des événements ajoute l'abonné à l'événement. L'application d'abonnement à l'événement consomme l'événement et le traite sous la responsabilité de l'abonné. Dans le schéma précédent, l'abonné à l'événement envoie les modifications à la base de données Query DynamoDB afin de maintenir les données synchronisées. L'utilisation d'Amazon SNS, du courtier de messages et de l'application d'abonnement aux événements permet de découpler l'architecture.

Le sourcing événementiel inclut les avantages suivants :

  • Cohérence des données transactionnelles

  • Une piste d'audit fiable et un historique des actions, qui peuvent être utilisés pour surveiller les actions entreprises dans les données

  • Permet aux applications distribuées telles que les microservices de synchroniser leurs données dans l'environnement

  • Publication fiable des événements chaque fois que l'État change

  • Reconstruire ou rejouer des états passés

  • Entités faiblement couplées qui échangent des événements pour la migration d'une application monolithique vers des microservices

  • Réduction des conflits provoqués par des mises à jour simultanées ; le sourcing d'événements évite de devoir mettre à jour les objets directement dans le magasin de données

  • Flexibilité et extensibilité grâce au découplage de la tâche et de l'événement

  • Mises à jour externes du système

  • Gestion de plusieurs tâches en un seul événement

Lorsque vous utilisez le sourcing d'événements, gardez à l'esprit les mises en garde suivantes :

  • En raison du retard dans la mise à jour des données entre les bases de données d'abonnés sources, le seul moyen d'annuler une modification est d'ajouter un événement compensateur au magasin d'événements.

  • La mise en œuvre du sourcing d'événements a une courbe d'apprentissage en raison de son style de programmation différent.

Données de test

Utilisez les données de test suivantes pour tester la fonction Lambda après un déploiement réussi.

CommandCreate Client

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

CommandUpdate Client

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

CommandDelete Client

Entrez l'identifiant du client en tant que donnée de demande. Par exemple, si l'ID client est 151, entrez 151 comme données de demande.

151

QueryCustomerList

C'est vide. Lorsqu'il est invoqué, il renvoie tous les clients.

CommandAddReward

Cela ajoutera 40 points au client ayant l'ID 1 (Richard).

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

CommandRedeemReward

Cela déduira 15 points au client ayant l'ID 1 (Richard).

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

QueryReward

Entrez l'identifiant du client. Par exemple, entrez 1 pour Richard, 2 pour Arnav et 3 pour Shirley.

2

Répertoire du code source

Utilisez le tableau suivant comme guide de la structure de répertoires de la solution Visual Studio. 

Répertoire d'exemples de solutions de code sur site du CQRS

Répertoire de solutions avec services de commande et de requête étendus.

Modèle CRUD du client

Exemple de code sur site CQRS \ Modèle CRUD \ Projet AWS.APG.CQRSES.DAL

Version CQRS du modèle CUSTOMER CRUD

  • Commande du client : CQRS On-Premises Code Sample\CQRS Model\Command Microservice\AWS.APG.CQRSES.Command projet

  • Requête du client : CQRS On-Premises Code Sample\CQRS Model\Query Microservice\AWS.APG.CQRSES.Query projet

Microservices de commande et de requête

Le microservice Command se trouve dans le dossier CQRS On-Premises Code Sample\CQRS Model\Command Microservice de solutions :

  • AWS.APG.CQRSES.CommandMicroserviceLe projet d'API ASP.NET Core constitue le point d'entrée où les consommateurs interagissent avec le service.

  • AWS.APG.CQRSES.CommandLe projet .NET Core est un objet qui héberge des objets et des interfaces liés aux commandes.

Le microservice de requête se trouve dans le dossier CQRS On-Premises Code Sample\CQRS Model\Query Microservice de solution :

  • AWS.APG.CQRSES.QueryMicroserviceLe projet d'API ASP.NET Core constitue le point d'entrée où les consommateurs interagissent avec le service.

  • AWS.APG.CQRSES.QueryLe projet .NET Core est un objet qui héberge des objets et des interfaces liés aux requêtes.

Répertoire de solutions de code sans serveur AWS CQRS

Répertoire de solutions affichant à la fois les microservices et la source d'événements étendus.

Ce code est la version AWS du code sur site utilisant les services sans serveur AWS.

Dans C# .NET Core, chaque fonction Lambda est représentée par un projet .NET Core. Dans l'exemple de code de ce modèle, il existe un projet distinct pour chaque interface dans les modèles de commande et de requête.

CQRS utilisant les services AWS

Le répertoire des solutions racine pour CQRS utilisant les services sans serveur AWS se trouve dans le CQRS AWS Serverless\CQRS dossier. L'exemple inclut deux modèles : client et récompense.

Les fonctions de commande Lambda pour Customer et Reward se trouvent sous CQRS\Command Microservice\Customer et CQRS\Command Microservice\Reward dans des dossiers. Ils contiennent les projets Lambda suivants :

  • Commande du client : CommandCreateLambdaCommandDeleteLambda, et CommandUpdateLambda

  • Commande de récompense : CommandAddRewardLambda et CommandRedeemRewardLambda

Les fonctions de requête Lambda pour Customer et Reward se trouvent dans les dossiers CQRS\Query Microservice\Customer etCQRS\QueryMicroservice\Reward. Ils contiennent les projets Lambda QueryCustomerListLambda et QueryRewardLambda Lambda.

Projet de test CQRS

Le projet de test se trouve sous le CQRS\Tests dossier. Ce projet contient un script de test pour automatiser le test des fonctions Lambda du CQRS.

Recherche d'événements à l'aide des services AWS

Les gestionnaires d'événements Lambda suivants sont lancés par les flux DynamoDB Customer et Reward pour traiter et synchroniser les données dans les tables de requêtes.

  • La fonction EventSourceCustomer Lambda est mappée au flux cqrses-customer-cmd DynamoDB de la table client ().

  • La fonction EventSourceReward Lambda est mappée au flux cqrses-reward-cmd DynamoDB de la table des récompenses ().

Pièces jointes

Pour accéder au contenu supplémentaire associé à ce document, décompressez le fichier suivant : attachment.zip