Le CQRS est un très bon outil en matière de programmation. Il est vraiment utile et peut vous faciliter beaucoup de choses, continuez à lire et apprenez tout sur le CQRS.
Qu'est-ce que le CQRS?
CQRS es un patrón arquitectónico, donde el acrónimo significa Segregación de Responsabilidad de Consulta de Comando (o Command Mettre en doute Responsibility Segregation, en inglés). Podemos hablar de CQRS cuando las operaciones de lectura de datos se separan de las operaciones de escritura de datos y ocurren en una interfaz diferente.
En la mayoría de los sistemas CQRS, las operaciones de lectura y escritura utilizan diferentes modelos de datos, a veces incluso diferentes almacenes de datos. Este tipo de segregación hace que être más fácil escalar, leer y escribir operaciones y controlar la seguridad, pero agrega complejidad adicional a tu sistema.
Node.js at Scale, est une collection d'articles qui se concentrent sur les besoins des entreprises disposant d'installations Node.js plus importantes et de Node avancé.
Le niveau de ségrégation peut varier dans les systèmes CQRS:
- Stockages de données uniques et modèle séparé pour la lecture et la mise à jour des données.
- Magasins de données séparés et modèle séparé pour la lecture et la mise à jour des données.
Dans la séparation de magasin de données la plus simple, nous pouvons utiliser des réplicas en lecture seule pour réaliser la ségrégation.
Pourquoi et quand utiliser le CQRS?
Dans un système de gestion de données typique, toutes les opérations CRUD (créer une mise à jour de lecture de suppression) s'exécutent sur la même interface d'entités dans un seul magasin de données. Comment créer, mettre à jour, interroger et supprimer des lignes de table dans une base de données SQL via le même modèle.
Le CQRS brille vraiment par rapport à l'approche traditionnelle (utilisant un modèle unique) lors de la création de modèles de données complexes à valider et répond à votre logique métier lorsque la manipulation des données se produit. Les opérations de lecture par rapport aux opérations de mise à jour et d'écriture peuvent être très différentes ou beaucoup plus simples, comme accéder uniquement à un sous-ensemble de vos données.
Un exemple très frappant
En nuestra herramienta de monitoreo Node.js , usamos CQRS para segregar el almacenamiento y la representación de los datos. Por ejemplo, cuando ve una visualización de seguimiento distribuido en nuestra interface utilisateur, los datos detrás de ella llegaron en trozos más pequeños de los agentes de aplicaciones de nuestros clientes a nuestra API de recopilador público.
Dans l'API Collector, nous effectuons simplement une validation fine et envoyons les données à une file d'attente de messagerie pour traitement. À l'autre extrémité de la file d'attente, les travailleurs consomment des messages et résolvent toutes les dépendances nécessaires via d'autres services. Ces travailleurs enregistrent également les données transformées dans la base de données.
En cas de problème, nous renvoyons le message avec un repli exponentiel et une limite maximale à notre file d'attente de messagerie. Par rapport à ce flux d'écriture de données complexe, du côté rendu du flux, nous interrogeons uniquement une base de données de réplique en lecture et visualisons le résultat pour nos clients.
CQRS et sa source d'événements
He visto muchas veces que las gens están confundiendo estos dos conceptos. Ambos son muy utilizados en infraestructuras dirigidas por eventos como en micro-servicios controlados por eventos, pero tienen significados muy diferentes.
Base de données de rapports - Denormalizer
Dans certains systèmes événementiels, le CQRS est implémenté de sorte que le système contienne une ou plusieurs bases de données de rapports.
Una base de datos de informes es un almacenamiento de solo lectura completamente diferente que modela y conserva los datos en el mejor formato para representarlos. Está bien almacenarlo en un formato des-normalizado para optimizarlo para las necesidades del client. En algunos casos, la base de datos de informes solo contiene datos derivados, incluso de múltiples fuentes de datos.
Dans une architecture de microservices, nous appelons un service Denormalizer s'il écoute certains événements et maintient une base de données de rapports basés sur eux. Le client lit la base de données de rapports à partir du service dénormalisé.
Un ejemplo puede ser que el servicio de perfil de Nom d'utilisateur emita un un événement user.edit
avec des informations utiles {id: 1, nom: 'Mary Anne', statut: 'churn'}
, Le service Denormalizer l'écoute, mais ne le stocke que dans sa base de données de rapports {nom: 'Mary Anne'}
, car le client n'est pas intéressé par l'état de désabonnement interne de l'utilisateur.
Il peut être difficile de synchroniser une base de données de rapports. Habituellement, nous ne pouvons viser qu'une cohérence éventuelle.
Autre
CQRS est un modèle architectural puissant pour séparer les opérations de lecture et d'écriture et leurs interfaces, mais il ajoute également une complexité supplémentaire à votre système. Dans la plupart des cas, vous ne devez pas utiliser CQRS pour l'ensemble du système, uniquement pour des parties spécifiques où la complexité et l'évolutivité le rendent nécessaire.
Pour en savoir plus sur le CQRS et les bases de données de rapports, je vous recommande de consulter les ressources suivantes:
- CQRS - Martin Fowler
- CQRS - MSDN
- CQRS, interface utilisateur basée sur les tâches, source d'événement à nouveau! - Greg Young
- CQRS et Event Source - Code on the Beach 2014 - Greg Young
- Base de données des rapports - Martin Fowler
Félicitations pour avoir terminé cette leçon!