Condividi tramite


Raccomandazioni per l'hosting di Azure per le app Web di base ASP.NET

Suggerimento

Questo contenuto è un estratto dell'eBook, Architect Modern Web Applications with ASP.NET Core and Azure, disponibile in .NET Docs o come PDF scaricabile gratuito che può essere letto offline.

Progettare applicazioni Web moderne con ASP.NET Core e anteprima della copertina di Azure eBook.

"I leader line-of-business ovunque stanno aggirando i reparti IT per ottenere applicazioni dal cloud (detto anche SaaS) e pagarle come un abbonamento a una rivista." E quando il servizio non è più necessario, possono annullare l'abbonamento senza attrezzature inutilizzate in giro.
- Daryl Plummer, analista di Gartner

Indipendentemente dalle esigenze e dall'architettura dell'applicazione, Microsoft Azure può supportarlo. Le esigenze di hosting possono essere semplici come un sito Web statico o un'applicazione sofisticata costituita da decine di servizi. Per ASP.NET applicazioni Web monolitiche Core e servizi di supporto, sono consigliate diverse configurazioni note. Le raccomandazioni di questo articolo sono raggruppate in base al tipo di risorsa da ospitare, ad esempio applicazioni complete, singoli processi o dati.

Applicazioni Web

Le applicazioni Web possono essere ospitate con:

  • Applicazioni Web del servizio App

  • Contenitori (diverse opzioni)

  • Macchine virtuali

Di questi, "App Service Web Apps" è l'approccio consigliato per la maggior parte degli scenari, inclusi i semplici applicativi basati su contenitori. Per le architetture di microservizi, prendere in considerazione un approccio basato su contenitori. Se è necessario un maggiore controllo sui computer che eseguono l'applicazione, prendere in considerazione Macchine virtuali di Azure.

Applicazioni Web del servizio App

App Service Web Apps offre una piattaforma completamente gestita ottimizzata per l'hosting di applicazioni web. Si tratta di un'offerta PaaS (Platform as a Service) che consente di concentrarsi sulla logica di business, mentre Azure si occupa dell'infrastruttura necessaria per eseguire e ridimensionare l'app. Alcune funzionalità principali di App Service Web Apps:

  • Ottimizzazione di DevOps (integrazione e recapito continuo, più ambienti, test A/B, supporto di scripting).

  • Scalabilità globale e disponibilità elevata.

  • Connessioni alle piattaforme SaaS e ai dati locali.

  • Sicurezza e conformità.

  • Integrazione di Visual Studio.

Servizio app di Azure è la scelta migliore per la maggior parte delle app Web. La distribuzione e la gestione sono integrate nella piattaforma, i siti possono essere ridimensionati rapidamente per gestire carichi di traffico elevati e il bilanciamento del carico predefinito e gestione traffico offrono disponibilità elevata. È possibile spostare facilmente i siti esistenti in Servizio app di Azure con uno strumento di migrazione online. È possibile usare un'app open source dalla raccolta di applicazioni Web oppure creare un nuovo sito usando il framework e gli strumenti di propria scelta. La funzionalità WebJobs semplifica l'aggiunta dell'elaborazione dei processi in background all'app Web di App Service. Se si dispone di un'applicazione ASP.NET esistente ospitata in locale usando un database locale, è disponibile un percorso chiaro per la migrazione. È possibile utilizzare App Service Web App con un database SQL di Azure (o l'accesso sicuro al server di database locale, se preferisci).

Strategia di migrazione consigliata per le app .NET locali nel servizio app di Azure

Nella maggior parte dei casi, il passaggio da un'app ASP.NET ospitata in locale a un'app Web del servizio app è un processo semplice. Non è necessario apportare modifiche minime o nulle all'app stessa e può iniziare rapidamente a sfruttare le numerose funzionalità offerte dalle app Web del servizio app di Azure.

Oltre alle app non ottimizzate per il cloud, le app Web del servizio app di Azure sono una soluzione eccellente per molte semplici applicazioni monolitiche (non distribuite), ad esempio molte app core ASP.NET. In questo approccio, l'architettura è semplice e semplice da comprendere e gestire:

Architettura di base di Azure

Un numero ridotto di risorse in un singolo gruppo di risorse è in genere sufficiente per gestire tale app. Le app in genere distribuite come singola unità, anziché quelle costituite da molti processi separati, sono candidati validi per questo approccio architetturale di base. Anche se architettonicamente semplice, questo approccio consente comunque all'app ospitata di scalare verso l'alto (più risorse per nodo) e verso l'esterno (più nodi ospitati) per soddisfare qualsiasi aumento della domanda. Con la scalabilità automatica, l'app può essere configurata per regolare automaticamente il numero di nodi che ospitano l'app in base alla domanda e al carico medio tra i nodi.

App Web del servizio app per contenitori

