Delen via


Aanbevolen procedures voor betrouwbare Azure Functions

Azure Functions is een gebeurtenisgestuurde, compute-on-demand service die het bestaande Azure App Service-toepassingsplatform uitbreidt. Het voegt mogelijkheden toe om code te implementeren die wordt geactiveerd door gebeurtenissen die plaatsvinden in Azure, in een partnerservice en in on-premises systemen. Met Behulp van Functions kunt u oplossingen bouwen die verbinding maken met gegevensbronnen of berichtenoplossingen, waardoor het eenvoudiger is om gebeurtenissen te verwerken en erop te reageren. Functies worden uitgevoerd in Azure-datacenters, die complex zijn met veel geïntegreerde onderdelen. In een gehoste cloudomgeving wordt verwacht dat VM's af en toe opnieuw kunnen worden opgestart of verplaatst, en dat er systeemupgrades worden uitgevoerd. Uw functies-apps zijn waarschijnlijk ook afhankelijk van externe API's, Azure-services en andere databases, die ook gevoelig zijn voor periodieke niet-betrouwbaarheid.

In dit artikel worden enkele aanbevolen procedures beschreven voor het ontwerpen en implementeren van efficiënte functie-apps die in orde blijven en goed presteren in een cloudomgeving.

Het juiste hostingabonnement kiezen

Wanneer u een functie-app in Azure maakt, moet u een hostingabonnement voor uw app kiezen. Het plan dat u kiest, is van invloed op prestaties, betrouwbaarheid en kosten. Azure Functions biedt de volgende hostingabonnementen:

Gebruik indien mogelijk het Flex Consumption-abonnement om uw dynamische schaal-apps te hosten.

In de context van het App Service-platform is het Premium-abonnement dat dynamisch als host fungeert voor uw functies het Elastic Premium-abonnement (EP). Andere Toegewezen (App Service)-abonnementen worden Premium genoemd. Zie Het Azure Functions Premium-abonnement voor meer informatie.

Het hostingabonnement dat u kiest, bepaalt het volgende gedrag:

  • Hoe uw function app wordt geschaald op basis van de vraag en hoe de toewijzing van instances wordt beheerd.
  • De resources die beschikbaar zijn voor elk exemplaar van de functie-app.
  • Ondersteuning voor geavanceerde functionaliteit, zoals Azure Virtual Network-connectiviteit.

Zie De hostingopties van Azure Functions voor meer informatie over het kiezen van het juiste hostingabonnement en een gedetailleerde vergelijking tussen de abonnementen.

Kies het juiste plan wanneer u uw functie-app maakt. Functions biedt een beperkte mogelijkheid om uw hostingabonnement te veranderen, voornamelijk tussen Verbruiks- en Elastic Premium-abonnementen. Zie Migratie plannen voor meer informatie.

Opslag correct configureren

Voor Functions moet een opslagaccount worden gekoppeld aan uw functie-app. De Functions-host maakt gebruik van de opslagaccountverbinding voor bewerkingen zoals het beheren van triggers en het uitvoeren van logboekfuncties. Het wordt ook gebruikt bij het dynamisch schalen van functie-apps. Zie Overwegingen bij het gebruik van opslag voor Azure Functions voor meer informatie.

Een onjuist geconfigureerd bestandssysteem of opslagaccount in uw functie-app kan van invloed zijn op de prestaties en beschikbaarheid van uw functies. Zie het artikel over het oplossen van problemen met een onjuist geconfigureerd opslagaccount voor hulp bij het oplossen van problemen met opslag.

Opslagverbindingsinstellingen

Functie-apps die dynamisch kunnen worden geschaald, kunnen worden uitgevoerd vanaf een Azure Files-eindpunt in uw opslagaccount of vanaf de bestandsservers die zijn gekoppeld aan uw uitgeschaalde exemplaren. Dit gedrag wordt beheerd door de volgende toepassingsinstellingen:

Het Premium-abonnement en het Verbruiksabonnement in Windows ondersteunen deze instellingen. Voor het Flex Consumption-abonnement zijn deze instellingen niet vereist en wordt een Blob Storage-container gebruikt om implementatiepakketten te hosten in plaats van een Azure Files-share.

Wanneer u uw functie-app maakt in Azure Portal of met behulp van Azure CLI of Azure PowerShell, maakt u deze instellingen voor uw functie-app wanneer dat nodig is. Wanneer u uw resources maakt op basis van een ARM-sjabloon (Azure Resource Manager), moet u deze ook opnemen WEBSITE_CONTENTAZUREFILECONNECTIONSTRING in de sjabloon.

Bij uw eerste implementatie met behulp van een ARM-sjabloon hoeft u deze niet op te nemen WEBSITE_CONTENTSHARE, die voor u wordt gegenereerd.

U kunt de volgende ARM-sjabloonvoorbeelden gebruiken om deze instellingen correct te configureren:

Belangrijk

De Azure Files-service biedt momenteel geen ondersteuning voor op identiteit gebaseerde verbindingen. Het Flex Consumption-abonnement biedt volledige ondersteuning voor beheerde identiteiten. Zie Een app maken zonder Azure Files voor meer informatie.

Opslagaccountconfiguratie

Wanneer u een functie-app maakt, moet u een algemeen Azure Storage-account maken of koppelen dat blobs, wachtrij en tabelopslag ondersteunt. Functies zijn afhankelijk van Azure Storage voor bewerkingen zoals het beheren van triggers en het uitvoeren van logboekfuncties. Het opslagaccount verbindingsreeks voor uw functie-app vindt u in de AzureWebJobsStorage instellingen en WEBSITE_CONTENTAZUREFILECONNECTIONSTRING toepassingsinstellingen.

Houd rekening met de volgende overwegingen bij het maken van dit opslagaccount:

  • Als u de latentie wilt verminderen, maakt u het opslagaccount in dezelfde regio als de functie-app.

  • Gebruik een afzonderlijk opslagaccount voor elke functie-app om de prestaties in productie te verbeteren. Dit aspect geldt met name voor Durable Functions en Event Hubs geactiveerde functies.

  • Gebruik voor door Event Hubs geactiveerde functies geen account waarvoor Data Lake Storage is ingeschakeld.

Grote gegevenssets verwerken

Wanneer u op Linux werkt, kunt u extra opslag toevoegen door een bestandsshare te koppelen. Het koppelen van een share is een handige manier voor een functie om een grote bestaande gegevensset te verwerken. Zie Bestandsshares koppelen voor meer informatie.

Uw functies organiseren

Als onderdeel van uw oplossing ontwikkelt en publiceert u waarschijnlijk meerdere functies. Deze functies worden vaak gecombineerd tot één functie-app, maar ze kunnen ook worden uitgevoerd in afzonderlijke functie-apps. In Premium- en Dedicated-hostingabonnementen (App Service) kunnen meerdere functie-apps ook dezelfde resources delen door in hetzelfde abonnement uit te voeren. Hoe u uw functies en functie-apps groeperen, kan van invloed zijn op de prestaties, schaalaanpassing, configuratie, implementatie en beveiliging van uw algehele oplossing.

Voor het Verbruiks- en Premium-abonnement worden alle functies in een functie-app dynamisch samen geschaald.

Zie Best practices voor functie-organisatie voor meer informatie over het organiseren van uw functies.

Implementaties optimaliseren

Wanneer u een functie-app implementeert, moet u er rekening mee houden dat de implementatie-eenheid voor functies in Azure de functie-app is. U implementeert alle functies in een functie-app tegelijkertijd, meestal vanuit hetzelfde implementatiepakket.

Houd rekening met deze opties voor een geslaagde implementatie:

  • Laat uw functies worden uitgevoerd vanuit het implementatiepakket. Deze uitvoering van pakketbenadering biedt de volgende voordelen:

    • Vermindert het risico op problemen met vergrendeling tijdens het kopiëren van bestanden.
    • Kan rechtstreeks worden geïmplementeerd in een productie-app en activeert geen herstart.
    • Alle bestanden in het pakket zijn beschikbaar voor uw app.
    • Verbetert de prestaties van ARM-sjabloonimplementaties.
    • Kan koude begintijden verminderen, met name voor JavaScript-functies met grote npm-pakketstructuren.
  • Overweeg het gebruik van continue implementatie om implementaties te verbinden met uw broncodebeheeroplossing. Met continue implementaties kunt u ook uitvoeren vanuit het implementatiepakket.

  • Voor hosting van Premium-plannen kunt u overwegen om een opwarmtrigger toe te voegen om de latentie te verminderen wanneer er nieuwe exemplaren worden toegevoegd. Zie de trigger voor het opwarmen van Azure Functions voor meer informatie.

  • Minimaliseer de uitvaltijd van implementaties door gebruik te maken van implementatieslots voor verbruiks-, premium- en dedicated-abonnementen. Of configureer rolling updates voor implementaties zonder downtime in het Flex Consumption-abonnement. Zie Azure Functions-implementatiesites en site-updatestrategieën in Flex Consumption voor meer informatie.

Robuuste functies schrijven

Volg ontwerpprincipes die u helpen bij de algemene prestaties en beschikbaarheid van uw functies. Deze principes zijn onder andere:

Tijdelijke fouten komen vaak voor bij cloud-computing. Gebruik daarom een patroon voor opnieuw proberen bij het openen van cloudresources. Veel triggers en bindingen implementeren al nieuwe pogingen.

Prioriteit geven aan integratietests door uw functies continu te testen in de context van de volledige toepassing en in uw buildautomatiseringspijplijnen.

Ontwerpen voor beveiliging

Houd rekening met de beveiliging tijdens de planningsfase, niet nadat uw functies gereed zijn. Zie Azure Functions beveiligen voor meer informatie.

Gelijktijdigheid overwegen

Naarmate de vraag toeneemt wegens binnenkomende gebeurtenissen, schalen Verbruiks- en Premium-abonnementen de functie-apps uit. Het is belangrijk om te begrijpen hoe uw functie-app reageert op laden en hoe de triggers kunnen worden geconfigureerd om binnenkomende gebeurtenissen te verwerken. Zie Gebeurtenisgestuurd schalen in Azure Functions voor een algemeen overzicht.

Voor dedicated (App Service)-plannen bent u verantwoordelijk voor het schalen van uw functie-apps.

Aantal werkprocessen

In sommige gevallen is het efficiënter om de belasting te verwerken door meerdere processen te maken, ook wel taalwerkprocessen genoemd, in het exemplaar voordat u uitschaalt. De FUNCTIONS_WORKER_PROCESS_COUNT-instelling bepaalt het maximum aantal toegestane taalwerkprocessen. De standaardinstelling voor deze instelling is 1, wat betekent dat er niet meerdere processen worden gebruikt. Nadat het maximaal aantal processen is bereikt, schaalt de functie-app automatisch uit naar meer exemplaren om de belasting te verwerken. Deze instelling is niet van toepassing op C#-klassenbibliotheekfuncties die worden uitgevoerd in het hostproces.

Wanneer u een Premium-abonnement of een Dedicated (App Service)-abonnement gebruikt FUNCTIONS_WORKER_PROCESS_COUNT, moet u rekening houden met het aantal cores dat door uw abonnement wordt geleverd. Het Premium-abonnement EP2 biedt bijvoorbeeld twee kernen, dus u moet beginnen met een waarde van 2 en naar behoefte met twee verhogen, tot het maximum.

Triggerconfiguratie

Wanneer u plant om doorvoer en schaalbaarheid te verbeteren, begrijpt u hoe de verschillende soorten triggers de gebeurtenissen verwerken. Sommige triggers bieden u controle over batchgedrag en gelijktijdigheid. Door deze waarden aan te passen, kan elke instantie op de juiste wijze worden geschaald voor de vereisten van de aangeroepen functies. U past deze configuratieopties toe op alle triggers in een functie-app en onderhoudt deze in het host.json-bestand voor de app. Zie de sectie Configuratie van de specifieke triggerreferentie voor meer informatie over instellingen.

Zie Betrouwbare gebeurtenisverwerking van Azure Functions voor meer informatie over hoe Functions berichtstromen verwerkt.

Verbindingen plannen

Verbindingslimieten zijn van toepassing op functie-apps die worden uitgevoerd in verbruiksabonnement. Deze limieten zijn van toepassing op elk exemplaar. Vanwege deze limieten en als algemene best practice optimaliseert u de uitgaande verbindingen vanuit uw functiecode. Zie Verbindingen beheren in Azure Functions voor meer informatie.

Taalspecifieke overwegingen

Houd rekening met de volgende overwegingen voor uw keuzetaal:

Maximale beschikbaarheid

Koude start is een belangrijke overweging voor serverloze architecturen. Zie Cold starts voor meer informatie. Als koude start een probleem is voor uw scenario, raadpleegt u Inzicht in serverloze koude start.

Zowel Flex Consumption- als Premium-abonnementen worden aanbevolen om de koude start te verminderen terwijl de dynamische schaal behouden blijft. Gebruik de volgende richtlijnen om koude starts te verminderen en de beschikbaarheid in alle hostingabonnementen te verbeteren.

Plannen Richtlijn
Flex Consumption-abonnement Gebruik altijd beschikbare instanties om instanties actief te houden
Het aantal exemplaren dat altijd gereed is instellen
Premium-abonnement Een opwarmtrigger implementeren in uw functie-app
Stel de waarden in voor always-ready exemplaren en maximale burst-limiet
Ondersteuning voor virtuele netwerktriggers gebruiken bij het gebruik van niet-HTTP-triggers in een virtueel netwerk
Toegewezen abonnementen Uitvoeren op ten minste twee exemplaren waarvoor Azure-app Service Health Check is ingeschakeld
Automatisch schalen implementeren
Verbruiksabonnement • Controleer uw gebruik van Singleton-patronen en de gelijktijdigheidsinstellingen voor bindingen en triggers om te voorkomen dat er kunstmatig limieten worden geplaatst voor de schaal van uw functie-app.
Controleer de functionAppScaleLimit instelling, waardoor uitschalen kan worden beperkt
• Controleer of er een limiet voor dagelijks gebruik (GB-sec) is ingesteld tijdens het ontwikkelen en testen. Overweeg deze limiet in productieomgevingen te verwijderen.

Effectief bewaken

Azure Functions biedt ingebouwde integratie met Azure-toepassing Insights voor het bewaken van de uitvoering van uw functie en traceringen die zijn geschreven vanuit uw code. Zie Uitvoeringsbewerkingen bewaken in Azure Functions voor meer informatie. Azure Monitor biedt ook faciliteiten voor het bewaken van de status van de functie-app zelf. Zie Monitor Azure Functions voor meer informatie.

Houd rekening met de volgende overwegingen bij het gebruik van Application Insights-integratie om uw functies te bewaken:

  • Verwijder de AzureWebJobsDashboard-toepassingsinstelling. Deze instelling is ondersteund in oudere versies van Functions. Het verwijderen van AzureWebJobsDashboard verbetert de prestaties van uw functies.

  • Bekijk de Application Insights-logboeken. Als er gegevens ontbreken die u verwacht te vinden, kunt u overwegen de steekproefinstellingen aan te passen om uw bewakingsscenario beter vast te leggen. Gebruik de excludedTypes instelling om bepaalde typen uit te sluiten van steekproeven, zoals Request of Exception. Zie Sampling configureren voor meer informatie.

Met Azure Functions kunt u ook door het systeem gegenereerde en door de gebruiker gegenereerde logboeken verzenden naar Azure Monitor-logboeken. Integratie met Azure Monitor-logboeken is momenteel in preview.

Bouwen in redundantie

Uw bedrijfsbehoeften vereisen mogelijk dat uw functies altijd beschikbaar zijn, zelfs tijdens een storing in een datacenter. Zie Betrouwbaarheid in Azure Functions voor meer informatie over het gebruik van een multiregionale benadering om uw kritieke functies altijd actief te houden.

Volgende stappen

Uw functie-app beheren