Procedure consigliate per il servizio app di AzureBest Practices for Azure App Service

Questo articolo riepiloga le procedure consigliate per l'uso del servizio app di Azure.This article summarizes best practices for using Azure App Service.

ColocationColocation

Quando le risorse di Azure che costituiscono una soluzione, ad esempio un'app Web e un database, si trovano in aree diverse, possono verificarsi le situazioni seguenti:When Azure resources composing a solution such as a web app and a database are located in different regions, it can have the following effects:

  • Aumento della latenza nella comunicazione tra le risorseIncreased latency in communication between resources
  • Addebiti per il trasferimento dei dati in uscita tra aree come indicato nella pagina dei prezzi di Azure.Monetary charges for outbound data transfer cross-region as noted on the Azure pricing page.

La condivisione dell'area è ideale per le risorse di Azure che compongono una soluzione per la memorizzazione di dati o contenuti, come un'app Web e un database o un account di archiviazione.Colocation in the same region is best for Azure resources composing a solution such as a web app and a database or storage account used to hold content or data. Quando si creano risorse, verificare che si trovino nella stessa area di Azure, tranne in casi specifici motivati da ragioni aziendali o di design.When creating resources, make sure they are in the same Azure region unless you have specific business or design reason for them not to be. È possibile spostare un'app del servizio app nella stessa area del database usando la funzionalità di clonazione del servizio app attualmente disponibile nel piano di servizio app Premium.You can move an App Service app to the same region as your database by using the App Service cloning feature currently available for Premium App Service Plan apps.

Quando le app usano più memoria del previstoWhen apps consume more memory than expected

Quando si nota che un'app usa più memoria del previsto, come indicato tramite il monitoraggio o consigli per il servizio, prendere in considerazione la funzionalità di correzione automatica del servizio app.When you notice an app consumes more memory than expected as indicated via monitoring or service recommendations, consider the App Service Auto-Healing feature. Una delle opzioni della funzionalità di correzione automatica consente di eseguire azioni personalizzate in base a una soglia di memoria.One of the options for the Auto-Healing feature is taking custom actions based on a memory threshold. Le azioni includono notifiche tramite posta elettronica, analisi con dump di memoria e attenuazione locale tramite riciclo del processo di lavoro.Actions span the spectrum from email notifications to investigation via memory dump to on-the-spot mitigation by recycling the worker process. La correzione automatica può essere configurata usando web.config e un'interfaccia utente semplice, come descritto in questo post di blog per l' estensione del sito di supporto del servizio app.Auto-healing can be configured via web.config and via a friendly user interface as described at in this blog post for the App Service Support Site Extension.

Quando le app usano più CPU del previstoWhen apps consume more CPU than expected

Quando si nota che un'app utilizza più CPU del previsto o presenta picchi di utilizzo della CPU ripetuti rispetto a quanto indicato dai servizi di monitoraggio e assistenza, può essere opportuno aumentare le prestazioni o il numero di istanze del piano di servizio app.When you notice an app consumes more CPU than expected or experiences repeated CPU spikes as indicated via monitoring or service recommendations, consider scaling up or scaling out the App Service plan. Se si tratta di un'applicazione con stato, l'aumento delle prestazioni è l'unica opzione disponibile, mentre se l'applicazione è senza stato, l'aumento del numero di istanze offre maggiore flessibilità e un potenziale di scalabilità più elevato.If your application is stateful, scaling up is the only option, while if your application is stateless, scaling out gives you more flexibility and higher scale potential.

Per ulteriori informazioni sulle applicazioni "con stato" e "senza stato", è possibile guardare il video relativo alla pianificazione di un'applicazione multilivello end-to-end scalabile nel servizio app Azure.For more information about “stateful” vs “stateless” applications you can watch this video: Planning a Scalable End-to-End Multi-Tier Application on Azure App Service. Per altre informazioni sulle opzioni di scalabilità e scalabilità automatica del servizio app, vedere Aumentare le prestazioni di un'app Web nel servizio app di Azure.For more information about App Service scaling and autoscaling options, see Scale a Web App in Azure App Service.