Oltre al supporto per l'hosting diretto di app Web, è possibile usare app Web del servizio app per contenitori per eseguire applicazioni in contenitori in Windows e Linux. Usando questo servizio, è possibile distribuire ed eseguire facilmente applicazioni in contenitori che possono essere ridimensionate con l'azienda. Le app hanno tutte le funzionalità delle App Service Web Apps elencate in precedenza. App Web per contenitori supporta inoltre CI/CD semplificato con Docker Hub, Azure Container Registry e GitHub. È possibile usare Azure DevOps per definire pipeline di compilazione e distribuzione che pubblicano le modifiche in un registro. Queste modifiche possono quindi essere testate in un ambiente di staging e distribuite automaticamente nell'ambiente di produzione usando gli slot di distribuzione, consentendo aggiornamenti senza tempi di inattività. Il rollback alle versioni precedenti può essere eseguito altrettanto facilmente.

Esistono alcuni scenari in cui le App Web per Contenitori hanno maggiore senso. Se si dispone di app esistenti che è possibile inserire in contenitori, sia in contenitori Windows che Linux, è possibile ospitarli facilmente usando questo set di strumenti. È sufficiente pubblicare il contenitore e quindi configurare App Web per contenitori per eseguire il pull della versione più recente di tale immagine dal registro preferito. Si tratta di un approccio "lift-and-shift" alla migrazione da modelli di hosting di app classiche a un modello ottimizzato per il cloud.

Eseguire la migrazione di un'applicazione .NET containerizzata locale su Azure Web Apps per contenitori

Questo approccio funziona bene anche se il team di sviluppo è in grado di passare a un processo di sviluppo basato su contenitori. Il "ciclo interno" dello sviluppo di app con contenitori include la compilazione dell'app con contenitori. Le modifiche apportate al codice e alla configurazione del contenitore vengono inoltrate al controllo del codice sorgente e una compilazione automatizzata è responsabile della pubblicazione di nuove immagini del contenitore in un registro come l'hub Docker o Registro Azure Container. Queste immagini vengono quindi usate come base per lo sviluppo aggiuntivo, nonché per le distribuzioni nell'ambiente di produzione, come illustrato nel diagramma seguente:

Flusso di lavoro completo del ciclo di vita Docker DevOps

Lo sviluppo con contenitori offre molti vantaggi, soprattutto quando i contenitori vengono usati nell'ambiente di produzione. La stessa configurazione del contenitore viene usata per ospitare l'app in ogni ambiente in cui viene eseguita, dal computer di sviluppo locale per compilare e testare i sistemi all'ambiente di produzione. Questo approccio riduce notevolmente la probabilità di difetti derivanti dalle differenze nella configurazione del computer o nelle versioni software. Gli sviluppatori possono anche usare qualsiasi strumento con cui sono più produttivi, incluso il sistema operativo, poiché i contenitori possono essere eseguiti in qualsiasi sistema operativo. In alcuni casi, le applicazioni distribuite che coinvolgono molti contenitori possono essere molto a elevato utilizzo di risorse per l'esecuzione in un singolo computer di sviluppo. In questo scenario può essere utile eseguire l'aggiornamento all'uso di Kubernetes e Azure Dev Spaces, illustrati nella sezione successiva.

Poiché parti di applicazioni di grandi dimensioni vengono suddivise in microservizi più piccoli e indipendenti, è possibile usare modelli di progettazione aggiuntivi per migliorare il comportamento delle app. Invece di lavorare direttamente con singoli servizi, un gateway API può semplificare l'accesso e separare il client dal back-end. La presenza di back-end di servizi separati per front-end diversi consente anche ai servizi di evolversi insieme ai propri consumer. È possibile accedere ai servizi comuni tramite un contenitore sidecar separato, che potrebbe includere librerie di connettività client comuni usando il modello ambassador .

Architettura di esempio di microservizi con diversi modelli di progettazione comuni annotati.

Altre informazioni sui modelli di progettazione da considerare per la creazione di sistemi basati su microservizi.

Servizio Azure Kubernetes

Il servizio Azure Kubernetes gestisce l'ambiente Kubernetes ospitato, semplificando la distribuzione e la gestione di applicazioni in contenitori senza competenze nell'orchestrazione dei contenitori. Elimina inoltre l'onere delle operazioni e della manutenzione in corso effettuando il provisioning, l'aggiornamento e il ridimensionamento delle risorse su richiesta, senza portare offline le applicazioni.

Il servizio Azure Kubernetes riduce la complessità e il sovraccarico operativo della gestione di un cluster Kubernetes delegando gran parte di tale responsabilità ad Azure. Come servizio Kubernetes ospitato, Azure gestisce automaticamente attività critiche come il monitoraggio della salute e la manutenzione. Inoltre, si paga solo per i nodi agente all'interno dei cluster, non per i master. Come servizio Kubernetes gestito, AKS offre:

  • Aggiornamenti automatici delle versioni di Kubernetes e applicazione di patch.
  • Scalabilità semplificata dei cluster.
  • Piano di controllo ospitato con correzione automatica (master).
  • Risparmio sui costi: pagare solo per i nodi operativi del pool di agenti.

Con Azure che gestisce la gestione dei nodi nel cluster del servizio Azure Kubernetes, non è più necessario eseguire molte attività manualmente, ad esempio gli aggiornamenti del cluster. Poiché Azure gestisce queste attività di manutenzione critiche per te, AKS non fornisce accesso diretto (ad esempio tramite SSH) al cluster.

I team che sfruttano Azure Kubernetes Service (AKS) possono anche beneficiare di Azure Dev Spaces. Azure Dev Spaces consente ai team di concentrarsi sullo sviluppo e sull'iterazione rapida dell'applicazione di microservizi consentendo ai team di lavorare direttamente con l'intera architettura o l'applicazione di microservizi in esecuzione nel servizio Azure Kubernetes. Azure Dev Spaces offre anche un modo per aggiornare in modo indipendente parti dell'architettura dei microservizi in isolamento senza influire sul resto del cluster del servizio Azure Kubernetes o di altri sviluppatori.

Esempio di flusso di lavoro di Azure Dev Spaces

Azure Dev Spaces:

  • Ridurre al minimo i requisiti di tempo e risorse per la configurazione del computer locale
  • Consentire ai team di eseguire l'iterazione più rapidamente
  • Ridurre il numero di ambienti di integrazione richiesti da un team
  • Rimuovere la necessità di simulare determinati servizi in un sistema distribuito durante lo sviluppo/test

Altre informazioni su Azure Dev Spaces

Macchine virtuali di Azure

Se si dispone di un'applicazione esistente che richiederebbe modifiche sostanziali per l'esecuzione nel servizio app, è possibile scegliere Macchine virtuali per semplificare la migrazione al cloud. Tuttavia, la configurazione corretta, la protezione e la gestione delle macchine virtuali richiedono molto più tempo e competenze IT rispetto al servizio app di Azure. Se si stanno valutando le macchine virtuali di Azure, assicurarsi di tenere conto delle attività di manutenzione in corso necessarie per applicare patch, aggiornare e gestire l'ambiente della macchina virtuale. Azure Virtual Machines è infrastruttura come servizio (IaaS), mentre App Service è PaaS. È anche consigliabile valutare se la distribuzione dell'app come contenitore di Windows in app Web per contenitori potrebbe essere un'opzione valida per lo scenario in uso.

Processi logici

I singoli processi logici che possono essere separati dal resto dell'applicazione possono essere distribuiti in modo indipendente in Funzioni di Azure in modo "serverless". Funzioni di Azure consente di scrivere semplicemente il codice necessario per un determinato problema, senza preoccuparsi dell'applicazione o dell'infrastruttura per eseguirla. È possibile scegliere tra diversi linguaggi di programmazione, tra cui C#, F#, Node.js, Python e PHP, consentendo di scegliere il linguaggio più produttivo per l'attività. Analogamente alla maggior parte delle soluzioni basate sul cloud, si paga solo per il periodo di tempo utilizzato ed è possibile affidarsi a Azure Functions per adattare la scala secondo le necessità.

Dati

Azure offre un'ampia gamma di opzioni di archiviazione dei dati, in modo che l'applicazione possa usare il provider di dati appropriato per i dati in questione.

Per i dati transazionali relazionali, i database SQL di Azure sono l'opzione migliore. Per dati con prestazioni elevate in lettura, una cache Redis supportata da un database SQL di Azure è una buona soluzione.

I dati JSON non strutturati possono essere archiviati in diversi modi, dalle colonne di database SQL ai BLOB o alle tabelle in Archiviazione di Azure, ad Azure Cosmos DB. Di questi, Azure Cosmos DB offre la migliore funzionalità di query ed è l'opzione consigliata per un numero elevato di documenti basati su JSON che devono supportare l'esecuzione di query.

I dati temporanei basati su comandi o eventi usati per orchestrare il comportamento dell'applicazione possono usare il bus di servizio di Azure o le code di archiviazione di Azure. Il bus di servizio di Azure offre maggiore flessibilità ed è il servizio consigliato per la messaggistica non semplice all'interno e tra le applicazioni.

Suggerimenti per l'architettura

I requisiti dell'applicazione devono dettare l'architettura. Sono disponibili molti servizi di Azure diversi. Scegliere quello giusto è una decisione importante. Microsoft offre una raccolta di architetture di riferimento che consentono di identificare le architetture tipiche ottimizzate per scenari comuni. È possibile trovare un'architettura di riferimento che è strettamente associata ai requisiti dell'applicazione o almeno offre un punto di partenza.

La figura 11-1 mostra un'architettura di riferimento di esempio. Questo diagramma descrive un approccio di architettura consigliato per un sito Web del sistema di gestione dei contenuti Sitecore ottimizzato per il marketing.

Figura 11-1

Figura 11-1. Architettura di riferimento del sito Web di marketing di Sitecore.

Riferimenti - Raccomandazioni per l'hosting di Azure