Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
CQRS-Muster
Das CQRS-Muster (Command Query Responsibility segregation) trennt die Datenmutation oder den Befehlsteil eines Systems vom Abfrageteil. Sie können das CQRS-Muster verwenden, um Updates und Abfragen zu trennen, wenn sie unterschiedliche Anforderungen an Durchsatz, Latenz oder Konsistenz haben. Das CQRS-Muster teilt die Anwendung in zwei Teile auf – die Befehlsseite und die Abfrageseite –, wie im folgenden Diagramm gezeigt. Die Befehlsseite verarbeitet create
-update
, - und -delete
Anforderungen. Die Abfrageseite führt den query
Teil mithilfe der Lesereplikate aus.
Das Diagramm zeigt den folgenden Prozess:
-
Das Unternehmen interagiert mit der Anwendung, indem es Befehle über eine API sendet. Befehle sind Aktionen wie das Erstellen, Aktualisieren oder Löschen von Daten.
-
Die Anwendung verarbeitet den eingehenden Befehl auf der Befehlsseite. Dazu gehört die Validierung, Autorisierung und Ausführung des Vorgangs.
-
Die Anwendung behält die Daten des Befehls in der Schreibdatenbank (Befehl) bei.
-
Nachdem der Befehl in der Schreibdatenbank gespeichert wurde, werden Ereignisse ausgelöst, um die Daten in der Lese- (Abfrage-)Datenbank zu aktualisieren.
-
Die Lese- (Abfrage-)Datenbank verarbeitet und behält die Daten bei. Lesedatenbanken sind für spezifische Abfrageanforderungen optimiert.
-
Das Unternehmen interagiert mit Lese-APIs, um Abfragen an die Abfrageseite der Anwendung zu senden.
-
Die Anwendung verarbeitet die eingehende Abfrage auf der Abfrageseite und ruft die Daten aus der Lesedatenbank ab.
Sie können das CQRS-Muster implementieren, indem Sie verschiedene Kombinationen von Datenbanken verwenden, darunter:
-
Verwenden von relationalen Datenbankmanagementsystem (RDBMS)-Datenbanken sowohl für den Befehl als auch für die Abfrageseite. Schreibvorgänge gehen an die Primärdatenbank und Lesevorgänge können an Lesereplikate weitergeleitet werden. Beispiel: Amazon-RDS-Lesereplikate
-
Verwenden einer RDBMS-Datenbank für die Befehlsseite und einer NoSQL-Datenbank für die Abfrageseite. Beispiel: Modernisieren älterer Datenbanken mithilfe von Event Sourcing und CQRS mit AWS DMS
-
Verwenden von NoSQL-Datenbanken sowohl für den Befehl als auch für die Abfrageseite. Beispiel: Erstellen eines CQRS-Ereignisspeichers mit Amazon DynamoDB
-
Verwenden einer NoSQL-Datenbank für die Befehlsseite und einer RDBMS-Datenbank für die Abfrageseite, wie im folgenden Beispiel beschrieben.
In der folgenden Abbildung wird ein NoSQL-Datenspeicher wie DynamoDB verwendet, um den Schreibdurchsatz zu optimieren und flexible Abfragefunktionen bereitzustellen. Dadurch wird eine hohe Schreibskalierbarkeit für Workloads erreicht, die beim Hinzufügen von Daten klar definierte Zugriffsmuster aufweisen. Eine relationale Datenbank wie Amazon Aurora bietet komplexe Abfragefunktionen. Ein DynamoDB-Stream sendet Daten an eine Lambda-Funktion, die die Aurora-Tabelle aktualisiert.
Die Implementierung des CQRS-Musters mit DynamoDB und Aurora bietet folgende wichtige Vorteile:
-
DynamoDB ist eine vollständig verwaltete NoSQL-Datenbank, die Schreibvorgänge mit hohem Volumen verarbeiten kann, und Aurora bietet hohe Leseskalierbarkeit für komplexe Abfragen auf der Abfrageseite.
-
DynamoDB bietet Zugriff mit niedriger Latenz und hohem Durchsatz auf Daten, was es ideal für die Verarbeitung von Befehls- und Aktualisierungsvorgängen macht, und die Aurora-Leistung kann für komplexe Abfragen optimiert und optimiert werden.
-
Sowohl DynamoDB als auch Aurora bieten Serverless-Optionen, mit denen Ihr Unternehmen nur für Ressourcen zahlen kann, die auf der Nutzung basieren.
-
DynamoDB und Aurora sind vollständig verwaltete Services, wodurch der betriebliche Aufwand für die Verwaltung von Datenbanken, Backups und Skalierbarkeit reduziert wird.
Sie sollten die Verwendung des CQRS-Musters in Betracht ziehen, wenn:
-
Sie haben das database-per-service Muster implementiert und möchten Daten aus mehreren Microservices verknüpfen.
-
Ihre Lese- und Schreib-Workloads haben separate Anforderungen an Skalierung, Latenz und Konsistenz.
-
Die letztendliche Konsistenz ist für die Leseabfragen akzeptabel.
Wichtig
Das CQRS-Muster führt in der Regel zu einer letztendlichen Konsistenz zwischen den Datenspeichern.