Share via


Best practices en diagnostische hulpprogramma's voor Durable Functions

In dit artikel worden enkele aanbevolen procedures beschreven bij het gebruik van Durable Functions. Ook worden verschillende hulpprogramma's beschreven om problemen tijdens het ontwikkelen, testen en productiegebruik vast te stellen.

Aanbevolen procedures

De nieuwste versie van de Durable Functions-extensie en SDK gebruiken

Er zijn twee onderdelen die een functie-app gebruikt om Durable Functions uit te voeren. Een is de Durable Functions SDK waarmee u orchestrator-, activiteits- en entiteitsfuncties kunt schrijven met behulp van uw doelprogrammeertaal. De andere is de Durable-extensie, het runtime-onderdeel dat de code daadwerkelijk uitvoert. Met uitzondering van in-process .NET-apps worden de SDK en de extensie onafhankelijk van elkaar geversied.

Als u up-to-date blijft met de nieuwste extensie en SDK, profiteert uw toepassing van de nieuwste prestatieverbeteringen, functies en oplossingen voor fouten. Als u een upgrade uitvoert naar de nieuwste versies, zorgt u er ook voor dat Microsoft de meest recente diagnostische telemetrie kan verzamelen om het onderzoeksproces te versnellen wanneer u een ondersteuningsaanvraag opent met Azure.

  • Zie De extensieversie van Durable Functions upgraden voor instructies voor het verkrijgen van de nieuwste extensieversie.
  • Om ervoor te zorgen dat u de nieuwste versie van de SDK gebruikt, controleert u het pakketbeheer van de taal die u gebruikt.

Voldoen aan codebeperkingen voor Durable Functions

Het gedrag van orchestratorcode voor opnieuw afspelen creëert beperkingen voor het type code dat u kunt schrijven in een orchestratorfunctie. Een voorbeeld van een beperking is dat uw orchestratorfunctie deterministische API's moet gebruiken, zodat elke keer dat deze opnieuw wordt afgespeeld, hetzelfde resultaat oplevert.

Notitie

De Durable Functions Roslyn Analyzer is een live codeanalyse waarmee C#-gebruikers zich houden aan specifieke codebeperkingen van Durable Functions. Zie Durable Functions Roslyn Analyzer voor instructies over het inschakelen ervan in Visual Studio en Visual Studio Code.

Vertrouwd raken met de prestatie-instellingen van uw programmeertaal in Azure Functions

Als u standaardinstellingen gebruikt, kan de taalruntime die u selecteert strikte gelijktijdigheidsbeperkingen opleggen voor uw functies. Bijvoorbeeld: er kan slechts één functie tegelijk worden uitgevoerd op een bepaalde VIRTUELE machine. Deze beperkingen kunnen meestal worden versoepeld door de gelijktijdigheid en prestatie-instellingen van uw taal af te stemmen . Als u de prestaties van uw Durable Functions-toepassing wilt optimaliseren, moet u vertrouwd raken met deze instellingen.

Hieronder vindt u een niet-volledige lijst van enkele talen die vaak profiteren van het verfijnen van hun prestatie- en gelijktijdigheidsinstellingen, en hun richtlijnen hiervoor.

Unieke Task Hub-namen per app garanderen

Meerdere Durable Function-apps kunnen hetzelfde opslagaccount delen. Standaard wordt de naam van de app gebruikt als de naam van de taakhub, waardoor het onbedoeld delen van taakhubs niet plaatsvindt. Als u taakhubnamen expliciet moet configureren voor uw apps in host.json, moet u ervoor zorgen dat de namen uniek zijn. Anders concurreren de meerdere apps voor berichten, wat kan leiden tot niet-gedefinieerd gedrag, waaronder indelingen onverwacht 'vastgelopen' in de status In behandeling of Actief.

De enige uitzondering is als u kopieën van dezelfde app in meerdere regio's implementeert. In dit geval kunt u dezelfde taakhub gebruiken voor de kopieën.

Volg de richtlijnen bij het implementeren van codewijzigingen voor het uitvoeren van orchestrators

Het is onvermijdelijk dat functies worden toegevoegd, verwijderd en gewijzigd gedurende de levensduur van een toepassing. Voorbeelden van veelvoorkomende belangrijke wijzigingen zijn het wijzigen van activiteits- of entiteitsfunctiehandtekeningen en het wijzigen van orchestratorlogica. Deze wijzigingen zijn een probleem wanneer ze invloed hebben op indelingen die nog steeds worden uitgevoerd. Als de implementatie onjuist is, kunnen codewijzigingen leiden tot indelingen die mislukken met een niet-deterministische fout, voor onbepaalde tijd vastlopen, prestatievermindering, enzovoort. Raadpleeg aanbevolen risicobeperkingsstrategieën bij het aanbrengen van codewijzigingen die van invloed kunnen zijn op actieve indelingen.

