Condividi tramite


Prospettiva di Azure Well-Architected Framework sul Servizio App di Azure (App Web)

Il servizio app di Azure è una piattaforma distribuita come servizio (PaaS) che fornisce un ambiente di hosting completamente gestito per la creazione, la distribuzione e il ridimensionamento di applicazioni Web. Come soluzione PaaS, il servizio app astrae l'infrastruttura sottostante, consentendo di concentrarsi sullo sviluppo di applicazioni. Il servizio app (app Web) esegue le app nel contesto di un piano di servizio app, che determina le risorse, il sistema operativo, l'area e il modello di determinazione prezzi (SKU) usati per ospitare l'app.

Questo articolo presuppone che come architetto tu abbia esaminato l'albero decisionale del calcolo e abbia scelto App Service come soluzione di calcolo per il carico di lavoro. Le linee guida contenute in questo articolo forniscono raccomandazioni sull'architettura mappate ai principi dei pilastri di Azure Well-Architected Framework .

Importante

Come usare questa guida

Ogni sezione contiene un elenco di controllo di progettazione evidenziare le considerazioni e le strategie dell'architettura per il servizio app di Azure. Raccomandazioni offrono indicazioni specifiche per implementare tali strategie.

I consigli non rappresentano un elenco completo di tutte le configurazioni disponibili per la funzionalità App Web del servizio app di Azure e le relative dipendenze. Vengono invece elencate le raccomandazioni principali mappate alle prospettive di progettazione. Usare i consigli per creare il modello di verifica o ottimizzare gli ambienti esistenti.

Architettura di base che illustra le raccomandazioni principali: Architettura di Base del Servizio App .

ambito della tecnologia

Questa revisione è incentrata sulle decisioni correlate per le risorse di Azure seguenti:

  • Piani di servizio app
  • App Web

Altre offerte di Azure sono associate al servizio app, ad esempio Funzioni di Azure, App per la logica di Azure e Ambiente del servizio app. Queste offerte non rientrano nell'ambito di questo articolo. L'ambiente del servizio di app viene citato occasionalmente per chiarire le funzionalità o le opzioni delle offerte principali del servizio di app.

Affidabilità

Lo scopo del pilastro Affidabilità è fornire funzionalità continue la creazione di resilienza sufficienti e la possibilità di recuperare rapidamente dagli errori.

I principi di progettazione affidabilità forniscono una strategia di progettazione di alto livello applicata per singoli componenti, flussi di sistema e sistema nel suo complesso.

Elenco di controllo per la progettazione

Avvia la strategia di progettazione in base alla checklist di revisione del design per l'Affidabilità. Determinare la rilevanza per i requisiti aziendali tenendo presenti i livelli e le funzionalità del servizio app e le relative dipendenze. Estendere la strategia per includere altri approcci in base alle esigenze.

  • Assegnare priorità ai flussi utente: non tutti i flussi sono ugualmente critici. Identificare i percorsi critici nell'applicazione e assegnare priorità a ogni flusso per guidare le decisioni di progettazione. La progettazione del flusso utente può influenzare quale livello di servizio e numero di istanze scegliere per un piano di App Service e la sua configurazione.

    Ad esempio, l'applicazione potrebbe includere livelli front-end e back-end che comunicano tramite un broker di messaggi. È possibile scegliere di segmentare i livelli in più app Web per consentire scalabilità indipendente, gestione del ciclo di vita e manutenzione. L'inserimento di un'applicazione di grandi dimensioni in un singolo piano può causare problemi di memoria o CPU e influire sull'affidabilità.

    Potrebbero essere necessarie più istanze sul front-end per ottenere prestazioni ottimali sul lato interfaccia utente. Tuttavia, il back-end potrebbe non richiedere lo stesso numero di istanze.

  • Prevedere potenziali errori: pianificare strategie di mitigazione per potenziali errori. La tabella seguente mostra esempi di analisi della modalità di errore.

    Fallimento Mitigazione
    Errore dei componenti di Servizio App sottostanti o astratti Assicurare la ridondanza dei componenti nelle istanze e nelle dipendenze. Monitorare l'integrità delle istanze, delle prestazioni di rete e delle prestazioni di archiviazione.
    Errore di dipendenze esterne Usare modelli di progettazione, ad esempio modello di ripetizione dei tentativi e il modello di interruttore . Monitorare le dipendenze esterne e impostare i timeout appropriati.
    Errore dovuto al traffico indirizzato a istanze non funzionanti Monitorare l'integrità dell'istanza. Prendere in considerazione la velocità di risposta ed evitare l'invio di richieste a istanze non funzionanti.

    Per altre informazioni, vedere l'analisi della modalità di errore per le applicazioni di Azure.

  • Creare la ridondanza: creare ridondanza nell'applicazione e nell'infrastruttura di supporto. Distribuire le istanze tra zone di disponibilità per migliorare la tolleranza di errore. Il traffico viene instradato verso altre zone se una zona fallisce. Distribuire l'applicazione in più aree per assicurarsi che l'app rimanga disponibile, anche se si verifica un'interruzione dell'intera area.

    Creare livelli simili di ridondanza nei servizi dipendenti. Ad esempio, le istanze dell'applicazione si associano all'archivio BLOB. Considerare la possibilità di configurare l'account di archiviazione associato con l'archiviazione a ridondanza di zona se un'applicazione utilizza una distribuzione con ridondanza di zona.

  • Usa più istanze: L'esecuzione dell'app in una sola istanza è un punto di guasto unico e immediato. Allocare più istanze alla tua app per garantire l'alta disponibilità. Se un'istanza ha esito negativo, altre istanze possono comunque gestire le richieste in ingresso. Tenere presente che il codice dell'app deve essere in grado di gestire più istanze senza problemi di sincronizzazione durante la lettura o la scrittura in origini dati.

    Assicurarsi di avere ridondanza nei componenti di rete. Ad esempio, usare indirizzi IP con ridondanza della zona e servizi di bilanciamento del carico.

  • Avere una strategia di scalabilità affidabile: il carico imprevisto in un'applicazione può renderlo inaffidabile. Prendere in considerazione l'approccio di ridimensionamento corretto in base alle caratteristiche del carico di lavoro. Il ridimensionamento orizzontale (aumento del numero di istanze) consente di aggiungere altre istanze per distribuire il carico, mentre il ridimensionamento verticale (aumento delle prestazioni) comporta l'aumento della capacità di un'istanza esistente (CPU, memoria). Prestare attenzione all'over-provisioning, poiché l'aggiunta di istanze non necessarie aumenta i costi senza vantaggi tangibili in termini di prestazioni.

    A volte è possibile aumentare le prestazioni per gestire il carico. Tuttavia, se il carico continua ad aumentare, scalare verso nuove istanze. Preferisci la scalabilità automatica rispetto agli approcci manuali. Mantenere sempre un buffer di capacità aggiuntiva durante le operazioni di ridimensionamento per evitare una riduzione delle prestazioni[Scegliere l'opzione di ridimensionamento per il servizio app](Ridimensionamento automatico nel servizio app di Azure)

    Il piano di servizio app di livello che scegli influisce sul ridimensionamento in termini di numero di istanze e unità di elaborazione.

  • Assicurarsi che l'inizializzazione dell'app sia corretta in modo che le nuove istanze si avviino rapidamente e possano ricevere richieste.

    Sforzarsi di sviluppare applicazioni senza stato ogni volta che è possibile. Il ridimensionamento affidabile dello stato con nuove istanze può aumentare la complessità. Prendere in considerazione un archivio dati esterno che è possibile ridimensionare in modo indipendente se è necessario archiviare lo stato dell'applicazione. L'archiviazione dello stato della sessione in memoria può comportare la perdita dello stato della sessione quando si verifica un problema con l'applicazione o il servizio app. Limita inoltre la possibilità di distribuire il carico tra altre istanze.

    Testare regolarmente le regole di scalabilità automatica. Simulare scenari di carico per verificare che l'app si adatti come previsto. È consigliabile registrare gli eventi di ridimensionamento in modo da poter risolvere i problemi che possono verificarsi e ottimizzare la strategia di scalabilità nel tempo.

    App Service presenta una limitazione per il numero di istanze all'interno di un piano, che influisce sull'affidabilità del ridimensionamento. Una strategia consiste nell'usare stampi di distribuzione identici, ciascuno eseguendo un'istanza del Piano di Servizio App con il proprio endpoint. È essenziale far fronte a tutti gli stamp con un servizio di bilanciamento del carico esterno per distribuire il traffico tra di essi. Utilizzare Azure Application Gateway per le distribuzioni a singola zona e Azure Front Door per le distribuzioni multi-regionali. Questo approccio è ideale per applicazioni cruciali in cui l'affidabilità è fondamentale. Per altre informazioni, vedere baseline mission-critical con il servizio app.

  • Pianificare la recuperabilità: la ridondanza è fondamentale per la continuità aziendale. Eseguire il failover su un'altra istanza se un'istanza non è raggiungibile. Esplorare le funzionalità di correzione automatica in App Service, come il ripristino automatico delle istanze.

    Implementare modelli di progettazione per gestire una riduzione normale delle prestazioni per entrambi gli errori temporanei, ad esempio problemi di connettività di rete e eventi su larga scala, ad esempio interruzioni a livello di area. Considerare i modelli di progettazione seguenti:

    • il modello Bulkhead segmenta l'applicazione in gruppi isolati per evitare che un errore influisca sull'intero sistema.

    • Il modello di livellamento del carico Queue-Based mette in coda le attività che fungono da buffer per attenuare i picchi di traffico.

    • Il modello di ripetizione dei tentativi gestisce gli errori temporanei causati da errori di rete, connessioni di database eliminate o servizi occupati.

    • il modello di interruttore impedisce a un'applicazione di tentare ripetutamente di eseguire un'operazione che potrebbe non riuscire.

    È possibile usare Processi Web per eseguire attività in background nell'app Web. Per eseguire tali attività in modo affidabile, assicurarsi che l'app che ospita le attività venga eseguita continuamente in base a una pianificazione o in base a trigger basati su eventi.

    Per altre informazioni, vedere modelli di affidabilità .

  • Eseguire test di affidabilità: eseguire test di carico per valutare l'affidabilità e le prestazioni dell'applicazione sotto carico. I piani di test devono includere scenari che convalidano le operazioni di ripristino automatizzato.

    Usare l'inserimento di errori per introdurre intenzionalmente guasti e convalidare i meccanismi di auto-riparazione e autoconservazione. Esplorare la libreria di errori fornita da Azure Chaos Studio.

    Il servizio app impone limiti di risorse per le app ospitate. Il piano di servizio app determina questi limiti. Assicurarsi che i test confermino che l'app venga eseguita entro i limiti delle risorse. Per altre informazioni, vedere abbonamento Azure e limiti e vincoli dei servizi.

  • Usare la funzionalità Controllo integrità per identificare i lavoratori che non rispondono: Il servizio App ha funzionalità integrate che eseguono periodicamente il ping di un percorso specifico dell'applicazione Web. La piattaforma esegue il ping di questo percorso per determinare se l'applicazione è integra e risponde alle richieste. Quando il sito viene ridimensionato in più istanze, il Servizio App escluderà le istanze non integre dall'elaborazione delle richieste, migliorando la disponibilità complessiva. Il percorso di controllo dell'integrità dell'app deve verificare i componenti critici dell'applicazione, come il database, la cache o il servizio di messaggistica. Ciò garantisce che lo stato restituito dal percorso di controllo integrità sia un quadro accurato dell'integrità complessiva dell'applicazione. Impostare il percorso di controllo dell'integrità

  • usare la funzionalità di correzione automatica: a volte l'applicazione potrebbe riscontrare comportamenti imprevisti che potrebbero essere risolti da un semplice riavvio. Le funzionalità di correzione automatica consentono di definire una "condizione" che attiverà la correzione automatica e l'azione avviata automaticamente quando viene soddisfatta la condizione. strumenti di diagnostica di App Service e funzione di auto-correzione

  • Report del Punteggio di Resilienza di App Service: per esaminare le raccomandazioni sulle migliori pratiche personalizzate, vedere il Report del Punteggio di Resilienza.Report del Punteggio di Resilienza di App Service

Consigli

Raccomandazione Beneficio
(Servizio app) Scegliere il livello Premium v3 di un piano di servizio app per i carichi di lavoro di produzione.

Impostare il numero massimo e minimo di ruoli di lavoro in base alla pianificazione della capacità. Per altre informazioni, vedere panoramica del piano di servizio app .
Un piano di servizio app Premium V3 offre funzionalità di scalabilità avanzate e garantisce la ridondanza in caso di errori.
(Servizio app) Abilitare la ridondanza zonale.

Considera di prevedere più di tre istanze per migliorare la tolleranza ai guasti.

Controllare il supporto a livello di area per la ridondanza della zona perché non tutte le aree offrono questa funzionalità.
L'applicazione può resistere agli errori in una singola zona quando più istanze vengono distribuite tra zone. Il traffico viene automaticamente indirizzato verso istanze funzionanti in altre zone e mantiene l'affidabilità dell'applicazione se una zona non è disponibile.
(App Web) Valutare la possibilità di disabilitare la funzionalità di affinità di routing delle richieste dell'applicazione ( ARR). L'affinità ARR crea sessioni permanenti che reindirizzano gli utenti al nodo che ha gestito le richieste precedenti. Le richieste in ingresso vengono distribuite uniformemente in tutti i nodi disponibili quando si disabilita l'affinità ARR. Le richieste distribuite in modo uniforme impediscono al traffico di sovraccaricare qualsiasi nodo singolo. Le richieste possono essere reindirizzate senza problemi ad altri nodi integri se un nodo non è disponibile.

Evitare l'affinità di sessione per assicurarsi che l'istanza di App Service rimanga senza stato. Un servizio app senza stato riduce la complessità e garantisce un comportamento coerente tra i nodi.

Rimuovere le sessioni permanenti in modo che App Service possa aggiungere o rimuovere istanze per scalare orizzontalmente.
(App Web) Definire regole di correzione automatica in base al numero di richieste, alle richieste lente, ai limiti di memoria e ad altri indicatori che fanno parte della baseline delle prestazioni. Prendere in considerazione questa configurazione come parte della strategia di scalabilità. Le regole di correzione automatica consentono all'applicazione di eseguire automaticamente il ripristino da problemi imprevisti. Le regole configurate attivano azioni di correzione quando vengono superate le soglie.

La guarigione automatica consente la manutenzione proattiva automatica.
(App Web) Abilitare la funzionalità di controllo integrità e fornire un percorso che risponda alle richieste di controllo integrità. I controlli sanitari possono rilevare i problemi precocemente. Il sistema può quindi eseguire automaticamente azioni correttive quando una richiesta di controllo integrità ha esito negativo.

Il bilanciatore di carico instrada il traffico lontano dalle istanze non funzionanti, indirizzando così gli utenti verso nodi funzionanti.

Sicurezza

Lo scopo del pilastro della Sicurezza è fornire garanzie di riservatezza, integrità e disponibilità alla mole di lavoro.

I principi di progettazione di sicurezza forniscono una strategia di progettazione di alto livello per raggiungere tali obiettivi applicando approcci alla progettazione tecnica per l'hosting su App Service.

Elenco di controllo per la progettazione

Avvia la strategia di progettazione in base all'elenco di controllo di revisione della progettazione per la sicurezza e identifica vulnerabilità e controlli per migliorare la posizione di sicurezza. Estendere la strategia per includere altri approcci in base alle esigenze.

  • Esaminare le baseline di sicurezza: per migliorare il comportamento di sicurezza dell'applicazione ospitata in un piano di servizio app, esaminare la baseline di sicurezza per il servizio app.

  • Usare il runtime e le librerie più recenti: testare accuratamente le compilazioni dell'applicazione prima di eseguire aggiornamenti per rilevare i problemi in anticipo e garantire una transizione uniforme alla nuova versione. Il servizio app supporta i criteri di supporto del runtime del linguaggio per aggiornare gli stack esistenti e ritirare gli stack di fine supporto.

  • Creare segmentazione tramite limiti di isolamento per contenere la violazione: applicare la segmentazione delle identità. Ad esempio, implementare il controllo degli accessi in base al ruolo per assegnare autorizzazioni specifiche in base ai ruoli. Seguire il principio dei privilegi minimi per limitare i diritti di accesso solo a ciò che è necessario. Creare anche la segmentazione a livello di rete. Implementare le app di App Service in una rete virtuale di Azure per l'isolamento e definire i gruppi di sicurezza di rete (NSG) per filtrare il traffico.

    I piani di App Service offrono il livello Ambiente di App Service che fornisce un elevato grado di isolamento. Con l'ambiente del servizio app si ottengono risorse di calcolo e rete dedicate.

  • Applicare controlli di accesso alle identità: limitare sia l'accesso interno all'app Web che l'accesso esterno dall'app Web ad altre risorse. Questa configurazione applica i controlli di accesso alle identità e consente di mantenere il comportamento di sicurezza complessivo del carico di lavoro.

    Usare Microsoft Entra ID per tutte le esigenze di autenticazione e autorizzazione. Usare i ruoli predefiniti, come un Collaboratore del Piano Web, Collaboratore del Sito Web, un Collaboratore generico , Lettore e Proprietario.

  • Applicare i controlli di sicurezza di rete: integrare il servizio app con una rete virtuale per controllare il traffico in uscita. Usare gli endpoint privati per controllare il traffico in ingresso e limitare l'accesso al servizio app dall'interno della rete virtuale e disabilitare l'accesso a Internet pubblico. Proteggere la rete, controllare il traffico in ingresso e in uscita

    Distribuire un web application firewall (WAF) per proteggersi da vulnerabilità comuni. Sia Application Gateway che Azure Front Door dispongono di funzionalità WAF integrate.

    Configurare le regole del proxy inverso e le impostazioni di rete in modo appropriato per ottenere il livello di sicurezza e controllo desiderato. Ad esempio, aggiungere delle regole NSG nella subnet dell'endpoint privato per accettare solo il traffico proveniente dal proxy inverso.

    Il traffico in uscita dall'applicazione ad altri servizi PaaS deve essere su endpoint privati. Prendere in considerazione l'inserimento di un componente firewall per limitare il traffico in uscita verso Internet pubblico. Entrambi gli approcci impediscono l'esfiltrazione dei dati.

    Per una visualizzazione completa, vedere le funzionalità di rete di App Service .

  • Crittografare i dati: proteggere i dati in transito con TLS (Transport Layer Security) end-to-end. Usare le chiavi gestite dal cliente per la crittografia completa dei dati a riposo. Per ulteriori informazioni, vedere Crittografia a riposo tramite chiavi gestite dal cliente.

    Non usare protocolli legacy come TLS 1.0 e 1.1. Assicurarsi che tutte le app Web usino solo HTTPS e applichino TLS 1.2 o versione successiva. La versione minima predefinita di TLS è 1.2. Per altre informazioni, vedere la panoramica del TLS del Servizio App .

    Tutte le istanze del servizio app hanno un nome di dominio predefinito. Usare un dominio personalizzato e proteggere il dominio con i certificati.

    Crittografia TLS end-to-end: La crittografia TLS end-to-end è disponibile nei piani di Servizio App Premium. Questa funzionalità crittografa il traffico nell'intera transazione, riducendo al minimo il rischio di intercettazione del traffico.

  • Ridurre la superficie di attacco: rimuovere le configurazioni predefinite non necessarie. Ad esempio, disabilitare il debug remoto, l'autenticazione locale per i siti di Gestione controllo del codice sorgente e l'autenticazione di base. Disabilitare protocolli non sicuri come HTTP e FTP (File Transfer Protocol). Applicare le configurazioni tramite i criteri di Azure. Per altre informazioni, vedere criteri di Azure.

    Implementare criteri CORS (Cross-Origin Resource Sharing) restrittivi: usare criteri CORS restrittivi nell'app Web per accettare solo le richieste provenienti da domini, intestazioni e altri criteri consentiti. Applicare i criteri CORS con definizioni di criteri di Azure predefinite.

  • Usare identità gestite: abilitare le identità gestite per il servizio app per accedere in modo sicuro ad altri servizi di Azure senza dover gestire le credenziali. Informazioni sulle identità gestite.

  • Proteggere i segreti dell'applicazione: è necessario gestire informazioni riservate, ad esempio chiavi API o token di autenticazione. Invece di incorporare direttamente questi segreti nel codice dell'applicazione o nei file di configurazione, è possibile utilizzare i riferimenti di Azure Key Vault nella configurazione dell'app. All'avvio dell'applicazione, il servizio app recupera automaticamente i valori del segreto da Key Vault usando l'identità gestita dell'app.

  • Abilitare i log delle risorse per l'applicazione: abilitare i log delle risorse per l'applicazione per creare percorsi di attività completi che forniscono dati preziosi durante le indagini che seguono gli eventi imprevisti di sicurezza. Per indicazioni dettagliate, vedere le linee guida per il monitoraggio dei log .

    Prendere in considerazione la registrazione come parte del processo di modellazione delle minacce quando si valutano le minacce.

Consigli

Raccomandazione Beneficio
(Web app) Assegna identità gestite alla web app. Per mantenere i limiti di isolamento, non condividere o riutilizzare le identità tra le applicazioni.

Assicurati di connetterti in modo sicuro al registro dei contenitori se usi contenitori per la distribuzione.
L'applicazione recupera i segreti da Key Vault per autenticare la comunicazione esterna dall'applicazione. Azure gestisce l'identità e non richiede la configurazione o la rotazione delle credenziali.

Si dispone di identità distinte per la granularità del controllo. Le identità distinte semplificano la revoca se un'identità viene compromessa.
(Applicazione Web) Configurare domini personalizzati per le applicazioni.

Disabilitare HTTP e accettare solo le richieste HTTPS.
I domini personalizzati consentono la comunicazione sicura tramite HTTPS usando il protocollo TLS (Transport Layer Security), che garantisce la protezione dei dati sensibili e crea una relazione di trust utente.
(App Web) valuta se 'autenticazione predefinita del servizio app è il meccanismo corretto per autenticare gli utenti che accedono all'applicazione. L'autenticazione predefinita del servizio app si integra con Microsoft Entra ID. Questa funzionalità gestisce la convalida dei token e la gestione delle identità utente tra più provider di accesso e supporta OpenID Connect. Con questa funzionalità non si dispone dell'autorizzazione a un livello granulare e non si dispone di un meccanismo per testare l'autenticazione. Quando si usa questa funzionalità, non è necessario usare le librerie di autenticazione nel codice dell'applicazione, riducendo la complessità. L'utente è già autenticato quando una richiesta raggiunge l'applicazione.
(App Web) Configurare l'applicazione per l'integrazione della rete virtuale .

Utilizzare endpoint privati per le app di Servizio App. Blocca tutto il traffico pubblico.

Instradare l'immagine del container tramite l'integrazione della rete virtuale. Il traffico in uscita da dell'applicazione passa attraverso la rete virtuale.
Ottenere i vantaggi della sicurezza dell'uso di una rete virtuale di Azure. Ad esempio, l'applicazione può accedere in modo sicuro alle risorse all'interno della rete.

Aggiungere un endpoint privato per proteggere l'applicazione. Gli endpoint privati limitano l'esposizione diretta alla rete pubblica e consentono l'accesso controllato tramite il proxy inverso.
(Web App) Per implementare l'indurimento:
- Disabilitare l'autenticazione di base che usa un nome utente e una password a favore dell'autenticazione basata su ID di Microsoft Entra.
- Disattivare il debug remoto in modo che le porte in ingresso non siano aperte.
- Abilitare politiche CORS per restringere le richieste in ingresso.
- Disabilitare i protocolli, ad esempio FTP.
Non è consigliabile usare l'autenticazione di base come metodo di distribuzione sicura. Microsoft Entra ID usa l'autenticazione basata su token OAuth 2.0, che offre numerosi vantaggi e miglioramenti che risolgono le limitazioni associate all'autenticazione di base.

I criteri limitano l'accesso alle risorse dell'applicazione, consentono solo le richieste da domini specifici e proteggono le richieste tra aree.
(App Web) Utilizzare sempre i riferimenti a Key Vault come impostazioni dell'applicazione.
I segreti vengono mantenuti separati dalla configurazione dell'app. Le impostazioni dell'app vengono crittografate a riposo. Il servizio App gestisce anche la rotazione dei segreti.
(Servizio app) Abilitare Microsoft Defender for Cloud per il servizio app. Ottieni protezione in tempo reale per le risorse eseguite in un Piano di Servizio App. Proteggersi dalle minacce e migliorare il comportamento di sicurezza complessivo.
(Servizio app) Abilitare la registrazione diagnostica e aggiungere strumentazione alla tua app. I log vengono inviati ad account di archiviazione di Azure, Hub eventi di Azure e Log Analytics. Per altre informazioni sui tipi di log di controllo, vedere Tipi di log supportati. La registrazione acquisisce i modelli di accesso. Registra eventi rilevanti che forniscono informazioni dettagliate preziose sul modo in cui gli utenti interagiscono con un'applicazione o una piattaforma. Queste informazioni sono fondamentali per motivi di responsabilità, conformità e sicurezza.

Ottimizzazione costi

L'ottimizzazione dei costi è incentrata su individuare modelli di spesa, assegnare priorità agli investimenti in aree critiche e ottimizzare in altre per soddisfare il budget dell'organizzazione soddisfacendo i requisiti aziendali.

I principi di progettazione Ottimizzazione costi forniscono una strategia di progettazione di alto livello per raggiungere tali obiettivi e fare compromessi in base alle esigenze nella progettazione tecnica relativa alle app Web e all'ambiente in cui vengono eseguiti.

Elenco di controllo per la progettazione

Avviare la strategia di progettazione in base all'elenco di controllo di revisione della progettazione per l'ottimizzazione dei costi per gli investimenti e ottimizzare la progettazione in modo che il carico di lavoro sia allineato al budget allocato per il carico di lavoro. La progettazione deve usare le funzionalità di Azure appropriate, monitorare gli investimenti e trovare opportunità per ottimizzare nel tempo.

  • Stimare il costo iniziale: come parte dell'esercizio di modellazione dei costi, usare il calcolatore prezzi di Azure per valutare i costi approssimativi associati a vari livelli in base al numero di istanze che si intende eseguire. Ogni livello di servizio app offre diverse opzioni di calcolo.

    Monitorare continuamente il modello di costo per tenere traccia delle spese.

  • Valutare le opzioni scontate: i livelli superiori includono istanze di calcolo dedicate. È possibile applicare uno sconto per la prenotazione se il carico di lavoro ha un modello di utilizzo prevedibile e coerente. Assicurarsi di analizzare i dati di utilizzo per determinare il tipo di prenotazione più adatto al carico di lavoro. Per ulteriori informazioni, vedere Risparmio sui costi con le istanze riservate del Servizio App.

  • Informazioni sui contatori di utilizzo: Azure addebita una tariffa oraria, ripartita al secondo, in base al piano tariffario del Servizio app. Gli addebiti si applicano a ogni istanza con scalabilità orizzontale nel piano, in base al tempo di allocazione dell'istanza della macchina virtuale. Prestare attenzione alle risorse di calcolo sottoutilizzate che potrebbero aumentare i costi a causa della sovrassegnazione dovuta alla selezione dello SKU non ottimale o della configurazione di ridimensionamento errata.

    Le funzionalità aggiuntive del servizio app, ad esempio la registrazione del dominio personalizzato e i certificati personalizzati, possono aggiungere costi. Altre risorse, ad esempio reti virtuali per isolare la propria soluzione o vault delle chiavi per proteggere i segreti dei carichi di lavoro, che si integrano con le risorse di App Service, possono anche aggiungere costi. Per altre informazioni, vedere modello di fatturazione di Servizi di app.

  • Considerare i compromessi tra densità e isolamento: è possibile usare i piani di servizio app per ospitare più applicazioni nello stesso ambiente di calcolo, risparmiando così costi con ambienti condivisi. Per altre informazioni, vedere compromessi.

  • Valutare l'effetto della strategia di ridimensionamento sui costi: è necessario progettare, testare e configurare correttamente per la scalabilità orizzontale e per il ridimensionamento verso l'interno quando si implementa la scalabilità automatica. Stabilire limiti massimi e minimi precisi per la scalabilità automatica.

    Inizializzare in modo proattivo l'applicazione per una scalabilità affidabile. Ad esempio, non attendere fino a quando la CPU raggiunge 95% utilizzo. Al contrario, attivare il ridimensionamento a circa 65% per consentire l'allocazione e l'inizializzazione di nuove istanze durante il processo di ridimensionamento. Tuttavia, questa strategia potrebbe portare a capacità inutilizzata.

    È consigliabile combinare e bilanciare i meccanismi per scalare verticalmente e orizzontalmente. Ad esempio, un'app può scalare verticalmente per un certo periodo di tempo e quindi scalare orizzontalmente in base alle esigenze. Esplorare i livelli elevati che offrono capacità elevata e un utilizzo efficiente delle risorse. In base ai modelli di utilizzo, i livelli Premium più elevati sono spesso più convenienti perché sono più capaci.

  • Ottimizzare i costi dell'ambiente: considerare il livello Basic o Gratuito per eseguire ambienti di pre-produzione. Questi livelli sono a basso costo e prestazioni ridotte. Se si usa il livello Basic o Gratuito, usare la governance per applicare il livello, vincolare il numero di istanze e CPU, limitare il ridimensionamento e limitare la conservazione dei log.

  • Implementare modelli di progettazione: questa strategia riduce il volume di richieste generate dal carico di lavoro. Considera l'uso di modelli come il modello front-end-backend e il modello di aggregazione del gateway , che possono ridurre al minimo il numero di richieste e ridurre i costi.

  • Controllare regolarmente i costi correlati ai dati: i periodi di conservazione dei dati estesi o i livelli di archiviazione costosi possono causare costi di archiviazione elevati. Più spese possono accumularsi a causa dell'utilizzo della larghezza di banda e della conservazione prolungata dei dati di registrazione.

    Valutare la possibilità di implementare la memorizzazione nella cache per ridurre al minimo i costi di trasferimento dei dati. Iniziare con la memorizzazione nella cache in memoria locale e quindi esplorare le opzioni di memorizzazione nella cache distribuita per ridurre il numero di richieste al database back-end. Prendere in considerazione i costi del traffico della larghezza di banda associati alla comunicazione tra aree se il database si trova in un'area diversa.

  • Ottimizzare i costi di distribuzione: sfruttare i vantaggi degli slot di distribuzione per ottimizzare i costi. Lo slot funziona nello stesso ambiente di calcolo dell'istanza di produzione. Usarli in modo strategico per scenari come distribuzioni blu-verde che passano da uno slot all'altro. Questo approccio riduce al minimo i tempi di inattività e garantisce transizioni uniformi.

    Usare gli slot di distribuzione con cautela. È possibile introdurre problemi, ad esempio eccezioni o perdite di memoria, che potrebbero influire sulle istanze esistenti e sulle nuove istanze. Assicurarsi di testare accuratamente le modifiche. Per indicazioni operative, vedere Operational Excellence.

Consigli

Raccomandazione Beneficio
(App Service) Scegliere i livelli Free o Basic per ambienti di livello inferiore. È consigliabile usare questi livelli per l'uso sperimentale. Rimuovere i livelli quando non sono più necessari. I livelli Gratuito e Basic sono convenienti rispetto ai livelli più elevati. Offrono una soluzione conveniente per ambienti non di produzione che non necessitano delle funzionalità complete e delle prestazioni dei piani Premium.
(Servizio app) Sfruttare gli sconti ed esplorare i prezzi preferiti per:
- Ambienti di livello inferiore con piani di sviluppo/test e.
- le prenotazioni di Azure e piani di risparmio di Azure per il calcolo dedicato di cui si effettua il provisioning nel livello Premium V3 e nell'ambiente del servizio app.

Usare istanze riservate per carichi di lavoro stabili con modelli di utilizzo prevedibili.
I piani di sviluppo/test offrono tariffe ridotte per i servizi di Azure, rendendoli convenienti per gli ambienti non di produzione.

Usare le istanze riservate per pagare in anticipo le risorse di calcolo e ottenere sconti significativi.
(Applicazione Web) Monitorare i costi che le risorse del servizio App Service generano. Eseguire lo strumento di analisi dei costi nel portale di Azure.

Creare bilanci e avvisi per notificare le parti interessate.
È possibile identificare i picchi di costo, le inefficienze o le spese impreviste all'inizio. Questo approccio proattivo consente di fornire controlli di budget per evitare sovraccariche.
(Servizio app) Aumentare le prestazioni quando la domanda diminuisce. Per aumentare le prestazioni, definire le regole di scalabilità per ridurre il numero di istanze in Monitoraggio di Azure. Evitare wastage e ridurre le spese non necessarie.

Eccellenza operativa

L'eccellenza operativa si concentra principalmente sulle pratiche di sviluppo , l'osservabilità e la gestione delle versioni.

I principi di progettazione di eccellenza operativa forniscono una strategia di progettazione di alto livello per raggiungere tali obiettivi rispetto ai requisiti operativi del carico di lavoro.

Elenco di controllo per la progettazione

Avvia la tua strategia di progettazione basandoti sull'elenco di controllo della revisione progettuale per l'eccellenza operativa, al fine di definire i processi relativi all'osservabilità, ai test e alla distribuzione per le applicazioni Web.

  • Gestire le versioni: usare gli slot di distribuzione per gestire in modo efficace le versioni. È possibile distribuire l'applicazione in uno slot, eseguire test e convalidarne la funzionalità. Dopo la verifica, è possibile spostare facilmente l'app nell'ambiente di produzione. Questo processo non comporta costi aggiuntivi perché lo slot viene eseguito nello stesso ambiente di macchina virtuale (VM) dell'istanza di produzione.

    Usare Swap with Preview (scambio multifase). Scambio con Anteprima consente di testare l'app negli slot di staging contro le impostazioni di produzione e per riscaldare l'app. Dopo aver eseguito i test e aver completato tutti i percorsi necessari, è possibile completare lo scambio e l'app inizierà a ricevere il traffico di produzione senza riavviare.

  • Eseguire test automatizzati: Prima di promuovere una versione della tua app web, verifica attentamente le prestazioni, le funzionalità e l'integrazione con altri componenti. Usare Azure Load Testing, che si integra con Apache JMeter, un popolare strumento per i test delle prestazioni. Esplorare gli strumenti automatizzati per altri tipi di test, ad esempio Phantom per i test funzionali.

  • Automatizzare le distribuzioni: usare pipeline CI/CD con Azure DevOps o GitHub Actions per automatizzare le distribuzioni e ridurre il lavoro manuale distribuzione continua nel servizio app di Azure.

  • Distribuire unità non modificabili: implementare il modello stamp di distribuzione per compartimentare il servizio app in un timbro non modificabile. Il servizio app supporta l'uso di contenitori, intrinsecamente non modificabili. Prendere in considerazione contenitori personalizzati per la web app di App Service.

    Ogni timbro rappresenta un'unità autonoma che è possibile espandere o ridurre rapidamente. Le unità basate su questo stamp sono temporanee e senza stato. La progettazione senza stato semplifica le operazioni e la manutenzione. Questo approccio è ideale per le applicazioni cruciali. Per un esempio, vedere baseline critica per la missione con App Service.

    Usare una tecnologia IaC (Infrastructure as Code), ad esempio Bicep, per eliminare le unità con ripetibilità e coerenza.

  • Mantenere sicuri gli ambienti di produzione: creare piani di servizio app separati per eseguire ambienti di produzione e pre-produzione. Non apportare modifiche direttamente nell'ambiente di produzione per garantire stabilità e affidabilità. Le istanze separate consentono flessibilità nello sviluppo e nei test prima di promuovere le modifiche all'ambiente di produzione.

    Usare ambienti bassi per esplorare nuove funzionalità e configurazioni in modo isolato. Mantenere temporanei gli ambienti di sviluppo e test.

  • Gestire i certificati: per i domini personalizzati è necessario gestire i certificati TLS.

    Disporre di processi per acquistare, rinnovare e convalidare i certificati. Se possibile, eseguire l'offload di questi processi nel servizio app. Se si utilizza il proprio certificato, è necessario gestirne il rinnovo. Scegliere un approccio più adatto ai requisiti di sicurezza.

Raccomandazione Beneficio
(App Web) Monitorare l'integrità delle istanze e attivare le sonde di integrità dell'istanza.

Configurare un percorso specifico per la gestione delle richieste della sonda di monitoraggio della salute.
È possibile rilevare tempestivamente i problemi ed eseguire azioni necessarie per mantenere la disponibilità e le prestazioni.
(App Web) Abilitare i log di diagnostica per l'applicazione e l'istanza.

La registrazione frequente può rallentare le prestazioni del sistema, aggiungere ai costi di archiviazione e introdurre rischi se si ha accesso non sicuro ai log. Seguire queste procedure consigliate:
- Registrare il livello appropriato di informazioni.
- Impostare i criteri di conservazione.
- Mantenere un audit trail di accesso autorizzato e tentativi non autorizzati.
- Considera i log come dati e applica i controlli di protezione dei dati.
I log di diagnostica forniscono informazioni dettagliate preziose sul comportamento dell'app. Monitorare i modelli di traffico e identificare le anomalie.
(App Web) Sfruttare certificati gestiti del servizio app per eseguire l'offload della gestione della certificazione in Azure. Il servizio app gestisce automaticamente processi come approvvigionamento di certificati, verifica del certificato, rinnovo del certificato e importazione di certificati da Key Vault. In alternativa, caricare il certificato in Key Vault e autorizzare il provider di risorse del servizio app ad accedervi.
(Servizio app) Convalidare le modifiche dell'app nello slot di staging prima di scambiarla con lo slot di produzione. Evitare tempi di inattività ed errori.

Ripristinare rapidamente l'ultimo stato valido noto se si rileva un problema dopo uno scambio.

Efficienza delle prestazioni

L'efficienza delle prestazioni riguarda mantenere l'esperienza utente anche quando si verifica un aumento del carico gestendo la capacità. La strategia include il ridimensionamento delle risorse, l'identificazione e l'ottimizzazione dei potenziali colli di bottiglia e l'ottimizzazione delle prestazioni massime.

I principi di progettazione efficienza delle prestazioni forniscono una strategia di progettazione di alto livello per raggiungere tali obiettivi di capacità rispetto all'utilizzo previsto.

Elenco di controllo per la progettazione

Avviare la strategia di progettazione in base all'elenco di controllo della revisione della progettazione per l'efficienza delle prestazioni per definire una baseline basata su indicatori di prestazioni chiave per le app Web.

  • Identificare e monitorare gli indicatori di prestazioni: impostare le destinazioni per gli indicatori chiave per l'applicazione, ad esempio il volume delle richieste in ingresso, il tempo impiegato dall'applicazione per rispondere alle richieste, alle richieste in sospeso e agli errori nelle risposte HTTP. Prendere in considerazione gli indicatori chiave come parte della baseline delle prestazioni per il carico di lavoro.

    Acquisire le metriche del servizio app che costituiscono la base degli indicatori di prestazioni. Raccogliere i log per ottenere informazioni dettagliate sull'utilizzo delle risorse e sulle attività. Usare gli strumenti di monitoraggio delle prestazioni delle applicazioni, ad esempio Application Insights, per raccogliere e analizzare i dati sulle prestazioni dall'applicazione. Per ulteriori informazioni, consultare il riferimento dati di monitoraggio di App Service .

    Includere la strumentazione a livello di codice, la traccia delle transazioni e la profilatura delle prestazioni.

  • Valutare la capacità: simulare vari scenari utente per determinare la capacità ottimale necessaria per gestire il traffico previsto. Usare Test di carico per comprendere il comportamento dell'applicazione con livelli di carico diversi.

  • Selezionare il livello corretto: usare il calcolo dedicato per i carichi di lavoro di produzione. I livelli Premium V3 offrono SKU più grandi con maggiore capacità di memoria e CPU, più istanze e altre funzionalità, ad esempio la ridondanza delle zone. Per altre informazioni, vedere piano tariffario Premium V3.

  • Ottimizzare la strategia di scalabilità: quando possibile, usare scalabilità automatica invece di regolare manualmente il numero di istanze quando cambia il carico dell'applicazione. Con la scalabilità automatica, il servizio app regola la capacità del server in base a regole o trigger predefiniti. Assicurarsi di eseguire test delle prestazioni adeguati e impostare le regole corrette per i trigger corretti.

    Se si assegna la priorità alla semplicità durante l'installazione iniziale, usare un'opzione di scalabilità automatica che non richiede di definire regole e di dover impostare solo i limiti.

    Disporre di risorse sufficienti prontamente disponibili per garantire prestazioni ottimali. Allocare le risorse in modo appropriato per mantenere gli obiettivi di prestazioni, ad esempio il tempo di risposta o la velocità effettiva. Quando necessario, valutare la sovrasocazione delle risorse.

    Quando si definiscono le regole di scalabilità automatica, tenere conto del tempo necessario per l'inizializzazione dell'applicazione. Prendere in considerazione questo sovraccarico quando si prendono tutte le decisioni di ridimensionamento.

  • Usare la memorizzazione nella cache: il recupero di informazioni da una risorsa che non cambia frequentemente ed è costoso per l'accesso influisce sulle prestazioni. Le query complesse, inclusi le unioni e più ricerche, contribuiscono al tempo di esecuzione. Eseguire la memorizzazione nella cache per ridurre al minimo il tempo di elaborazione e la latenza. Memorizzare nella cache i risultati delle query per evitare round trip ripetuti al database o al back-end e ridurre il tempo di elaborazione per le richieste successive.

    Per ulteriori informazioni sull'uso della cache locale e distribuita nel contesto del carico di lavoro, vedere caching.

  • Esaminare gli antipattern delle prestazioni: per assicurarsi che l'applicazione Web sia performante e scalabile in base ai requisiti aziendali, evitare i tipici antipattern. Ecco alcuni antimodelli che App Service corregge.

    Antimodello Descrizione
    Front End Occupato Le attività a elevato utilizzo di risorse possono aumentare i tempi di risposta per le richieste degli utenti e causare una latenza elevata.
    Spostare i processi che utilizzano risorse significative in un back-end separato. Usare un broker di messaggi per accodare attività ad alto consumo di risorse che il sistema di backend rileva per elaborare in modo asincrono.
    Nessuna memorizzazione nella cache Gestire le richieste da una cache intermedia davanti al database back-end per ridurre la latenza.
    Vicino Rumoroso I sistemi multi-tenant condividono le risorse tra i tenant. L'attività di un tenant può avere un effetto negativo sull'uso del sistema da parte di un altro tenant. App Service Environment fornisce un ambiente completamente isolato e dedicato per eseguire le app di App Service.

Consigli

Raccomandazione Beneficio
(Servizio App) Abilitare l'impostazione Always On quando le applicazioni condividono un singolo piano di Servizio App. Le app del servizio app scaricano automaticamente quando sono inattive per salvare le risorse. La richiesta successiva attiva un avvio a freddo, che può causare timeout delle richieste. L'applicazione non viene mai scaricata con Always On abilitato.
(App Web) prendere in considerazione l'uso di http/2 per le applicazioni per migliorare l'efficienza del protocollo. Scegliere HTTP/2 su HTTP/1.1 perché http/2 esegue completamente connessioni multiplex, riutilizza le connessioni per ridurre il sovraccarico e comprime le intestazioni per ridurre al minimo il trasferimento dei dati.

Compromessi

Potrebbe essere necessario fare compromessi di progettazione se si usano gli approcci negli elenchi di controllo dei pilastri. Ecco alcuni esempi di vantaggi e svantaggi.

densità e isolamento

  • densità più elevata: ospitare più app all'interno dello stesso piano di App Service per ridurre al minimo le risorse. Tutte le app condividono risorse come CPU e memoria, che possono risparmiare denaro e ridurre la complessità operativa. Questo approccio ottimizza anche l'utilizzo delle risorse. Le app possono usare risorse inattive da un'altra app se i modelli di carico cambiano nel tempo.

    Considerare anche gli svantaggi, ad esempio la contesa delle risorse. Ad esempio, i picchi di utilizzo o instabilità di un'app possono influire sulle prestazioni di altre app. Gli eventi imprevisti in un'app possono anche permeare ad altre app all'interno dell'ambiente condiviso, che possono influire sulla sicurezza. Per le applicazioni critiche che richiedono disponibilità elevata e prestazioni, ambienti isolati come ambiente del servizio app V3 (ASE) forniscono risorse dedicate ma a costi più elevati. Prendere in considerazione l'uso di ambienti condivisi per carichi di lavoro non critici e ambienti isolati per applicazioni cruciali.

  • isolamento più elevato: l'isolamento consente di evitare interferenze. Questa strategia si applica alla sicurezza, alle prestazioni e anche alla separazione degli ambienti di sviluppo, test e produzione.

    L'ambiente del servizio app offre un migliore controllo sulla sicurezza e sulla protezione dei dati perché ogni app può avere impostazioni di sicurezza proprie. L'ambiente può contenere violazioni perché l'isolamento limita il raggio dell'esplosione. La contesa delle risorse è ridotta al minimo dal punto di vista delle prestazioni. L'isolamento consente una scalabilità indipendente in base a una specifica richiesta e alla pianificazione della capacità individuale.

    Come svantaggio, questo approccio è più costoso e richiede rigore operativo.

strategia di scalabilità affidabile

Una strategia di scalabilità ben definita garantisce che l'applicazione possa gestire vari carichi senza compromettere le prestazioni. Tuttavia, ci sono compromessi sui costi. Le operazioni di ridimensionamento richiedono tempo. Quando vengono allocate nuove risorse, l'applicazione deve essere inizializzata correttamente prima di poter elaborare in modo efficace le richieste. È possibile effettuare il sovrapprovvigionamento delle risorse (istanze pre-riscaldamento) per fornire un margine di sicurezza. Senza tale capacità aggiuntiva, durante la fase di inizializzazione, potrebbe verificarsi un ritardo nella gestione delle richieste, che influisce sull'esperienza utente. Le operazioni di scalabilità automatica possono essere attivate in anticipo per abilitare l'inizializzazione corretta delle risorse da parte dei clienti che usano le risorse.

Come svantaggio, le risorse sovradimensionate costano di più. Siete addebitati al secondo per ogni istanza, incluse le istanze pre-riscaldate. I livelli più elevati includono istanze preriscaldate. Determinare se le funzionalità con livelli più costosi valgono l'investimento.

Costruzione di ridondanza

La ridondanza offre resilienza, ma comporta anche costi. Gli obiettivi del livello di servizio per il carico di lavoro determinano soglie di prestazioni accettabili. Diventa uno spreco se la ridondanza supera i requisiti degli SLO. Valutare se la ridondanza in eccesso migliora gli obiettivi del livello di servizio o aggiunge complessità non necessaria.

Considerare anche gli svantaggi. Ad esempio, la ridondanza in più aree offre disponibilità elevata, ma aggiunge complessità e costi a causa della sincronizzazione dei dati, dei meccanismi di failover e della comunicazione tra aree. Determinare se la ridondanza della zona può soddisfare i vostri obiettivi di livello di servizio.

Criteri di Azure

Azure offre un set completo di criteri predefiniti correlati al servizio app e alle relative dipendenze. Un set di criteri di Azure può controllare alcune delle raccomandazioni precedenti. Ad esempio, è possibile verificare se:

  • Sono presenti controlli di rete appropriati. Ad esempio, è possibile incorporare la segmentazione di rete inserendo il servizio app nella rete virtuale di Azure tramite l'inserimento della rete virtuale per avere un maggiore controllo sulla configurazione di rete. L'applicazione non dispone di endpoint pubblici e si connette ai servizi di Azure tramite endpoint privati.

  • Sono presenti controlli di identità. Ad esempio, l'applicazione usa le identità gestite per autenticarsi con altre risorse. L'autenticazione predefinita del servizio app (Easy Auth) verifica le richieste in ingresso.

  • Le funzionalità come il debug remoto e l'autenticazione di base sono disabilitate per ridurre la superficie di attacco.

Per una governance completa, esamina le definizioni integrate dei criteri di Azure e altri criteri che potrebbero influire sulla sicurezza del livello di calcolo.

Raccomandazioni di Azure Advisor

azure Advisor è un consulente cloud personalizzato che consente di seguire le procedure consigliate per ottimizzare le distribuzioni di Azure. Ecco alcuni consigli che consentono di migliorare l'affidabilità, la sicurezza, l'efficacia dei costi, le prestazioni e l'eccellenza operativa delle istanze dell'applicazione Web.

Passaggi successivi

Considerare gli articoli seguenti come risorse che illustrano le raccomandazioni evidenziate in questo articolo.

  • Usare queste architetture di riferimento come esempi di come applicare queste raccomandazioni a un carico di lavoro.

    • Se non hai mai distribuito un'applicazione web, consulta applicazione web di base.

    • Per un'architettura di base come punto di partenza per una distribuzione in ambiente di produzione, vedere l'applicazione web altamente disponibile e con ridondanza della zona Baseline.

  • Usare la documentazione del prodotto seguente per creare le proprie competenze di implementazione: