Procedure consigliate per l'Funzioni di Azure affidabile

Funzioni di Azure è un'esperienza basata su eventi e su richiesta che estende la piattaforma applicazione di Servizio app di Azure esistente con funzionalità per implementare il codice attivato dagli eventi in Azure, nel servizio di terze parti e nei sistemi locali. Le funzioni consentono di creare soluzioni connettendosi a origini dati o soluzioni di messaggistica, che semplificano l'elaborazione e la reazione agli eventi. Le funzioni vengono eseguite nei data center di Azure, complessi con molti componenti integrati. In un ambiente cloud ospitato, si prevede che le macchine virtuali possano occasionalmente riavviare o spostare e che si verifichino aggiornamenti dei sistemi. Le app per le funzioni dipendono anche dalle API esterne, dai servizi di Azure e da altri database, che sono soggetti anche a un'impossibilità periodica.

Questo articolo illustra alcune procedure consigliate per la progettazione e la distribuzione di app per le funzioni efficienti che rimangono integre e funzionano bene in un ambiente basato sul cloud.

Scegliere il piano di hosting corretto

Quando si crea un'app per le funzioni in Azure, è necessario scegliere un piano di hosting per l'app. Il piano scelto ha un effetto sulle prestazioni, sull'affidabilità e sui costi. Esistono tre piani di hosting di base disponibili per Funzioni:

Tutti i piani di hosting sono disponibili a livello generale durante l'esecuzione di Linux o Windows.

Nel contesto della piattaforma servizio app, il piano Premium usato per ospitare dinamicamente le funzioni è il piano Elastic Premium (EP). Esistono altri piani dedicati (servizio app) denominati Premium. Per altre informazioni, vedere l'articolo del piano Premium .

Il piano di hosting scelto determina i comportamenti seguenti:

  • Come l'app per le funzioni viene ridimensionata in base alla domanda e alla modalità di gestione dell'allocazione delle istanze.
  • Le risorse disponibili per ogni istanza dell'app per le funzioni.
  • Il supporto per funzionalità avanzate, ad esempio la connettività della rete virtuale di Azure.

Per altre informazioni sulla scelta del piano di hosting corretto e per un confronto dettagliato tra i piani, vedere Funzioni di Azure opzioni di hosting.

È importante scegliere il piano corretto quando si crea l'app per le funzioni. Le funzioni offrono una possibilità limitata di cambiare il piano di hosting, principalmente tra i piani Consumo e Elastic Premium. Per altre informazioni, vedere Pianificare la migrazione.

Configurare correttamente l'archiviazione

Le funzioni richiedono l'associazione di un account di archiviazione all'app per le funzioni. La connessione dell'account di archiviazione viene usata dall'host Funzioni per le operazioni, ad esempio la gestione dei trigger e le esecuzioni delle funzioni di registrazione. Viene usato anche quando si ridimensionano dinamicamente le app per le funzioni. Per altre informazioni, vedere Considerazioni sull'archiviazione per Funzioni di Azure.

Un file system o un account di archiviazione non configurato nell'app per le funzioni può influire sulle prestazioni e sulla disponibilità delle funzioni. Per informazioni sulla risoluzione dei problemi relativi a un account di archiviazione configurato in modo errato, vedere l'articolo sulla risoluzione dei problemi di archiviazione .

Impostazioni di connessione di archiviazione

Le app per le funzioni che ridimensionano dinamicamente possono essere eseguite da un endpoint File di Azure nell'account di archiviazione o dai file server associati alle istanze con scalabilità orizzontale. Questo comportamento è controllato dalle impostazioni dell'applicazione seguenti:

Queste impostazioni sono supportate solo quando si esegue in un piano Premium o in un piano a consumo in Windows.

Quando si crea l'app per le funzioni nel portale di Azure o usando l'interfaccia della riga di comando di Azure o Azure PowerShell, queste impostazioni vengono create per l'app per le funzioni quando necessario. Quando si creano le risorse da un modello di Azure Resource Manager (modello ARM), è necessario includere WEBSITE_CONTENTAZUREFILECONNECTIONSTRING anche nel modello.

Nella prima distribuzione usando un modello di Resource Manager non includere WEBSITE_CONTENTSHARE, che viene generato per l'utente.

È possibile usare gli esempi di modello di Resource Manager seguenti per configurare correttamente queste impostazioni:

Configurazione dell'account di archiviazione

Quando si crea un'app per le funzioni, è necessario creare o collegare un account di Archiviazione di Azure di uso generico che supporti l'archiviazione BLOB, code e tabelle. Le funzioni si basano su Archiviazione di Azure per le operazioni, ad esempio la gestione dei trigger e le esecuzioni delle funzioni di registrazione. La stringa di connessione dell'account di archiviazione per l'app per le AzureWebJobsStorage funzioni è disponibile nelle impostazioni dell'applicazione e WEBSITE_CONTENTAZUREFILECONNECTIONSTRING .

Tenere presente quanto segue quando si crea questo account di archiviazione:

  • Per ridurre la latenza, creare l'account di archiviazione nella stessa area dell'app per le funzioni.

  • Per migliorare le prestazioni in produzione, usare un account di archiviazione separato per ogni app per le funzioni. Ciò è particolarmente vero con le funzioni attivate da Durable Functions e Hub eventi.

  • Per le funzioni attivate da Hub eventi, non usare un account con Data Lake Storage abilitato.

Gestione di set di dati di grandi dimensioni

Quando si esegue in Linux, è possibile aggiungere spazio di archiviazione aggiuntivo montando una condivisione file. Il montaggio di una condivisione è un modo pratico per una funzione per elaborare un set di dati esistente di grandi dimensioni. Per altre informazioni, vedere Montare condivisioni file.

Organizzare le funzioni

Come parte della soluzione, probabilmente si sviluppano e pubblicano più funzioni. Queste funzioni vengono spesso combinate in un'unica app per le funzioni, ma possono essere eseguite anche in app per le funzioni separate. Nei piani di hosting Premium e Dedicati (servizio app), più app per le funzioni possono anche condividere le stesse risorse eseguendo nello stesso piano. In che modo si raggruppano le funzioni e le app per le funzioni possono influire sulle prestazioni, il ridimensionamento, la configurazione, la distribuzione e la sicurezza della soluzione complessiva.

Per il piano Consumo e Premium, tutte le funzioni in un'app per le funzioni vengono ridimensionate in modo dinamico.

Per altre informazioni su come organizzare le funzioni, vedere Procedure consigliate per l'organizzazione delle funzioni.

Ottimizzare le distribuzioni

Quando si distribuisce un'app per le funzioni, è importante tenere presente che l'unità di distribuzione per le funzioni in Azure è l'app per le funzioni. Tutte le funzioni in un'app per le funzioni vengono distribuite contemporaneamente, in genere dallo stesso pacchetto di distribuzione.

Prendere in considerazione queste opzioni per una distribuzione riuscita:

  • Eseguire le funzioni dal pacchetto di distribuzione. Questa esecuzione dall'approccio al pacchetto offre i vantaggi seguenti:

    • Riduce il rischio di problemi di blocco di copia dei file.
    • Può essere distribuito direttamente in un'app di produzione, che attiva un riavvio.
    • Sapere che tutti i file nel pacchetto sono disponibili per l'app.
    • Migliora le prestazioni delle distribuzioni di modelli di Resource Manager.
    • Si possono ridurre i tempi di avvio a freddo, in particolare per le funzioni di JavaScript con grandi alberi del pacchetto npm.
  • È consigliabile usare la distribuzione continua per connettere le distribuzioni alla soluzione di controllo del codice sorgente. Le distribuzioni continue consentono anche di eseguire dal pacchetto di distribuzione.

  • Per l'hosting di piani Premium, è consigliabile aggiungere un trigger di riscaldamento per ridurre la latenza quando vengono aggiunte nuove istanze. Per altre informazioni, vedere Funzioni di Azure trigger di riscaldamento.

  • Per ridurre al minimo i tempi di inattività della distribuzione e per poter eseguire il rollback delle distribuzioni, è consigliabile usare gli slot di distribuzione. Per altre informazioni, vedere Funzioni di Azure slot di distribuzione.

Scrivere funzioni affidabili

Esistono diversi principi di progettazione che è possibile seguire durante la scrittura del codice della funzione che consentono prestazioni generali e disponibilità delle funzioni. Questi principi includono:

Poiché gli errori temporanei sono comuni nel cloud computing, è consigliabile usare un modello di ripetizione dei tentativi durante l'accesso alle risorse basate sul cloud. Molti trigger e associazioni implementano già i tentativi.

Progettare per la sicurezza

La sicurezza è considerata meglio durante la fase di pianificazione e non dopo che le funzioni sono pronte per andare. Per informazioni su come sviluppare e distribuire in modo sicuro le funzioni, vedere Protezione Funzioni di Azure.

Considerare la concorrenza

Poiché la domanda si basa sull'app per le funzioni in seguito agli eventi in ingresso, le app per le funzioni in esecuzione nei piani Consumo e Premium vengono ridimensionate. È importante comprendere come l'app per le funzioni risponde al caricamento e come è possibile configurare i trigger per gestire gli eventi in ingresso. Per una panoramica generale, vedere Ridimensionamento basato sugli eventi in Funzioni di Azure.

I piani dedicati (servizio app) richiedono di fornire per aumentare la scalabilità delle app per le funzioni.

Conteggio dei processi di lavoro

In alcuni casi, è più efficiente gestire il carico creando più processi, denominati processi di lavoro del linguaggio, nell'istanza prima della scalabilità orizzontale. Il numero massimo di processi di lavoro del linguaggio consentiti è controllato dall'impostazione FUNCTIONS_WORKER_PROCESS_COUNT . L'impostazione predefinita per questa impostazione è 1, il che significa che più processi non vengono usati. Dopo aver raggiunto il numero massimo di processi, l'app per le funzioni viene ridimensionata in più istanze per gestire il carico. Questa impostazione non si applica alle funzioni della libreria di classi C# eseguite nel processo host.

Quando si usa FUNCTIONS_WORKER_PROCESS_COUNT in un piano Premium o in un piano dedicato (servizio app), tenere presente il numero di core forniti dal piano. Ad esempio, il piano EP2 Premium fornisce due core, quindi è consigliabile iniziare con un valore di 2 e aumentare di due in base alle esigenze, fino al massimo.

Configurazione trigger

Quando si pianifica la velocità effettiva e il ridimensionamento, è importante comprendere come i diversi tipi di trigger elaborano gli eventi. Alcuni trigger consentono di controllare i comportamenti di batch e gestire la concorrenza. La modifica dei valori di queste opzioni consente spesso di applicare a ogni istanza la scalabilità appropriata per soddisfare le esigenze delle funzioni richiamate. Queste opzioni di configurazione vengono applicate a tutti i trigger in un'app per le funzioni e vengono mantenute nel file host.json per l'app. Per informazioni dettagliate sulle impostazioni, vedere la sezione Configurazione del riferimento al trigger specifico.

Per altre informazioni su come Funzioni elabora i flussi di messaggi, vedere Funzioni di Azure'elaborazione degli eventi affidabile.

Pianificare le connessioni

Le app per le funzioni in esecuzione nel piano di consumo sono soggette a limiti di connessione. Questi limiti vengono applicati in base a ogni istanza. A causa di questi limiti e come procedura consigliata generale, è consigliabile ottimizzare le connessioni in uscita dal codice della funzione. Per altre informazioni, vedere Gestire le connessioni in Funzioni di Azure.

Considerazioni specifiche del linguaggio

Per la lingua scelta, tenere presente le considerazioni seguenti:

Ottimizzare la disponibilità

L'avvio a freddo è una considerazione fondamentale per le architetture serverless. Per altre informazioni, vedere Avvio ad accesso sporadico. Se l'inizio a freddo è un problema per lo scenario, è possibile trovare un'analisi più approfondita nel post Informazioni sull'avvio a freddo serverless .

Il piano Premium è il piano consigliato per ridurre i freddo e mantenere la scalabilità dinamica. È possibile usare le indicazioni seguenti per ridurre l'avvio a freddo e migliorare la disponibilità in tutti e tre i piani di hosting.

Piano Indicazioni
Piano Premium Implementare un trigger di riscaldamento nell'app per le funzioni
Impostare i valori per le istanze Always-Ready e il limite massimo di burst
Usare il supporto del trigger di rete virtuale quando si usano trigger non HTTP in una rete virtuale
Piani dedicati Eseguire in almeno due istanze con Servizio app di Azure controllo integrità abilitato
Implementare la scalabilità automatica
Piano a consumo • Esaminare l'uso di modelli Singleton e le impostazioni di concorrenza per le associazioni e i trigger per evitare limiti in modo artificiale sulla scalabilità dell'app per le funzioni.
Esaminare l'impostazione, che può limitare la functionAppScaleLimit scalabilità orizzontale
• Verificare la presenza di un limite di utilizzo giornaliero (GB-sec) impostato durante lo sviluppo e il test. È consigliabile rimuovere questo limite negli ambienti di produzione.

Monitorare in modo efficace

Funzioni di Azure offre l'integrazione predefinita con applicazione Azure Insights per monitorare l'esecuzione e le tracce delle funzioni scritte dal codice. Per altre informazioni, vedere Monitorare Funzioni di Azure. Monitoraggio di Azure offre anche strutture per monitorare l'integrità dell'app per le funzioni stessa. Per altre informazioni, vedere Monitoraggio con Monitoraggio di Azure.

È consigliabile tenere presente le considerazioni seguenti quando si usa l'integrazione di Application Insights per monitorare le funzioni:

  • Assicurarsi che l'impostazione dell'applicazione AzureWebJobsDashboard venga rimossa. Questa impostazione è stata supportata nella versione precedente di Funzioni. Se esiste, la rimozione AzureWebJobsDashboard migliora le prestazioni delle funzioni.

  • Esaminare i log di Application Insights. Se i dati previsti per trovare sono mancanti, è consigliabile modificare le impostazioni di campionamento per acquisire meglio lo scenario di monitoraggio. È possibile usare l'impostazione excludedTypes per escludere determinati tipi dal campionamento, ad esempio Request o Exception. Per altre informazioni, vedere Configurare il campionamento.

Funzioni di Azure consente anche di inviare log generati dal sistema e generati dall'utente ai log di Monitoraggio di Azure. L'integrazione con i log di Monitoraggio di Azure è attualmente in anteprima.

Compilazione in ridondanza

Le esigenze aziendali potrebbero richiedere che le funzioni siano sempre disponibili, anche durante un'interruzione del data center. Per informazioni su come usare un approccio a più aree per mantenere sempre in esecuzione le funzioni critiche, vedere Funzioni di Azure ripristino di emergenza geografico e disponibilità elevata.

Passaggi successivi

Gestire l'app per le funzioni