Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Företagslösningar måste leverera meddelanden på ett tillförlitligt sätt när dataändringar sker i Dataverse. Den här referensarkitekturen visar hur du implementerar Transactional Outbox-patternen med Dataverse för att minska risken för meddelandeförlust och hjälpa till att hålla integrerade system synkroniserade.
Tip
Den här artikeln innehåller ett exempelscenario och en generaliserad exempelarkitektur för att illustrera hur du implementerar tillförlitlig händelseleverans från Dataverse. Arkitekturexemplet kan ändras för många olika scenarier och branscher.
Arkitekturdiagram
Arbetsflöde
Följande steg beskriver arbetsflödet som visas i arkitekturdiagrammet:
- En dataåtgärd i Dataverse inträffar, till exempel skapande eller uppdatering av en kontaktpost. Den här åtgärden skapar en databastransaktion.
- Ett synkront Dataverse-plugin utlöses som svar på den här händelsen och skapar en post i en utkorgstabell i Dataverse som en del av samma transaktion.
- Om plugin-programmet körs korrekt genomför transaktionen både den utgående posten och ändringarna i den ursprungliga posten (till exempel Kontakt).
- Om plugin-körningen misslyckas återställs den ursprungliga datahändelsen och Dataverse sparar inga ändringar i poster.
- Ett asynkront plugin utlöses som svar på att en post skapas i utkorgstabellen i Dataverse och skriver ett meddelande till en Azure Service Bus-kö eller ett ämne.
- En meddelandekonsument lyssnar efter meddelanden som ska bearbetas och vidarebefordrar dem till ett målsystem.
Components
Dataverse är källtransaktionssystemet och det primära systemet där datahändelsen inträffar och outbox-tabellen finns. Den skickar asynkront meddelanden till meddelandeförmedlaren med hjälp av ett plugin-program.
Azure Service Bus är den tillförlitliga meddelandeförmedlaren för företag som tar emot meddelanden från Dataverse för bearbetning från mottagande system.
- Köer är idealiska när det finns en enda mottagare av ett meddelande.
- Topics är bäst när många prenumeranter kan bearbeta samma meddelande eller behöver filtervillkor för att selektivt bearbeta meddelanden.
Azure Monitor är en omfattande övervakningslösning för att samla in, analysera och svara på övervakningsdata från molnlösningar och lokala lösningar. Använd inbyggda mått för Azure Service Bus för att övervaka antalet meddelanden i en kö, ett topic eller en kö med obeställbara meddelanden.
Azure Application Insights används för övervakning av programprestanda och kan aktiveras för Dataverse-plugin-program för att skicka spårningsloggar till en Application Insights-arbetsyta.
Alternativ
- Azure Logic Apps: Ett genomförbart alternativ med låg kod för att leverera meddelanden från utkorgstabellen till meddelandemäklaren om du vill ha mer exakt kontroll över när du ska utlösa orkestreringen och leveransen av meddelandet (till exempel mikrobatchbearbetning).
- Azure Functions: Ett kod-första alternativ som ger dig mest flexibilitet och skalning för att hantera högre volymer och omförsök vid tillfälliga fel.
Scenario-information
Företagslösningar behöver ofta utbyta kritiska data med andra system via meddelanden. För att säkerställa konsekvens mellan systemen hanterar du dataåtgärden och meddelandeleveransen som en enda atomisk åtgärd. De flesta transaktionssystem och meddelandeförmedlare stöder dock sällan distribuerade transaktioner, eller så introducerar de en nära koppling som du vill undvika. Utan en distribuerad transaktion finns det ingen tillförlitlighetsgaranti eftersom ett fel kan inträffa när meddelandet skickas till förmedlaren efter att en transaktion har genomförts.
Transactional Outbox-mönstret löser den här utmaningen genom att skapa ett meddelande i samma lokala databastransaktion som uppdaterar affärsdata. En separat process kan sedan leverera meddelandet från utkorgstabellen till meddelandeförmedlaren. Intermittenta processfel är inte ett problem. Utkorgstabellen lagrar meddelandet så att det inte går förlorat och processen försöker igen tills det lyckas.
Dataverse är en kraftfull och utbyggbar low-code-dataplattform med transaktionell datalagring som kan implementera det här mönstret för kritiska scenarier för utgående integrering.
Considerations
Dessa överväganden utgör grundpelarna i Power Platform Well-Architected, en uppsättning vägledande grundsatser som förbättrar kvaliteten på en arbetslast. Läs mer i Microsoft Power Platform Well-Architected.
Reliability
Det här mönstret ökar tillförlitligheten avsevärt, garanterar leverans minst en gång och eventuell konsistens genom att säkerställa transaktionskonsistens. Genom att förlita sig på en meddelandeförmedlare skyddar denna underordnade system från att överbelastas genom att kontrollera dataflödet mellan käll- och målsystem och skyddar mot tillgänglighetsproblem i underordnade system.
När meddelandeordning krävs aktiverar du Azure Service Bus-sessioner i kön eller prenumerationen. Producenten bör tilldela ett konsekvent SessionId, till exempel Dataverse-posten eller aggregat-ID, till relaterade meddelanden så att de bearbetas i ordning inom den sessionen. Utforma konsumenter för idempotent bearbetning eftersom det här mönstret ger leverans med minst en gång-semantik och duplicerade meddelanden kan inträffa. Där det är viktigt att identifiera saknade eller felordnade händelser kan meddelanden innehålla ett sekvensnummer på programnivå. Ordergarantier gäller inom en session i stället för globalt, och lösningen bör definiera hur återförsök och meddelanden i dead letter-kön påverkar efterföljande bearbetning för den sessionen.
Security
Med hjälp av Azure-tjänster kan Dataverse autentisera sig mot meddelandeförmedlaren (Azure Service Bus) via Azures hanterade identiteter via den hanterade identitetsfunktionen i Power Platform. Den här metoden eliminerar risken för att lagra känsliga autentiseringsuppgifter och driftstopp som orsakas när hemligheter roteras.
Prestandaeffektivitet
Genom att använda en meddelandeförmedlare, till exempel Azure Service Bus, kan du jämna ut belastningen så att underordnade program inte överbelastas under perioder med hög volym.
Överväg att använda en Azure-funktion i stället för ett asynkront plugin-program för Dataverse för att skicka meddelanden till Azure Service Bus om volymerna blir mycket höga. Den här metoden ger mest skala och flexibilitet för att bearbeta en stor mängd poster i batch och hantera tillfälliga fel.
Contributors
Microsoft underhåller den här artikeln. Följande bidragsgivare skrev den här artikeln.
Huvudsakliga författare: