Dela via


Översikt över programmeringsmodell

Durable Functions är ett tillägg av Azure Functions som lägger till tillståndskänsliga orkestreringsfunktioner i funktionsappen. En Durable Functions app består av olika Azure funktioner som var och en spelar en specifik roll: orkestrering, aktivitet, entitet eller klient. Dessa roller motsvarar specialiserade trigger- och bindningstyper som Durable Functions-tillägget tillhandahåller.

Med Durable Task SDK:er kan du skapa tillståndskänsliga, feltoleranta program på alla beräkningsplattformar. Din app definierar orkestratorer, aktiviteter och entiteter som klasser eller funktioner som du registrerar med en arbetare. Med ett separat klient-API kan du starta och hantera orkestreringsinstanser.

I följande tabell sammanfattas de viktigaste programmeringskomponenterna och deras roller:

Komponent Befattning Definierad av
Orchestrator Samordnar arbetsflödeslogik Orkestreringsutlösare
Activity Utför en enda arbetsenhet Aktivitetsutlösare
Enhet Hanterar en liten del av tillståndet Entitetsutlösare
Client Startar och hanterar orkestreringar och entiteter Varaktig klientbindning
Komponent Befattning Definierad av
Orchestrator Samordnar arbetsflödeslogik En klass eller funktion som registrerats med arbetaren
Activity Utför en enda arbetsenhet En klass eller funktion som registrerats med arbetaren
Enhet Hanterar en liten del av tillståndet En klass registrerad hos arbetaren
Client Startar och hanterar orkestreringar och entiteter DurableTaskClient API (applikationsprogrammeringsgränssnitt)

Orkestratorer

Orchestrators definierar arbetsflödet: vilka åtgärder som ska utföras, i vilken ordning och hur resultatet ska hanteras. Du skriver orchestratorlogik som vanlig kod med hjälp av vanliga kontrollflödeskonstruktioner som loopar, villkor och try/catch-block.

En orkestrerare kan schemalägga flera typer av uppgifter:

Orchestrators kan också interagera med entiteter.

I Durable Functions definierar du en orchestrator med hjälp av utlösarbindningen orchestration. Utlösaren innehåller ett kontextobjekt som du använder för att schemalägga aktiviteter och ta emot resultat.

I SDK:er för varaktiga uppgifter definierar du en orkestrerare genom att implementera en klass eller funktion och registrera den med Durable Task Worker. Orchestrator tar emot ett kontextobjekt som du använder för att schemalägga aktiviteter och ta emot resultat.

Viktigt!

Orchestrator-koden måste vara deterministisk. Durable Task-körningen använder händelsekällor och repriser för att återskapa orkestreringstillståndet, så att icke-terministisk kod kan orsaka fel eller dödlägen. Detaljerad vägledning finns i Orchestrator-kodbegränsningar.

En fullständig översikt över orkestreringsbeteende, inklusive repris, instansidentitet och felhantering, finns i Varaktiga orkestreringar.

Aktiviteter

Aktiviteter är den grundläggande arbetsenheten i en varaktig orkestrering. Varje aktivitet representerar vanligtvis en enskild uppgift, till exempel att anropa ett webb-API, skriva till en databas eller beräkna ett resultat. Orchestrators anropar aktiviteter för att utföra sitt verkliga arbete.

Aktiviteter skiljer sig från orkestrerare på viktiga sätt:

  • Inga kodbegränsningar. Orchestrators måste vara deterministiska, men aktiviteter kan köra valfri kod, inklusive icke-deterministiska eller långkörande operationer.
  • Exekvering minst en gång Körningen garanterar att varje aktivitet körs minst en gång under en orkestrering. Om ett fel inträffar efter att aktiviteten har slutförts men innan resultatet registreras, kan körningstiden köra aktiviteten igen.
  • Enskilt ansvar. Varje aktivitet tar emot en indata och returnerar en utdata. Om du vill skicka flera värden använder du en komplex typ eller samling.

