Servizio app di Azure e affidabilità

Il Servizio app di Azure è un servizio per l'hosting di applicazioni Web, API REST e back-end mobili, basato su HTTP. Il servizio aggiunge la potenza di Microsoft Azure alle applicazioni, ad esempio:

  • Sicurezza
  • Bilanciamento del carico
  • Scalabilità automatica
  • Gestione automatica

Per esplorare i modi in cui il Servizio app di Azure può migliorare la resilienza del carico di lavoro delle applicazioni, vedere le funzionalità essenziali in Perché usare il servizio app?

Le sezioni seguenti includono considerazioni sulla progettazione, un elenco di controllo per la configurazione e opzioni di configurazione consigliate specifiche per il Servizio app di Azure.

Considerazioni relative alla progettazione

Microsoft garantisce che il Servizio app di Azure sarà disponibile per 99.95% del tempo. Il contratto di servizio è supportato durante l'esecuzione in una singola istanza o in più istanze. Non viene tuttavia fornito alcun contratto di servizio per l'uso dei livelli Gratuito o Condiviso.

Per altre informazioni, vedere il contratto di servizio per il servizio app.

Elenco di controllo

Il Servizio app di Azure è stato configurato in modo specifico per la resilienza?


  • Prendere in considerazione la disabilitazione di Affinità ARR per il servizio app.
  • Usare un archivio diverso per lo stato della sessione.
  • Usare processi Web.
  • Abilitare la soluzione Always On per assicurare l'esecuzione affidabile dei processi Web.
  • Accedere al database locale usando connessioni private come la rete privata virtuale di Azure o Express Route.
  • Configurare il backup e il ripristino.
  • Comprendere l'impatto della deprecazione degli indirizzi IP.
  • Assicurarsi che gli ambienti del servizio app vengano distribuiti in configurazioni a disponibilità elevata in zone di disponibilità.
  • Assicurarsi che la rete dell'ambiente del servizio app sia configurata correttamente.
  • Prendere in considerazione la configurazione di una preferenza di aggiornamento se vengono usati più ambienti.
  • Pianificare l'aumento della capacità del cluster dell'ambiente del servizio app.
  • Usare slot di distribuzione per distribuzioni di codice resilienti.
  • Evitare riavvii non necessari del ruolo di lavoro.
  • Usare l'esecuzione da pacchetto per evitare i conflitti di distribuzione.
  • Usare il piano Basic o piani superiori con due o più istanze di ruolo di lavoro per una disponibilità elevata.
  • Valutare l'uso delle porte TCP e SNAT per evitare gli errori di connessione in uscita.
  • Abilitare il controllo integrità per identificare i ruoli di lavoro non reattivi.
  • Abilitare la scalabilità automatica per assicurare la disponibilità di risorse adeguate per le richieste di servizio.
  • Abilitare la cache locale per ridurre le dipendenze dai file server del cluster.
  • Abilitare la registrazione diagnostica per fornire informazioni dettagliate sul comportamento dell'applicazione.
  • Abilitare gli avvisi di Application Insights per segnalare condizioni di errore.
  • Esaminare i dati di diagnostica del Servizio app di Azure per assicurare che i problemi comuni vengano risolti.
  • Valutare il ridimensionamento per app per hosting a densità elevata nel Servizio app di Azure.

Raccomandazioni per la configurazione

Esplorare la tabella di raccomandazioni seguente per ottimizzare la configurazione del servizio app per l'affidabilità del servizio:

Raccomandazione dell'ambiente del servizio app Descrizione
Prendere in considerazione la disabilitazione di Affinità ARR per il servizio app. Affinità ARR (Application Request Routing) imposta un cookie di affinità, che viene usato per reindirizzare gli utenti allo stesso nodo che ha gestito le rispettive richieste precedenti.
Usare un archivio diverso per lo stato della sessione. L'archiviazione dello stato della sessione in memoria può provocare la perdita dello stato della sessione quando si verifica un problema con l'applicazione o il servizio app. Limita anche la possibilità di distribuire il carico su altre istanze.
Abilitare la soluzione Always On per assicurare l'esecuzione affidabile dei processi Web. Un'app Web può raggiungere il timeout dopo 20 minuti di inattività. Solo le richieste all'app Web effettiva comportano la reimpostazione del timer. Se l'app viene eseguita in modo continuo o se si pianifica l'opzione Trigger timer per i processi Web, abilitare la soluzione Always On. Disponibile solo nei piani tariffari Basic, Standard e Premium.
Accedere al database locale usando connessioni private come la rete privata virtuale di Azure o Express Route. Accedere al database locale tramite a una connessione privata in modo che la connessione sia sicura e prevedibile.
Configurare il backup e il ripristino. Il backup e il ripristino consentono di creare o pianificare manualmente i backup delle app. È possibile conservare i backup per un periodo di tempo indefinito.
Comprendere l'impatto della deprecazione degli indirizzi IP. Non è garantito che gli indirizzi mobili rimangano nella risorsa. È essenziale verificare se sono presenti indirizzi IP deprecati.
Eseguire la distribuzione in una configurazione a disponibilità elevata nelle zone di disponibilità. Garantisce che le applicazioni possano continuare a funzionare anche se si verifica un errore a livello di data center. Fornisce una ridondanza eccellente senza richiedere più distribuzioni in diverse aree di Azure.
Configurare correttamente la rete dell'ambiente del servizio app. Un problema comune dell'ambiente del servizio app si verifica quando l'ambiente del servizio app viene distribuito in una subnet con uno spazio indirizzi IP troppo piccolo per supportare l'espansione futura. In tali casi è possibile che l'ambiente del servizio app non sia in grado di eseguire il ridimensionamento senza ridistribuire l'intero ambiente in una subnet più grande. È consigliabile usare indirizzi IP adeguati per supportare il numero massimo di ruoli di lavoro o il numero più elevato che si ritiene possa essere necessario per i carichi di lavoro considerati. Un singolo cluster dell'ambiente del servizio app può essere ridimensionato fino a 201 istanze e questo scenario richiederebbe una subnet /24.
Configurare una preferenza di aggiornamento se vengono usati più ambienti. Se vengono usati ambienti inferiori per lo staging o i test, prendere in considerazione la configurazione di questi ambienti per la ricezione anticipata degli aggiornamenti rispetto all'ambiente di produzione. Questo approccio consentirà di identificare eventuali conflitti o problemi relativi a un aggiornamento e fornisce una finestra per attenuare i problemi prima che raggiungano l'ambiente di produzione. Se vengono usate più distribuzioni in produzione con bilanciamento del carico (zonali), è possibile usare una preferenza di aggiornamento per proteggere l'ambiente più ampio dai problemi degli aggiornamenti della piattaforma.
Aumentare la capacità del cluster dell'ambiente del servizio app. L'aumento delle prestazioni o della capacità dell'ambiente del servizio app richiede tra 30 e 60 minuti perché è necessario effettuare il provisioning di nuove istanze private. È consigliabile investire in pianificazione anticipata per il ridimensionamento durante i picchi di carico o gli scenari di errore temporanei.
Usare slot di distribuzione per distribuzioni di codice resilienti. Gli slot di distribuzione consentono la distribuzione del codice in istanze che vengono riscaldate prima di gestire il traffico di produzione. Per altre informazioni, vedere Test in produzione con il Servizio app di Azure.
Evitare riavvii non necessari del ruolo di lavoro. Molti eventi possono provocare il riavvio dei ruoli di lavoro del servizio app, ad esempio la distribuzione di contenuti, le modifiche alle impostazioni delle app e le modifiche alla configurazione dell'integrazione della rete virtuale. Una procedura consigliata consiste nell'apportare modifiche in uno slot di distribuzione diverso dallo slot attualmente configurato per accettare il traffico di produzione. Dopo il riciclo e il riscaldamento dei ruoli di lavoro, è possibile eseguire uno scambio senza tempo di inattività superfluo.
Run From Package per evitare conflitti di distribuzione. Run from Package fornisce diversi vantaggi:
- Elimina i conflitti di blocco dei file tra distribuzione e runtime.
- Assicura che in un determinato momento siano in esecuzione solo app completamente distribuite.
- Può ridurre i tempi di avvio a freddo in particolare per le funzioni di JavaScript con grandi alberi del pacchetto npm.
Usare il piano Basic o piani superiori con due o più istanze di ruolo di lavoro per una disponibilità elevata. Il Servizio app di Azure fornisce molte opzioni di configurazione non abilitate per impostazione predefinita.
Valutare l'uso delle porte TCP e SNAT. Le connessioni TCP vengono usate per tutte le connessioni in uscita, ma le porte SNAT vengono usate quando si stabiliscono connessioni in uscita per indirizzi IP pubblici. L'esaurimento delle porte SNAT è uno scenario di errore comune che può essere previsto mediante il test di carico durante il monitoraggio delle porte tramite Diagnostica di Azure. Per altre informazioni, vedere Porte TCP e SNAT.
Abilitare il controllo integrità per identificare i ruoli di lavoro non reattivi. Qualsiasi controllo dell'integrità è meglio di nessun controllo. La logica dietro i test degli endpoint deve valutare tutte le dipendenze downstream critiche per garantire l'integrità complessiva. La procedura consigliata consiste nel tenere traccia dell'integrità delle applicazioni e dello stato della cache in tempo reale poiché tale approccio consente di rimuovere ritardi non necessari prima che sia possibile eseguire un'azione.
Abilitare la scalabilità automatica per assicurare la disponibilità di risorse adeguate per le richieste di servizio. Il limite predefinito di ruoli di lavoro del servizio app è 30. Se il servizio app usa regolarmente 15 o più istanze, prendere in considerazione l'apertura di un ticket di supporto per incrementare il numero massimo di ruoli di lavoro a 2x il numero di istanze necessario per gestire un picco di carico normale.
Abilitare Local_Cache per ridurre le dipendenze dai file server del cluster. L'abilitazione della cache locale è sempre appropriata perché può causare tempi di avvio più lenti per il ruolo di lavoro. Se associato agli slot di distribuzione, questo approccio può migliorare la resilienza rimuovendo le dipendenze dai file server e riduce anche gli evento di riciclo correlati alle risorse di archiviazione. Non usare la cache locale con una singola istanza di ruolo di lavoro o quando sono necessarie risorse di archiviazione condivise.
Abilitare la registrazione diagnostica per fornire informazioni dettagliate sul comportamento dell'applicazione. La registrazione diagnostica consente di inserire log avanzati a livello di applicazione e piattaforma tramite Log Analytics, Archiviazione di Azure o uno strumento di terze parti mediante Hub eventi.
Abilitare gli avvisi di Application Insights per rilevare le condizioni di errore. Il monitoraggio delle prestazioni applicative con Application Insights fornisce analisi approfondite sulle prestazioni delle applicazioni. Per i piani Windows è possibile usare un approccio con distribuzione senza codice per ottenere rapidamente un'analisi della prestazioni senza modificare il codice.
Esaminare i dati di diagnostica del Servizio app di Azure per assicurare che i problemi comuni vengano risolti. È consigliabile esaminare regolarmente le raccomandazioni e i dati di diagnostica correlati al servizio e intraprendere le azioni appropriate.
Valutare il ridimensionamento per app per hosting a densità elevata nel Servizio app di Azure. Il ridimensionamento per app può essere abilitato a livello di piano di servizio app per consentire il ridimensionamento di un'app indipendentemente dal piano di servizio app che la ospita. È così possibile configurare un piano di servizio app per offrire 10 istanze e impostare un'app in modo che usi solo cinque istanze. Le app vengono allocate entro il piano di servizio app disponibile usando un approccio ottimale per una distribuzione uniforme tra le istanze. Benché una distribuzione uniforme non sia garantita, la piattaforma assicurerà che due istanze della stessa app non vengano ospitate nella stessa istanza del piano di servizio app.

Suggerimento

Per altre informazioni sulle indicazioni sull'affidabilità per Servizio app di Azure, vedere Affidabilità in Servizio app di Azure.

Porte TCP e SNAT

Se un test di carico restituisce come risultato errori SNAT, è necessario eseguire il ridimensionamento in più ruoli di lavoro o ruoli di lavoro più grandi oppure implementare procedure di scrittura di codice per contribuire a mantenere e riutilizzare le porte SNAT, ad esempio il pool di connessioni e il caricamento posticipato delle risorse. Non è consigliabile superare 100 connessioni in uscita simultanee a un indirizzo IP pubblico per ruolo di lavoro ed è consigliabile evitare di comunicare con servizi downstream tramite indirizzi IP pubblici quando è possibile usare un indirizzo privato (endpoint privato) o un endpoint di servizio tramite integrazione di rete virtuale. L'esaurimento delle porte TCP si verifica quando la somma delle connessioni da un determinato ruolo di lavoro supera la capacità. Il numero di porte TCP disponibili dipende dalle dimensioni del ruolo di lavoro.

Nella tabella seguente sono elencati i limiti correnti:

Porte TCP Small (B1, S1, P1, I1) Medium (B2, S2, P2, I2) Large (B3, S3, P3, I3)
Porte TCP 1920 3968 8064

Le applicazioni con molte connessioni di lunga durata richiedono che le porte rimangano aperte per lunghi periodi di tempo e ciò può provocare l'esaurimento delle connessioni TCP. I limiti delle connessioni TCP sono fissi in base alle dimensioni delle istanze, quindi è necessario passare a una dimensione superiore del ruolo di lavoro per aumentare l'assegnazione di connessioni TCP o implementare mitigazioni a livello di codice per regolamentare l'utilizzo delle connessioni. Analogamente all'esaurimento delle porte SNAT, è possibile usare Diagnostica di Azure per identificare l'esistenza di un problema relativo ai limiti delle porte TCP.

Artefatti di origine

Per identificare piani di servizio app con una sola istanza, usare la query seguente:

Resources
| where type == "microsoft.web/serverfarms" and properties.computeMode == `Dedicated`
| where sku.capacity == 1

Altre informazioni

Guida definitiva all'esecuzione di app integre sul cloud

Passaggio successivo