Best practices voor betrouwbare Azure Functions

Azure Functions is een gebeurtenisgestuurde, compute-on-demand-ervaring die het bestaande Azure App Service toepassingsplatform uitbreidt met mogelijkheden voor het implementeren van code die wordt geactiveerd door gebeurtenissen in Azure, in de service van derden en in on-premises systemen. Met Functions kunt u oplossingen bouwen door verbinding te maken met gegevensbronnen of berichtenoplossingen, waardoor het gemakkelijker wordt om gebeurtenissen te verwerken en erop te reageren. Functions wordt uitgevoerd op 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 functie-apps zijn waarschijnlijk ook afhankelijk van externe API's, Azure-services en andere databases, die ook gevoelig zijn voor periodieke onbetrouwbaarheid.

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

Kies het juiste hostingabonnement

Wanneer u een functie-app in Azure maakt, moet u een hostingabonnement voor uw app kiezen. Het plan dat u kiest, heeft invloed op de prestaties, betrouwbaarheid en kosten. Er zijn drie eenvoudige hostingabonnementen beschikbaar voor Functions:

Alle hostingabonnementen zijn algemeen beschikbaar (GA) bij het uitvoeren van Linux of Windows.

In de context van het App Service-platform is het Premium-abonnement dat wordt gebruikt om uw functies dynamisch te hosten, het Elastic Premium-abonnement (EP). Er zijn andere Dedicated-abonnementen (App Service) met de naam Premium. Zie het artikel over het Premium-abonnement voor meer informatie.

Het hostingabonnement dat u kiest, bepaalt het volgende gedrag:

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

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

Het is belangrijk dat u het juiste plan kiest wanneer u uw functie-app maakt. Functions biedt een beperkte mogelijkheid om van hostingabonnement te wisselen, voornamelijk tussen verbruiks- en Elastic Premium-abonnementen. Zie Migratie plannen voor meer informatie.

Opslag correct configureren

Voor Functions moet een opslagaccount zijn gekoppeld aan uw functie-app. De verbinding met het opslagaccount wordt door de Functions-host gebruikt voor bewerkingen zoals het beheren van triggers en het vastleggen van functie-uitvoeringen. Het wordt ook gebruikt bij het dynamisch schalen van functie-apps. Zie Opslagoverwegingen voor Azure Functions voor meer informatie.

Een onjuist geconfigureerd bestandssysteem of opslagaccount in uw functie-app kan invloed hebben 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 een onjuist geconfigureerd opslagaccount .

Instellingen voor opslagverbinding

Functie-apps die dynamisch 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:

Deze instellingen worden alleen ondersteund wanneer u werkt in een Premium-abonnement of in een Verbruiksabonnement in Windows.

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

Neem bij uw eerste implementatie met behulp van een ARM-sjabloon niet op WEBSITE_CONTENTSHARE, dat voor u wordt gegenereerd.

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

Opslagaccountconfiguratie

Wanneer u een functie-app maakt, moet u een algemeen Azure Storage-account maken of koppelen dat blobs, wachtrij en tabelopslag ondersteunt. Functions is afhankelijk van Azure Storage voor bewerkingen zoals het beheren van triggers en het vastleggen van functie-uitvoeringen. Het opslagaccount connection string voor uw functie-app vindt u in de AzureWebJobsStorage toepassingsinstellingen enWEBSITE_CONTENTAZUREFILECONNECTIONSTRING.

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.

  • Als u de prestaties in productie wilt verbeteren, gebruikt u een afzonderlijk opslagaccount voor elke functie-app. Dit geldt met name voor Durable Functions en door Event Hub geactiveerde functies.

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

Grote gegevenssets verwerken

Wanneer u linux gebruikt, 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 in éé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 groepeer, kan invloed hebben op de prestaties, schaalaanpassing, configuratie, implementatie en beveiliging van uw algehele oplossing.

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

Zie Best practices voor functieorganisatie voor meer informatie over het organiseren van uw functies.

Implementaties optimaliseren

Wanneer u een functie-app implementeert, is het belangrijk om er rekening mee te houden dat de implementatie-eenheid voor functies in Azure de functie-app is. Alle functies in een functie-app worden op hetzelfde moment geïmplementeerd, meestal vanuit hetzelfde implementatiepakket.

Overweeg deze opties voor een geslaagde implementatie:

  • Laat uw functies uitvoeren vanuit het implementatiepakket. Deze methode voor uitvoeren vanuit een pakket biedt de volgende voordelen:

    • Vermindert het risico op problemen met het vergrendelen van bestanden.
    • Kan rechtstreeks worden geïmplementeerd in een productie-app, waardoor opnieuw opstarten wordt geactiveerd.
    • Weet dat alle bestanden in het pakket beschikbaar zijn voor uw app.
    • Verbetert de prestaties van ARM-sjabloonimplementaties.
    • Kan de koude starttijden verkorten, 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-abonnementen kunt u overwegen om een opwarmtrigger toe te voegen om de latentie te verminderen wanneer er nieuwe exemplaren worden toegevoegd. Zie Azure Functions opwarmtrigger voor meer informatie.

  • Overweeg implementatiesites te gebruiken om downtime van implementaties te minimaliseren en implementaties terug te kunnen draaien. Zie Azure Functions implementatiesites voor meer informatie.

Robuuste functies schrijven

Er zijn verschillende ontwerpprincipes die u kunt volgen bij het schrijven van uw functiecode die helpen bij de algemene prestaties en beschikbaarheid van uw functies. Deze principes omvatten:

Omdat tijdelijke fouten vaak voorkomen in cloud-computing, moet u een patroon voor opnieuw proberen gebruiken bij het openen van cloudresources. Veel triggers en bindingen implementeren al nieuwe pogingen.

Ontwerpen voor beveiliging

Beveiliging kan het beste worden overwogen tijdens de planningsfase en niet nadat uw functies klaar zijn voor gebruik. Zie Azure Functions beveiligen voor meer informatie over het veilig ontwikkelen en implementeren van functies.

Gelijktijdigheid overwegen

Naarmate de vraag zich ontwikkelt op uw functie-app als gevolg van binnenkomende gebeurtenissen, worden functie-apps die worden uitgevoerd in verbruiks- en Premium-abonnementen uitgeschaald. Het is belangrijk om te begrijpen hoe uw functie-app reageert op laden en hoe de triggers kunnen worden geconfigureerd voor het verwerken van binnenkomende gebeurtenissen. Zie Gebeurtenisgestuurd schalen in Azure Functions voor een algemeen overzicht.

Voor specifieke (App Service) abonnementen moet u zorgen voor het uitschalen 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 taalwerkrolprocessen genoemd, in het exemplaar vóór uitschalen. Het maximum aantal toegestane processen voor taalwerkers wordt bepaald door de instelling FUNCTIONS_WORKER_PROCESS_COUNT . De standaardinstelling voor deze instelling is 1, wat betekent dat er niet meerdere processen worden gebruikt. Nadat het maximum aantal processen is bereikt, wordt de functie-app uitgebreid naar meer exemplaren om de belasting te verwerken. Deze instelling is niet van toepassing op C#-klassebibliotheekfuncties, die worden uitgevoerd in het hostproces.

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

Triggerconfiguratie

Bij het plannen van doorvoer en schalen is het belangrijk om te begrijpen hoe de verschillende typen triggers gebeurtenissen verwerken. Met sommige triggers kunt u het batchgedrag beheren en gelijktijdigheid beheren. Door de waarden in deze opties aan te passen, kan elk exemplaar vaak op de juiste manier worden geschaald op basis van de vereisten van de aangeroepen functies. Deze configuratieopties worden toegepast op alle triggers in een functie-app en worden onderhouden in het host.json-bestand voor de app. Zie de sectie Configuratie van de specifieke triggerreferentie voor meer informatie over de instellingen.

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

Verbindingen plannen

Functie-apps die worden uitgevoerd in het verbruiksabonnement zijn onderhevig aan verbindingslimieten. Deze limieten worden per exemplaar afgedwongen. Vanwege deze limieten en als algemene best practice, moet u uw uitgaande verbindingen optimaliseren vanuit uw functiecode. Zie Verbindingen beheren in Azure Functions voor meer informatie.

Taalspecifieke overwegingen

Houd bij uw keuzetaal rekening met de volgende overwegingen:

Beschikbaarheid maximaliseren

Koude start is een belangrijke overweging voor serverloze architecturen. Zie Koude start voor meer informatie. Als koude start een probleem is voor uw scenario, kunt u meer informatie vinden in het artikel Informatie over serverloze koude start .

Premium-abonnement is het aanbevolen plan voor het verminderen van koude start met behoud van dynamische schaal. U kunt de volgende richtlijnen gebruiken om koude start te verminderen en de beschikbaarheid in alle drie de hostingabonnementen te verbeteren.

Plannen Hulp
Premium-abonnement Implementeer een opwarmtrigger in uw functie-app
Stel de waarden in voor Always-Ready exemplaren en maximale burstlimiet
Ondersteuning voor virtuele netwerktriggers gebruiken bij het gebruik van niet-HTTP-triggers in een virtueel netwerk
Toegewezen abonnementen Uitvoeren op ten minste twee exemplaren met Azure App Service Statuscontrole ingeschakeld
Automatische schaalaanpassing implementeren
Verbruiksabonnement • Controleer uw gebruik van Singleton-patronen en de gelijktijdigheidsinstellingen voor bindingen en triggers om te voorkomen dat kunstmatig limieten worden ingesteld voor de schaal van uw functie-app.
Controleer de functionAppScaleLimit instelling, waardoor het uitschalen kan worden beperkt
• Controleer op een limiet voor dagelijks gebruiksquotum (GB-sec) die is ingesteld tijdens het ontwikkelen en testen. Overweeg deze limiet te verwijderen in productieomgevingen.

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 op basis van uw code. Zie Azure Functions bewaken voor meer informatie. Azure Monitor biedt ook faciliteiten voor het bewaken van de status van de functie-app zelf. Zie Bewaking met Azure Monitor voor meer informatie.

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

  • Zorg ervoor dat de toepassingsinstelling AzureWebJobsDashboard is verwijderd. Deze instelling werd ondersteund in een oudere versie van Functions. Als deze bestaat, verbetert het verwijderen AzureWebJobsDashboard 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. U kunt de excludedTypes instelling gebruiken om bepaalde typen uit te sluiten van steekproeven, zoals Request of Exception. Zie Steekproeven configureren voor meer informatie.

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

Redundantie inbouwen

Uw bedrijfsbehoeften vereisen mogelijk dat uw functies altijd beschikbaar zijn, zelfs tijdens een storing in een datacenter. Zie Azure Functions herstel na geo-noodgeval en hoge beschikbaarheid voor meer informatie over het gebruik van een multiregionale aanpak om uw kritieke functies altijd actief te houden.

Volgende stappen

Uw functie-app beheren