Het Transactional Outbox-pattern implementeren met Dataverse

Bedrijfsoplossingen moeten berichten betrouwbaar leveren wanneer er gegevenswijzigingen optreden in Dataverse. Deze referentiearchitectuur laat zien hoe u het Transactional Outbox-patroon implementeert met Dataverse om het risico op berichtverlies te verminderen en geïntegreerde systemen gesynchroniseerd te houden.

Tip

Dit artikel bevat een voorbeeldscenario en een gegeneraliseerde voorbeeldarchitectuur om te laten zien hoe u betrouwbare levering van gebeurtenissen vanuit Dataverse implementeert. Het architectuurvoorbeeld kan worden aangepast voor veel verschillende scenario's en branches.

Architectuurschema

Architectuurdiagram waarin wordt getoond hoe Dataverse het Transactional Outbox-patroon implementeert door outboxrecords op te slaan in dezelfde transactie als wijzigingen in bedrijfsgegevens en het publiceren van berichten naar Azure Service Bus voor downstreamverwerking.

Werkproces

De volgende stappen beschrijven de workflow die wordt weergegeven in het voorbeeldarchitectuurdiagram:

  1. Een gegevensbewerking in Dataverse vindt plaats, zoals het maken of bijwerken van een contactrecord. Met deze bewerking maakt u een databasetransactie.
  2. Een synchrone invoegtoepassing voor Dataverse wordt geactiveerd als reactie op deze gebeurtenis en maakt een record in een Postvak UIT-tabel in Dataverse als onderdeel van dezelfde transactie.
  3. Als de invoegtoepassing wordt uitgevoerd, worden met de transactie zowel de wijzigingen in het Postvak UIT als die in de oorspronkelijke record (bijvoorbeeld Contactpersoon) doorgevoerd.
  4. Als de uitvoering van de invoegtoepassing mislukt, wordt de oorspronkelijke gegevensgebeurtenis teruggedraaid en worden er geen recordwijzigingen doorgevoerd in Dataverse.
  5. Een asynchrone invoegtoepassing activeert als reactie op het maken van een record in de outbox-tabel in Dataverse en schrijft een bericht naar een Azure Service Bus-wachtrij of topic.
  6. Een berichtontvanger luistert naar berichten om deze te verwerken en door te sturen naar een doelsysteem.

Components

Dataverse is het transactionele bronsysteem waar de gegevensgebeurtenis plaatsvindt en de outbox-tabel zich bevindt. Het verzendt asynchroon berichten naar de berichtenbroker met behulp van een invoegtoepassing.

Azure Service Bus is de betrouwbare broker voor ondernemingen die berichten van Dataverse ontvangt voor verwerking door ontvangende systemen.

  • Wachtrijen zijn ideaal wanneer er één ontvanger van een bericht is.
  • Topics zijn het beste wanneer veel abonnees hetzelfde bericht kunnen verwerken of filtercriteria nodig hebben om berichten selectief te verwerken.

Azure Monitor is een uitgebreide bewakingsoplossing voor het verzamelen, analyseren en reageren op bewakingsgegevens van cloud- en on-premises oplossingen. Gebruik ingebouwde metrische gegevens voor Azure Service Bus om het aantal berichten in een wachtrij, onderwerp of dead-letter-wachtrij te bewaken.

Azure-toepassing Insights wordt gebruikt voor bewaking van toepassingsprestaties en kan worden ingeschakeld voor Dataverse-invoegtoepassingen om traceringslogboeken naar een Application Insights-werkruimte te verzenden.

Alternatieve opties:

  • Azure Logic Apps: Een geschikt alternatief voor weinig code om berichten uit de outbox-tabel te leveren aan de berichtenbroker als u meer controle wilt over wanneer u de orkestratie en bezorging van het bericht wilt activeren (bijvoorbeeld microbatches).
  • Azure Functions: een code-first alternatief dat u de meeste flexibiliteit en schaal biedt voor het afhandelen van hogere volumes en nieuwe pogingen na onregelmatige fouten.

Scenariodetails

Bedrijfsoplossingen moeten vaak kritieke gegevens uitwisselen met andere systemen via berichten. Om consistentie tussen systemen te garanderen, moet u de gegevensbewerking en berichtbezorging afhandelen als één atomische bewerking. De meeste transactionele systemen en berichtenbrokers ondersteunen echter zelden gedistribueerde transacties of ze introduceren een strakke koppeling die u wilt vermijden. Zonder een gedistribueerde transactie is er geen betrouwbaarheidsgarantie omdat er mogelijk een fout optreedt bij het verzenden van het bericht naar de broker nadat een transactie is doorgevoerd.

Het patroon Transactional Outbox lost deze uitdaging op door een bericht te maken in dezelfde lokale databasetransactie waarmee de bedrijfsgegevens worden bijgewerkt. Een afzonderlijk proces kan vervolgens het bericht uit de outbox-tabel aan de berichtenbroker bezorgen. Onregelmatige processtoringen zijn geen probleem. In de outbox-tabel wordt het bericht opgeslagen, zodat het niet verloren gaat en het proces het opnieuw probeert totdat het lukt.

Dataverse is een krachtig en uitbreidbaar low-code gegevensplatform met transactionele gegevensopslag waarmee dit patroon kan worden geïmplementeerd voor kritieke uitgaande integratiescenario's.

Considerations

Deze overwegingen implementeren de pijlers van Power Platform Well-Architected, een set richtlijnen die de kwaliteit van een workload verbeteren. Meer informatie vindt u in Microsoft Power Platform Well-Architected.

Reliability

Dit patroon verhoogt de betrouwbaarheid aanzienlijk, garandeert ten minste eenmaal levering en uiteindelijke consistentie door transactionele consistentie te garanderen. Met behulp van een berichtenbroker worden downstreamsystemen beschermd tegen overbelasting door de gegevensstroom tussen bron- en doelsystemen te beheren, en tegen beschikbaarheidsproblemen van downstreamsystemen.

Wanneer berichtvolgorde is vereist, schakelt u Azure Service Bus sessies in de wachtrij of het abonnement in. De producent moet een consistente SessionId, zoals de Dataverse-record of geaggregeerde id, toewijzen aan gerelateerde berichten, zodat ze in volgorde binnen die sessie worden verwerkt. Ontwerp consumenten voor idempotent verwerken, omdat dit patroon at-least-once delivery biedt en dubbele berichten kunnen voorkomen. Wanneer het detecteren van ontbrekende of niet-opeenvolgende gebeurtenissen belangrijk is, kunnen berichten een volgnummer op toepassingsniveau bevatten. Volgordegaranties zijn binnen een sessie van toepassing in plaats van globaal en de oplossing moet definiëren hoe nieuwe pogingen en dead-letter-berichten van invloed zijn op de volgende verwerking voor die sessie.

Security

Met behulp van Azure-services kan Dataverse zich authenticeren bij de berichtenbroker (Azure Service Bus) via Azure beheerde identiteiten via de door Power Platform beheerde identiteitsfunctie. Deze aanpak voorkomt het risico van het opslaan van gevoelige inloggegevens en de downtime als gevolg van het vernieuwen van geheimen.

Prestatie-efficiëntie

Het gebruik van een berichtenbroker zoals Azure Service Bus helpt de belasting te herverdelen om ervoor te zorgen dat downstreamtoepassingen niet worden overspoeld tijdens perioden met een hoog volume.

Overweeg het gebruik van een Azure-functie in plaats van een asynchrone Dataverse-invoegtoepassing om berichten te verzenden naar Azure Service Bus als volumes erg hoog worden. Deze benadering biedt de meeste schaal en flexibiliteit voor het verwerken van een groot aantal records in batch en het afhandelen van tijdelijke fouten.

Bijdragers

Microsoft onderhoudt dit artikel. De volgende inzenders hebben dit artikel geschreven.

Hoofdauteurs: