Implementieren Sie das Transactional-Outbox-Muster mit Dataverse

Unternehmenslösungen müssen Nachrichten zuverlässig übermitteln, wenn Datenänderungen in Dataverse auftreten. Diese Referenzarchitektur zeigt, wie Sie das Transactional Outbox pattern mit Dataverse implementieren, um das Risiko eines Nachrichtenverlusts zu reduzieren und integrierte Systeme synchron zu halten.

Tip

Dieser Artikel enthält ein Beispielszenario und eine generalisierte Beispielarchitektur, um zu veranschaulichen, wie eine zuverlässige Ereignisübermittlung von Dataverse implementiert wird. Das Architekturbeispiel kann für viele verschiedene Szenarien und Branchen modifiziert werden.

Architekturdiagramm

Architekturdiagramm, das zeigt, wie Dataverse das Transactional-Outbox-Muster implementiert, indem Outbox-Datensätze in derselben Transaktion wie Geschäftsdatenänderungen gespeichert und Nachrichten zur nachgelagerten Verarbeitung an Azure Service Bus veröffentlicht werden.

Arbeitsablauf

Die folgenden Schritte beschreiben den Workflow, der im Beispielarchitekturdiagramm dargestellt ist:

  1. Ein Datenvorgang in Dataverse tritt auf, z. B. das Erstellen oder Aktualisieren eines Kontaktdatensatzes. Dieser Vorgang erstellt eine Datenbanktransaktion.
  2. Ein dataverse synchrones Plug-In wird als Reaktion auf dieses Ereignis ausgelöst und erstellt einen Datensatz in einer Outbox-Tabelle innerhalb von Dataverse als Teil derselben Transaktion.
  3. Wenn das Plug-In erfolgreich ausgeführt wird, übernimmt die Transaktion sowohl die Änderungen am Outbox-Datensatz als auch die Änderungen am ursprünglichen Datensatz (z. B. Kontakt).
  4. Wenn die Plug-In-Ausführung fehlschlägt, wird das ursprüngliche Datenereignis zurückgerollt, und Dataverse führt keinen Commit für Datensatzänderungen durch.
  5. Ein asynchrones Plug-In wird als Reaktion auf die Erstellung eines Datensatzes in der Postausgangstabelle in Dataverse ausgelöst und schreibt eine Nachricht in eine Azure Service Bus Warteschlange oder ein Topic.
  6. Ein Nachrichtenkonsument lauscht auf Nachrichten, um sie zu verarbeiten und an ein Zielsystem weiterzuleiten.

Komponenten

Dataverse ist das führende Quelltransaktionssystem/System of Record, in dem das Datenereignis auftritt und die Outbox-Tabelle liegt. Sie sendet Nachrichten asynchron mithilfe eines Plug-Ins an den Nachrichtenbroker.

Azure Service Bus ist der zuverlässige Unternehmensbroker, der Nachrichten von Dataverse zur Verarbeitung durch empfangende Systeme empfängt.

  • Warteschlangen sind ideal, wenn ein einzelner Empfänger einer Nachricht vorhanden ist.
  • Themen sind am besten geeignet, wenn viele Abonnenten dieselbe Nachricht verarbeiten oder Filterkriterien zum selektiven Verarbeiten von Nachrichten benötigen.

Azure Monitor ist eine umfassende Überwachungslösung zum Sammeln, Analysieren und Reagieren auf Überwachungsdaten aus Cloud- und lokalen Lösungen. Verwenden Sie integrierte Metriken für Azure Service Bus, um die Anzahl der Nachrichten in einer Warteschlange, einem Themenbereich oder einer Dead-Letter-Warteschlange zu überwachen.

Azure-Anwendung Insights wird zur Anwendungsleistungsüberwachung verwendet und kann für Dataverse-Plug-Ins aktiviert werden, um Ablaufverfolgungsprotokolle an einen Application Insights-Arbeitsbereich zu senden.

Alternative Optionen:

  • Azure Logic Apps: Eine praktikable Low-Code-Alternative zum Übermitteln von Nachrichten aus der Postausgangstabelle an den Nachrichtenbroker, wenn Sie genauer steuern möchten, wann die Orchestrierung und Übermittlung der Nachricht ausgelöst werden soll (z. B. Mikrobatching).
  • Azure Functions: Eine Code-first-Alternative, die Ihnen die größte Flexibilität und Skalierung bietet, um höhere Volumes zu verarbeiten und Wiederholungen bei zeitweiligen Fehlern zu handhaben.

Details zum Szenario

