Delen via


Aanbevolen procedures 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 die plaatsvinden in Azure, in services van derden en in on-premises systemen. Met Functions kunt u oplossingen bouwen door verbinding te maken met gegevensbronnen of berichtenoplossingen, waardoor het eenvoudiger is om gebeurtenissen te verwerken en erop te reageren. Functies worden 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 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, heeft een effect op prestaties, betrouwbaarheid en kosten. Dit zijn de hostingabonnementen van Azure Functions:

Belangrijk

Het Flex Consumption-abonnement is momenteel beschikbaar als preview-versie.

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) genaamd 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 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 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 verbinding met het opslagaccount wordt gebruikt door de Functions-host voor bewerkingen zoals het beheren van triggers en het uitvoeren van logboekregistratiefuncties. 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 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:

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

Wanneer u uw functie-app maakt in Azure Portal of met behulp van Azure CLI of Azure PowerShell, worden deze instellingen zo nodig voor uw functie-app gemaakt. 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:

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 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

Bij het implementeren van een functie-app 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 tegelijkertijd geïmplementeerd, meestal uit 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 dat problemen met het kopiëren van bestanden worden vergrendeld.
    • 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 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 opwarmen van Azure Functions voor meer informatie.

  • Als u de downtime van de implementatie wilt minimaliseren en implementaties wilt terugdraaien, kunt u overwegen implementatiesites te gebruiken. 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 u helpt bij algemene prestaties en beschikbaarheid van uw functies. Deze principes zijn onder andere:

Omdat tijdelijke fouten gebruikelijk zijn 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 wordt het beste overwogen tijdens de planningsfase en niet nadat uw functies klaar zijn om te gaan. Zie Azure Functions beveiligen voor meer informatie over het veilig ontwikkelen en implementeren van functies.

Gelijktijdigheid overwegen

Naarmate de vraag voortbouwt 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 om binnenkomende gebeurtenissen te verwerken. Zie Gebeurtenisgestuurd schalen in Azure Functions voor een algemeen overzicht.

Voor toegewezen (App Service)-abonnementen moet u opgeven dat u uw functie-apps kunt uitschalen.

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. Het maximum aantal toegestane taalwerkprocessen wordt bepaald door de FUNCTIONS_WORKER_PROCESS_COUNT-instelling . 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 uitgeschaald naar meer exemplaren om de belasting te verwerken. Deze instelling is niet van toepassing op C#-klassenbibliotheekfuncties die worden uitgevoerd in het hostproces.

Houd bij gebruik van FUNCTIONS_WORKER_PROCESS_COUNT een Premium-abonnement of Dedicated (App Service)-abonnement rekening met het aantal kerngeheugens 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

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 gedrag van batchverwerking beheren en gelijktijdigheid beheren. Door de waarden in deze opties aan te passen, kan elke instantie op de juiste wijze worden geschaald voor 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 instellingendetails.

Zie Betrouwbare gebeurtenisverwerking van Azure Functions 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 instantie 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 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, kunt u een diepere duik vinden in de post Understanding serverless cold start .

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

Plannen Richtlijn
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 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 is ondersteund in een oudere versie van Functions. Als deze bestaat, verbetert het verwijderen AzureWebJobsDashboard van 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 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 Azure Functions geo-noodherstel en hoge beschikbaarheid voor meer informatie over het gebruik van een aanpak voor meerdere regio's om uw kritieke functies altijd actief te houden.

Volgende stappen

Uw functie-app beheren