Quando si esauriscono le risorse socketWhen socket resources are exhausted

Una causa comune dell'esaurimento delle connessioni TCP in uscita è l'impiego di librerie client non implementate per il riutilizzo delle connessioni TCP o il mancato uso di un protocollo di livello superiore, ad esempio keep-alive HTTP.A common reason for exhausting outbound TCP connections is the use of client libraries, which are not implemented to reuse TCP connections, or when a higher-level protocol such as HTTP - Keep-Alive is not used. Rivedere la documentazione di ogni libreria a cui fanno riferimento le app nel piano di servizio app per verificare che tali librerie siano configurate o accessibili nel codice per un efficiente riutilizzo delle connessioni in uscita.Review the documentation for each of the libraries referenced by the apps in your App Service Plan to ensure they are configured or accessed in your code for efficient reuse of outbound connections. Seguire anche le indicazioni della documentazione delle librerie per le corrette operazioni di creazione, rilascio o pulizia per evitare la perdita di connessioni.Also follow the library documentation guidance for proper creation and release or cleanup to avoid leaking connections. Mentre è in corso l'esame delle librerie client, è possibile attenuare l'impatto sulle prestazioni aumentando il numero di istanze.While such client libraries investigations are in progress, impact may be mitigated by scaling out to multiple instances.

Node.js e richieste HTTP in uscitaNode.js and outgoing http requests

Quando si usa Node.js ed è presente un numero rilevante di richieste HTTP in uscita, è importante saper gestire il protocollo keep-alive HTTP.When working with Node.js and many outgoing http requests, dealing with HTTP - Keep-Alive is important. È possibile usare il pacchetto agentkeepalive npm per semplificarne la gestione nel codice.You can use the agentkeepalive npm package to make it easier in your code.

È necessario gestire sempre la risposta http anche se non si interviene nel gestore.Always handle the http response, even if you do nothing in the handler. Se la risposta non viene gestita correttamente, l'applicazione alla fine rimane bloccata a causa dell'esaurimento delle risorse socket.If you don't handle the response properly, your application gets stuck eventually because no more sockets are available.

Ad esempio, quando si usa il pacchetto http o https:For example, when working with the http or https package:

const request = https.request(options, function(response) {
    response.on('data', function() { /* do nothing */ });
});

In caso di esecuzione del servizio app in Linux in un computer con più core, un'altra procedura consigliata prevede l'uso di PM2 per avviare più processi Node.js per eseguire l'applicazione.If you are running on App Service on Linux on a machine with multiple cores, another best practice is to use PM2 to start multiple Node.js processes to execute your application. A tale scopo, specificare un comando di avvio nel contenitore.You can do it by specifying a startup command to your container.

Ad esempio, per avviare quattro istanze:For example, to start four instances:

pm2 start /home/site/wwwroot/app.js --no-daemon -i 4

Quando il backup dell'applicazione non viene più eseguitoWhen your app backup starts failing

Le due cause più comuni della mancata esecuzione del backup delle app sono: impostazioni di archiviazione non valide e configurazione del database non valida.The two most common reasons why app backup fails are: invalid storage settings and invalid database configuration. In genere, questi errori si verificano in caso di modifiche alle risorse di archiviazione o di database o in caso di modifiche nella modalità di accesso a tali risorse, ad esempio quando vengono aggiornate le credenziali per il database selezionato nelle impostazioni di backup.These failures typically happen when there are changes to storage or database resources, or changes for how to access these resources (for example, credentials updated for the database selected in the backup settings). I backup in genere sono eseguiti in base a una pianificazione e richiedono l'accesso alla risorsa di archiviazione (per l'output dei file di cui è stato eseguito il backup) e ai database (per copiare e leggere il contenuto da includere nel backup).Backups typically run on a schedule and require access to storage (for outputting the backed-up files) and databases (for copying and reading contents to be included in the backup). Il risultato dell'incapacità di accedere a queste risorse è una mancata riuscita, costante, del backup.The result of failing to access either of these resources would be consistent backup failure.

Quando si verificano errori di backup, esaminare i risultati più recenti per capire quale tipo di errore si è verificato.When backup failures happen, review most recent results to understand which type of failure is happening. In caso di errori di accesso alla risorsa di archiviazione, controllare e aggiornare le impostazioni di archiviazione usate nella configurazione del backup.For storage access failures, review and update the storage settings used in the backup configuration. In caso di errori di accesso ai database, controllare e aggiornare le stringhe di connessione nelle impostazioni dell'applicazione. Procedere quindi ad aggiornare la configurazione del backup al fine di includere correttamente i necessari database.For database access failures, review and update your connections strings as part of app settings; then proceed to update your backup configuration to properly include the required databases. Per altre informazioni sul backup delle app, vedere Eseguire il backup di un'app Web nel servizio app di Azure.For more information on app backups, see Back up a web app in Azure App Service.

Quando vengono distribuite nuove app Node.js nel Servizio app di AzureWhen new Node.js apps are deployed to Azure App Service

La configurazione predefinita del Servizio app di Azure per le app Node.js mira a soddisfare al meglio le esigenze delle app più comuni.Azure App Service default configuration for Node.js apps is intended to best suit the needs of most common apps. Se la configurazione dell'app Node.js può trarre vantaggio dall'ottimizzazione personalizzata per migliorare le prestazioni oppure per ottimizzare l'utilizzo delle risorse di rete, della memoria o della CPU, vedere Procedure consigliate e guida alla risoluzione dei problemi per le applicazioni Node nel servizio app di Azure.If configuration for your Node.js app would benefit from personalized tuning to improve performance or optimize resource usage for CPU/memory/network resources, see Best practices and troubleshooting guide for Node applications on Azure App Service. Questo articolo descrive le impostazioni di iisnode che può essere necessario configurare per l'app Node.js, illustra i vari scenari o problemi possibili per l'app e indica come risolvere questi problemi.This article describes the iisnode settings you may need to configure for your Node.js app, describes the various scenarios or issues that your app may be facing, and shows how to address these issues.

Passaggi successiviNext Steps

Per altre informazioni sulle procedure consigliate, vedere la pagina relativa alla diagnostica del servizio app per individuare le procedure consigliate di utilità pratica specifiche per la risorsa.For more information on best practices, visit App Service Diagnostics to find out actionable best practices specific to your resource.

  • Passare all'app Web nel portale di Azure.Navigate to your Web App in the Azure portal.
  • Fare clic su diagnostica e risoluzione dei problemi nel percorso di spostamento a sinistra, che consente di aprire la diagnostica del servizio app.Click on Diagnose and solve problems in the left navigation, which opens App Service Diagnostics.
  • Scegliere riquadro Best Practices Homepage.Choose Best Practices homepage tile.
  • Fare clic su procedure consigliate per la disponibilità & le prestazioni o le procedure consigliate per la configurazione ottimale per visualizzare lo stato corrente dell'app per quanto riguarda queste procedure consigliate.Click Best Practices for Availability & Performance or Best Practices for Optimal Configuration to view the current state of your app in regards to these best practices.

È anche possibile usare questo collegamento per aprire direttamente la diagnostica del servizio app per la risorsa: https://ms.portal.azure.com/?websitesextension_ext=asd.featurePath%3Ddetectors%2FParentAvailabilityAndPerformance#@microsoft.onmicrosoft.com/resource/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{siteName}/troubleshoot .You can also use this link to directly open App Service Diagnostics for your resource: https://ms.portal.azure.com/?websitesextension_ext=asd.featurePath%3Ddetectors%2FParentAvailabilityAndPerformance#@microsoft.onmicrosoft.com/resource/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{siteName}/troubleshoot.