Du definierar en aktivitetsfunktion med hjälp av aktivitetsutlösarbindningen. Utlösaren innehåller de indata som orkestratorn skickade när aktiviteten schemaläggs.

Du definierar en aktivitet genom att implementera en klass eller funktion och registrera den med Durable Task Worker. Aktiviteten tar emot de indata som orkestratorn skickade när den schemaläggs.

Anmärkning

Eftersom aktiviteter endast garanterar att köras minst en gång, bör du göra din aktivitetslogik idempotent när det är möjligt. Du kan till exempel använda "upserts" i stället för infogningar eller söka efter befintliga resultat innan du skapar nya resurser.

Aktiviteter kan köras seriellt, parallellt eller i en kombination av båda.

Entities

Entiteter hanterar små, varaktiga delar av tillstånd. Varje entitet har en unik identitet och en uppsättning namngivna åtgärder som kan läsa eller uppdatera dess interna tillstånd. Entiteter skiljer sig från orkestrerare eftersom de hanterar tillstånd explicit via åtgärder i stället för implicit via kontrollflödet. De skiljer sig också från orchestrators eftersom de inte har samma kodbegränsningar – entitetsåtgärder kan köra valfri kod, inklusive icke-terministiska eller långvariga åtgärder.

Vanliga användningsområden för entiteter är:

  • Aggregera data från flera källor
  • Implementera distribuerade lås eller semaforer
  • Modellera tillståndskänsliga objekt som kundvagnar eller spelsessioner

Entiteter kör åtgärder seriellt: endast en åtgärd körs i taget för en viss entitetsinstans. Den här seriekörningen förhindrar samtidighetskonflikter utan att kräva explicita låsmekanismer.

Du definierar en entitetsfunktion med hjälp av entitetsutlösarbindningen.

Anmärkning

Entitetsfunktioner stöds i .NET, JavaScript/TypeScript, Python och Java, men inte i PowerShell.

Du definierar en entitet genom att implementera en klass och registrera den med Durable Task Worker.

Anmärkning

Entitetsstöd är tillgängligt i .NET, JavaScript/TypeScript och Python SDK:er. Java SDK stöder för närvarande inte entiteter.

En fullständig guide för att definiera, anropa och hantera entiteter finns i Durable entiteter.

Client

Klientkomponenten är hur du interagerar med orkestreringar och entiteter utanför orkestreringen. Vanliga klientåtgärder är:

  • Schemalägga nya orkestreringsinstanser
  • Fråga efter status för orkestreringar som körs eller slutförs
  • Utlösa händelser för väntande orkestrering
  • Pausa och återuppta orkestreringsinstanser
  • Avsluta orkestreringsinstanser
  • Signalering av entitetsoperationer och läsa av entitetstillstånd

Alla icke-orkestreringsfunktioner kan fungera som en klientfunktion. Det som gör det till en klient är användningen av den varaktiga klientutdatabindningen. Du kan till exempel starta en orkestrering från en HTTP-utlöst funktion, en köutlöst funktion eller en timerutlöst funktion.

Den hållbara klientbindningen tillhandahåller även API:er för att interagera med entiteter, inklusive signalering av entitetsåtgärder och läsning av entitetstillstånd. Mer information finns i entitetsklientbindningen.

I Durable Task SDK:er interagerar du med orkestreringar och entiteter via DurableTaskClient klassen. Du skapar en klientinstans i programkoden och anropar dess metoder för att starta, fråga eller hantera orkestrerings- och entitetsinstanser. Klienten kan användas från vilken del av programmet som helst – en HTTP-slutpunkt, en bakgrundstjänst, en konsolapp eller någon annan kod.

Detaljerad information om alla instanshanteringsåtgärder, inklusive kodexempel för varje språk, finns i Hantera orkestreringsinstanser.

Nästa steg

Kom igång genom att skapa din första Durable Function-app: