Zum Hauptinhalt springen




CQRS ist ein sehr gutes Werkzeug für die Programmierung. Es ist sehr hilfreich und kann Ihnen viele Dinge erleichtern, weiterlesen und alles über CQRS lernen.

Was ist CQRS?

CQRS es un patrón arquitectónico, donde el acrónimo significa Segregación de Responsabilidad de Consulta de Comando (o Command Abfrage 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 Sein más fácil escalar, leer y escribir operaciones y controlar la seguridad, pero agrega complejidad adicional a tu sistema.

Node.js at Scale ist eine Sammlung von Artikeln, die sich auf die Bedürfnisse von Unternehmen mit größeren Node.js-Installationen und fortgeschrittenem Node konzentrieren.

Der Grad der Trennung kann in CQRS-Systemen variieren:

  • Einzelne Datenspeicher und separates Modell zum Lesen und Aktualisieren von Daten.
  • Separate Datenspeicher und separates Modell zum Lesen und Aktualisieren von Daten.

Bei der einfachsten Datenspeichertrennung können wir schreibgeschützte Replikate verwenden, um eine Trennung zu erreichen.

Warum und wann CQRS verwenden?

In einem typischen Datenverwaltungssystem werden alle CRUD-Operationen (Erstellen, Löschen, Lesen, Aktualisieren) auf derselben Schnittstelle von Entitäten in einem einzelnen Datenspeicher ausgeführt. Erstellen, Aktualisieren, Abfragen und Löschen von Tabellenzeilen in einer SQL-Datenbank über dasselbe Modell.

CQRS glänzt wirklich im Vergleich zum herkömmlichen Ansatz (unter Verwendung eines einzelnen Modells), wenn komplexe Datenmodelle zur Validierung erstellt werden, und erfüllt Ihre Geschäftslogik, wenn Datenmanipulationen auftreten. Lesevorgänge im Vergleich zu Aktualisierungs- und Schreibvorgängen können sehr unterschiedlich oder viel einfacher sein, z. B. der Zugriff auf nur eine Teilmenge Ihrer Daten.

Ein sehr anschauliches Beispiel

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 Benutzeroberfläche, 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.

In der Collector-API führen wir nur eine Thin-Validierung durch und senden die Daten zur Verarbeitung an eine Messaging-Warteschlange. Am anderen Ende der Warteschlange konsumieren Mitarbeiter Nachrichten und lösen alle erforderlichen Abhängigkeiten über andere Dienste auf. Diese Mitarbeiter speichern auch die transformierten Daten in der Datenbank.

Wenn ein Problem auftritt, geben wir die Nachricht mit einem exponentiellen Fallback und einer maximalen Begrenzung unserer Messaging-Warteschlange zurück. Im Vergleich zu diesem komplexen Datenschreibfluss fragen wir auf der Rendering-Seite des Flusses nur eine Lesereplikatdatenbank ab und visualisieren das Ergebnis für unsere Kunden.

CQRS und seine Ereignisquelle

He visto muchas veces que las Personen 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.

Berichtsdatenbank - Denormalizer

In einigen ereignisgesteuerten Systemen ist CQRS so implementiert, dass das System eine oder mehrere Berichtsdatenbanken enthält.

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 Klient. En algunos casos, la base de datos de informes solo contiene datos derivados, incluso de múltiples fuentes de datos.

In einer Microservices-Architektur rufen wir einen Denormalizer-Dienst auf, wenn er auf bestimmte Ereignisse wartet und eine Datenbank mit darauf basierenden Berichten verwaltet. Der Client liest die Berichtsdatenbank aus dem denormalisierten Dienst.

Un ejemplo puede ser que el servicio de perfil de Nutzername emita un Veranstaltung user.edit mit nützlichen Informationen {id: 1, name: 'Mary Anne', Status: 'churn'}Der Denormalizer-Dienst wartet darauf, speichert es jedoch nur in seiner Berichtsdatenbank {Name: 'Mary Anne'}, weil der Client nicht am internen Abwanderungszustand des Benutzers interessiert ist.

Es kann schwierig sein, eine Berichtsdatenbank synchron zu halten. Normalerweise können wir nur eine eventuelle Konsistenz anstreben.

Andere

CQRS ist ein leistungsstarkes Architekturmuster zur Trennung von Lese- und Schreibvorgängen und deren Schnittstellen. Es erhöht jedoch auch die Komplexität Ihres Systems. In den meisten Fällen sollten Sie CQRS nicht für das gesamte System verwenden, sondern nur für bestimmte Teile, für die Komplexität und Skalierbarkeit erforderlich sind.

Um mehr über CQRS und Berichtsdatenbanken zu erfahren, empfehle ich, die folgenden Ressourcen zu lesen:

  • CQRS - Martin Fowler
  • CQRS - MSDN
  • CQRS, aufgabenbasierte Benutzeroberfläche, Ereignisquelle erneut! - Greg Young
  • CQRS und Event Source - Code am Strand 2014 - Greg Young
  • Berichtsdatenbank - Martin Fowler

Herzlichen Glückwunsch zum Abschluss dieser Lektion!