Functie-invoer en -uitvoer zo klein mogelijk houden

U kunt geheugenproblemen ondervinden als u grote invoer- en uitvoergegevens naar en van Durable Functions-API's opgeeft.

Invoer en uitvoer naar Durable Functions-API's worden geserialiseerd in de indelingsgeschiedenis. Dit betekent dat grote invoer en uitvoer in de loop van de tijd aanzienlijk kunnen bijdragen aan een orchestratorgeschiedenis die niet-gebonden wordt, waardoor geheugen-uitzonderingen ontstaan tijdens het opnieuw afspelen.

Als u de impact van grote invoer en uitvoer naar API's wilt beperken, kunt u ervoor kiezen om bepaalde werkzaamheden te delegeren aan suborstrators. Dit helpt bij het verdelen van de geheugenbelasting van de geschiedenis van één orchestrator naar meerdere, waardoor de geheugenvoetafdruk van afzonderlijke geschiedenissen klein blijft.

Dat gezegd hebbende dat de best practice voor het omgaan met grote gegevens is om deze in externe opslag te bewaren en deze gegevens alleen binnen Activiteiten te materialiseren, indien nodig. Wanneer u deze aanpak uitvoert, kunt u in plaats van de gegevens zelf te communiceren als invoer en/of uitvoer van Durable Functions-API's, een lichtgewicht id doorgeven waarmee u die gegevens kunt ophalen uit externe opslag wanneer dat nodig is in uw activiteiten.

Entiteitsgegevens klein houden

Net als voor invoer en uitvoer naar Durable Functions-API's, kunt u geheugenproblemen ondervinden als de expliciete status van een entiteit te groot is. In het bijzonder moet een entiteitsstatus worden geserialiseerd en gedeserialiseerd vanuit de opslag op elke aanvraag, zodat grote statussen serialisatielatentie toevoegen aan elke aanroep. Als een entiteit grote gegevens moet bijhouden, is het daarom raadzaam om de gegevens naar externe opslag te offloaden en een lichtgewicht id bij te houden in de entiteit waarmee u de gegevens uit de opslag kunt materialiseren wanneer dat nodig is.

De gelijktijdigheidsinstellingen van Durable Functions verfijnen

Eén werkrolexemplaren kunnen meerdere werkitems gelijktijdig uitvoeren om de efficiëntie te verhogen. Het verwerken van te veel werkitems loopt echter gelijktijdig een risico op uitputting van resources, zoals CPU-capaciteit, netwerkverbindingen, enzovoort. In veel gevallen is dit geen probleem, omdat het schalen en beperken van werkitems automatisch voor u wordt afgehandeld. Dat gezegd hebbende, als u prestatieproblemen ondervindt (zoals orchestrators die te lang duren, vastzitten in behandeling, enzovoort) of prestatietests uitvoert, kunt u gelijktijdigheidslimieten in het host.json-bestand configureren.

Notitie

Dit is geen vervanging voor het afstemmen van de prestatie- en gelijktijdigheidsinstellingen van uw taalruntime in Azure Functions. De gelijktijdigheidsinstellingen van Durable Functions bepalen alleen hoeveel werk tegelijk aan een bepaalde VIRTUELE machine kan worden toegewezen, maar bepaalt niet de mate van parallelle uitvoering in de verwerking die binnen de VIRTUELE machine werkt. Dit laatste vereist het afstemmen van de prestatie-instellingen voor de taalruntime.

Unieke namen gebruiken voor uw externe gebeurtenissen

Net als bij activiteitsfuncties hebben externe gebeurtenissen een garantie voor ten minste één levering . Dit betekent dat uw toepassing onder bepaalde zeldzame omstandigheden (die kunnen optreden tijdens het opnieuw opstarten, schalen, crashes, enzovoort), dubbele waarden van dezelfde externe gebeurtenis kan ontvangen. Daarom raden we aan dat externe gebeurtenissen een id bevatten waarmee ze handmatig kunnen worden gededupliceerd in orchestrators.

Notitie

De MSSQL-opslagprovider verbruikt externe gebeurtenissen en werkt orchestratorstatus transactioneel bij, dus in die back-end mag er geen risico zijn op dubbele gebeurtenissen, in tegenstelling tot de standaardOpslagprovider van Azure Storage. Dat gezegd hebbende, wordt het nog steeds aanbevolen dat externe gebeurtenissen unieke namen hebben, zodat code overdraagbaar is tussen back-ends.

Investeren in stresstests

Net als bij alles wat te maken heeft met prestaties, zijn de ideale gelijktijdigheidsinstellingen en architectuur van uw app uiteindelijk afhankelijk van de workload van uw toepassing. Daarom wordt het aanbevolen dat gebruikers investeren in een prestatietest die hun verwachte workload simuleert en deze gebruikt om prestatie- en betrouwbaarheidsexperimenten voor hun app uit te voeren.

Vermijd gevoelige gegevens in invoer, uitvoer en uitzonderingen

Invoer en uitvoer (inclusief uitzonderingen) van en naar Durable Functions-API's worden permanent bewaard in de opslagprovider van uw keuze. Als deze invoer, uitvoer of uitzonderingen gevoelige gegevens bevatten (zoals geheimen, verbindingsreeks s, persoonsgegevens, enzovoort), kan iedereen met leestoegang tot de resources van uw opslagprovider deze verkrijgen. Om veilig om te gaan met gevoelige gegevens, wordt het aanbevolen voor gebruikers om die gegevens op te halen in activiteitsfuncties van Azure Key Vault of omgevingsvariabelen, en om die gegevens nooit rechtstreeks te communiceren met orchestrators of entiteiten. Dit moet helpen voorkomen dat gevoelige gegevens in uw opslagbronnen worden gelekt.

Notitie

Deze richtlijnen zijn ook van toepassing op de CallHttp orchestrator-API, die ook de nettoladingen voor aanvragen en antwoorden in de opslag persistent maakt. Als voor uw doel-HTTP-eindpunten verificatie is vereist, die mogelijk gevoelig is, wordt aanbevolen dat gebruikers de HTTP-aanroep zelf binnen een activiteit implementeren of de ingebouwde ondersteuning voor beheerde identiteiten gebruiken die wordt aangeboden door CallHttp, waardoor geen referenties voor opslag worden bewaard.

Tip

Vermijd op dezelfde manier logboekregistratiegegevens die geheimen bevatten als iedereen met leestoegang tot uw logboeken (bijvoorbeeld in Application Insights), deze geheimen kan verkrijgen.

Diagnostische hulpprogramma's

Er zijn verschillende hulpprogramma's beschikbaar waarmee u problemen kunt diagnosticeren.

Durable Functions en Durable Task Framework-logboeken

Durable Functions-extensie

De Durable-extensie verzendt traceringsgebeurtenissen waarmee u de end-to-end-uitvoering van een indeling kunt traceren. Deze traceringsgebeurtenissen kunnen worden gevonden en opgevraagd met behulp van het Application Insights Analytics-hulpprogramma in Azure Portal. De uitgebreidheid van het bijhouden van gegevens die worden verzonden, kan worden geconfigureerd in de logger sectie (Functions 1.x) of logging (Functions 2.0) van het host.json-bestand. Zie configuratiedetails.

Duurzaam taakframework

Vanaf v2.3.0 van de Durable-extensie zijn logboeken die worden verzonden door het onderliggende Durable Task Framework (DTFx) ook beschikbaar voor verzameling. Zie meer informatie over het inschakelen van deze logboeken.

Azure Portal

Problemen vaststellen en oplossen

Diagnostische gegevens van Azure Function-apps zijn een nuttige resource in Azure Portal voor het bewaken en diagnosticeren van mogelijke problemen in uw toepassing. Het biedt ook suggesties om problemen op te lossen op basis van de diagnose. Zie Diagnostische gegevens van azure-functie-apps.

Durable Functions Orchestration-traceringen

Azure Portal biedt indelingstraceringsdetails om inzicht te hebben in de status van elk orchestration-exemplaar en de end-to-end-uitvoering te traceren. Wanneer u de lijst met functies in uw Azure Functions-app bekijkt, ziet u een monitorkolom die koppelingen naar de traceringen bevat. U moet Applications Insights hebben ingeschakeld voor uw app om deze informatie op te halen.

Durable Functions Monitor-extensie

Dit is een Visual Studio Code-extensie die een gebruikersinterface biedt voor het bewaken, beheren en opsporen van fouten in uw indelingsexemplaren.

Roslyn Analyzer

De Durable Functions Roslyn Analyzer is een live codeanalyse waarmee C#-gebruikers zich houden aan specifieke codebeperkingen van Durable Functions. Zie Durable Functions Roslyn Analyzer voor instructies over het inschakelen ervan in Visual Studio en Visual Studio Code.

Ondersteuning

Voor vragen en ondersteuning kunt u een probleem openen in een van de Onderstaande GitHub-opslagplaatsen. Wanneer u een fout rapporteert in Azure, inclusief informatie zoals betrokken exemplaar-id's, tijdsbereiken in UTC waarin het probleem wordt weergegeven, worden onderzoeken met de naam van de toepassing (indien mogelijk) en de implementatieregio aanzienlijk versneld.