Unternehmenslösungen müssen häufig kritische Daten über Nachrichten mit anderen Systemen austauschen. Um die Konsistenz in allen Systemen zu gewährleisten, behandeln Sie den Datenvorgang und die Nachrichtenübermittlung als einzelne atomare Operation. Die meisten Transaktionssysteme und Nachrichtenbroker unterstützen jedoch selten verteilte Transaktionen oder führen eine enge Kopplung ein, die Sie vermeiden möchten. Ohne eine verteilte Transaktion gibt es keine Zuverlässigkeitsgarantie, da beim Senden der Nachricht an den Broker ein Fehler auftreten kann, nachdem eine Transaktion festgeschrieben wurde.

Das Transactional-Outbox-Muster löst diese Herausforderung, indem in derselben lokalen Datenbanktransaktion eine Nachricht erstellt und die Geschäftsdaten aktualisiert werden. Ein separater Prozess kann dann die Nachricht aus der Postausgangstabelle an den Nachrichtenbroker übermitteln. Sporadische Prozessausfälle sind kein Problem. In der Postausgangstabelle wird die Nachricht gespeichert, sodass sie nicht verloren geht, und der Prozess wird erneut ausgeführt, bis er erfolgreich abgeschlossen ist.

Dataverse ist eine leistungsfähige und erweiterbare Low-Code-Datenplattform mit Transaktionsdatenspeicher, die dieses Muster für kritische ausgehende Integrationsszenarien implementieren kann.

Considerations

Diese Überlegungen implementieren die Säulen von Power Platform Well-Architected, eine Reihe von Leitprinzipien, welche die Qualität einer Workload verbessern. Weitere Informationen finden Sie in Microsoft Power Platform Well-Architected.

Zuverlässigkeit

Dieses Muster erhöht die Zuverlässigkeit erheblich, garantiert eine Zustellung mindestens einmal und eventuelle Konsistenz, indem die Transaktionskonsistenz sichergestellt wird. Durch die Verwendung eines Nachrichtenbrokers schützt es nachgelagerte Systeme davor, überwältigt zu werden, indem der Datenfluss zwischen Quell- und Zielsystemen gesteuert wird und sie vor Verfügbarkeitsproblemen nachgelagerter Systeme geschützt werden.

Wenn die Nachrichtenreihenfolge erforderlich ist, aktivieren Sie Azure Service Bus Sitzungen in der Warteschlange oder im Abonnement. Der Produzent sollte verwandten Nachrichten eine einheitliche SessionId, z. B. den Dataverse-Datensatz oder die Aggregat-ID, zuweisen, damit sie innerhalb dieser Sitzung in der Reihenfolge verarbeitet werden. Entwerfen Sie Verbraucher für die idempotente Verarbeitung, da dieses Muster eine mindestens einmalige Zustellung bietet und doppelte Nachrichten auftreten können. Wenn das Erkennen fehlender oder out-of-sequence-Ereignisse wichtig ist, können Nachrichten eine Sequenznummer auf Anwendungsebene enthalten. Die Sortierungsgarantien gelten innerhalb einer Sitzung und nicht global, und die Lösung sollte definieren, wie Wiederholungen und Dead-Letter-Nachrichten sich auf die nachfolgende Verarbeitung für diese Sitzung auswirken.

Security

Mithilfe von Azure-Diensten kann Dataverse sich über Azure verwaltete Identitäten über das Feature für verwaltete Power Platform-Identitäten beim Nachrichtenbroker (Azure Service Bus) authentifizieren. Dieser Ansatz beseitigt das Risiko der Speicherung vertraulicher Anmeldeinformationen und die durch das Rotieren von Secrets verursachten Ausfallzeiten.

Leistungseffizienz

Die Verwendung eines Nachrichtenbrokers wie Azure Service Bus trägt dazu bei, die Last zu abgleichen, um sicherzustellen, dass nachgeschaltete Anwendungen während zeiträumen mit hohem Volumen nicht überfordert werden.

Erwägen Sie die Verwendung einer Azure-Funktion über ein asynchrones Dataverse-Plug-In, um Nachrichten an Azure Service Bus zu senden, wenn Volumes sehr hoch werden. Dieser Ansatz bietet die größte Skalierung und Flexibilität, um eine große Menge von Datensätzen im Batch zu verarbeiten und vorübergehende Fehler zu behandeln.

Contributors

Microsoft verwaltet diesen Artikel. Die folgenden Mitwirkenden haben diesen Artikel geschrieben.

Hauptautoren: