Condividi tramite


Procedure consigliate per Funzioni di Azure affidabili

Funzioni di Azure è un'esperienza di calcolo su richiesta basata su eventi che estende la piattaforma applicativa del servizio app di Azure esistente con funzionalità per implementare il codice attivato da eventi che si verificano in Azure, nel servizio di terze parti e nei sistemi locali. Funzioni consente di creare soluzioni connettendosi a origini dati o soluzioni di messaggistica, semplificando 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, è previsto che le macchine virtuali possano occasionalmente riavviare o spostare e si verificheranno aggiornamenti dei sistemi. Le app per le funzioni dipendono probabilmente anche dalle API esterne, dai servizi di Azure e da altri database, che sono soggetti anche a inaffidabilità periodica.

Questo articolo illustra in dettaglio alcune procedure consigliate per la progettazione e la distribuzione di app per le funzioni efficienti che rimangono integre e prestazioni ottimali 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. Questi sono i piani di hosting forniti da Funzioni di Azure:

Importante

Il piano Flex Consumption è attualmente in anteprima.

Nel contesto della piattaforma del 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 Piano Premium.

Il piano di hosting scelto determina i comportamenti seguenti:

  • Ridimensionamento dell'app per le funzioni in base alla domanda e 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 opzioni di hosting di Funzioni di Azure.

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

Configurare correttamente l'archiviazione

Per le funzioni è necessario associare un account di archiviazione all'app per le funzioni. La connessione all'account di archiviazione viene usata dall'host di Funzioni per operazioni quali la gestione di trigger e la registrazione delle esecuzioni delle funzioni. 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 correttamente 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 non corretto, vedere l'articolo sulla risoluzione dei problemi di archiviazione.

Impostazioni di connessione di archiviazione

Le app per le funzioni ridimensionate in modo dinamico possono essere eseguite da un endpoint di 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 ,è necessario includere WEBSITE_CONTENTAZUREFILECONNECTIONSTRING anche nel modello.

Nella prima distribuzione usando un modello di Resource Manager, non includere WEBSITE_CONTENTSHARE, che viene generato automaticamente.

È 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. Funzioni si basa su Archiviazione di Azure per operazioni come la gestione dei trigger e la registrazione dell'esecuzione delle funzioni. La stringa di connessione dell'account di archiviazione per l'app per le funzioni è disponibile nelle impostazioni dell'applicazione AzureWebJobsStorage e WEBSITE_CONTENTAZUREFILECONNECTIONSTRING.

Quando si crea questo account di archiviazione, tenere presenti le considerazioni seguenti:

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

  • Per migliorare le prestazioni nell'ambiente di produzione, usare un account di archiviazione separato per ogni app per le funzioni. Ciò vale soprattutto per 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 consentire a una funzione di elaborare un set di dati esistente di grandi dimensioni. Per altre informazioni, vedere Montare condivisioni file.

Organizzare le funzioni

Come parte della soluzione, è probabile che si sviluppino e pubblicano più funzioni. Queste funzioni vengono spesso combinate in una singola app per le funzioni, ma possono essere eseguite anche in app per le funzioni separate. Nei piani di hosting Premium e Dedicato (Servizio app) più app per le funzioni possono anche condividere le stesse risorse eseguendo nello stesso piano. Il raggruppamento delle funzioni e delle app per le funzioni può 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:

  • Fare in modo che le funzioni vengano eseguite dal pacchetto di distribuzione. Questo eseguito 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 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, prendere in considerazione l'aggiunta di un trigger di riscaldamento per ridurre la latenza quando vengono aggiunte nuove istanze. Per altre informazioni, vedere Trigger di riscaldamento di Funzioni di Azure.

  • 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 Slot di distribuzione di Funzioni di Azure.

Scrivere funzioni affidabili

Quando si scrive il codice della funzione, esistono diversi principi di progettazione che è possibile seguire per migliorare le prestazioni generali e la disponibilità della funzione. Questi principi includono:

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

Progettare per la sicurezza

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

Prendere in considerazione la concorrenza

Man mano che la domanda si basa sull'app per le funzioni in seguito a eventi in ingresso, le app per le funzioni in esecuzione nei piani a consumo e Premium vengono ridimensionate. È importante comprendere in che modo l'app per le funzioni risponde al caricamento e come i trigger possono essere configurati per gestire gli eventi in ingresso. Per una panoramica generale, vedere Scalabilità guidata dagli eventi in Funzioni di Azure.

I piani dedicati (servizio app) richiedono l'implementazione 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 dell'aumento del numero di istanze. Il numero massimo di processi di lavoro linguistici consentiti è controllato dall'impostazione FUNCTIONS_WORKER_PROCESS_COUNT. L'impostazione predefinita per questa impostazione è 1, il che significa che non vengono usati più processi. 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#, che vengono 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 Premium EP2 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 in che modo i diversi tipi di trigger elaborano gli eventi. Alcuni trigger consentono di controllare i comportamenti di invio in batch e di 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 sul modo in cui Funzioni elabora i flussi di messaggi, vedere Elaborazione affidabile degli eventi di Funzioni di Azure.

Pianificare le connessioni

Le app per le funzioni in esecuzione nel piano a consumo sono soggette ai limiti di connessione. Questi limiti vengono applicati per 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 preferita, tenere presenti le considerazioni seguenti:

Ottimizzare la disponibilità

L'avvio a freddo è una considerazione fondamentale per le architetture serverless. Per altre informazioni, vedere Avvio a freddo. Se l'avvio a freddo è un problema per lo scenario, è possibile trovare un approfondimento nel post Informazioni sull'avvio a freddo serverless.

Il piano Premium è il piano consigliato per ridurre gli avvi a freddo durante la gestione della scalabilità dinamica. È possibile usare le indicazioni seguenti per ridurre gli avvii a freddo e migliorare la disponibilità in tutti e tre i piani di hosting.

Piano Indicazioni
Piano Premium Implementare un trigger warmup 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 controllo integrità del servizio app di Azure 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 artificiali sulla scalabilità dell'app per le funzioni.
Esaminare l'impostazione di functionAppScaleLimit, che può limitare la scalabilità orizzontale
• Verificare la presenza di un limite di utilizzo giornaliero (GB-sec) impostato durante lo sviluppo e il test. Provare a rimuovere questo limite negli ambienti di produzione.

Monitorare in modo efficace

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

Quando si usa l'integrazione di Application Insights per monitorare le funzioni, tenere presenti le considerazioni seguenti:

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

  • Esaminare i log di Application Insights. Se mancano i dati previsti, è 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 multi-area per mantenere sempre in esecuzione le funzioni critiche, vedere ripristino di emergenza geografico di Funzioni di Azure e disponibilità elevata.

Passaggi successivi

Gestire l'app per le funzioni