Che cos'è .NET Aspire?
Gli ecosistemi cloud come Microsoft Azure e Amazon Web Services (AWS) sono profondamente radicati nel settore IT e nelle soluzioni di hosting più diffuse per applicazioni Web e servizi Web. È probabile che un sistema di hosting cloud sia la scelta predefinita per le applicazioni, quindi è necessario assicurarsi che le applicazioni create siano progettate per sfruttare al massimo i vantaggi.
Un'applicazione nativa del cloud è un'applicazione specificamente progettata per l'esecuzione nel cloud. Le applicazioni presentano spesso determinati modelli architettonici in modo da ottimizzare le prestazioni, la scalabilità e l'affidabilità.
Si supponga di lavorare per un'azienda di abbigliamento e attrezzature all'aperto. Il consiglio di amministrazione chiede di sviluppare una nuova applicazione Web eShop per il sito principale dell'azienda rivolto ai clienti. Il team ha familiarità con il modello di microservizi e si vuole sapere se l'uso di .NET Aspire renderà il progetto più semplice.
In questa unità verranno fornite altre informazioni sulle architetture native del cloud e verranno illustrate le sfide coinvolte nella compilazione. Verrà anche illustrato come .NET Aspirare può affrontare queste sfide.
Che cos'è un'applicazione nativa del cloud?
Un'applicazione nativa del cloud è un'applicazione progettata per usare in modo ottimale le infrastrutture cloud e offrire lee migliori prestazioni, disponibilità e resilienza. I pilastri delle architetture software native del cloud sono sei:
- Infrastruttura cloud. Le applicazioni native del cloud vengono distribuite in soluzioni di hosting cloud e non in server farm locali.
- Microservizi. Le applicazioni native del cloud vengono implementate come un set di microservizi, ognuno dei quali implementa una piccola parte delle funzionalità aziendali.
- Contenitori. I microservizi e altre parti dell'applicazione vengono sviluppati e distribuiti in contenitori per garantire un ambiente di esecuzione coerente.
- Servizi di backup. Le risorse ausiliarie, ad esempio i database e i servizi di caching, possono essere usate per fornire funzionalità comuni ai microservizi.
- Design moderno. Le applicazioni native del cloud sono conformi alla metodologia di applicazione Twelve-Factor, che include principi quali integrazione continua/distribuzione continua (CI/CD), disponibilità, associazione di porte e così via.
- Automazione. Le applicazioni native del cloud usano Infrastruttura come codice (IaC) per automatizzare il provisioning di piattaforme e la distribuzione.
Per garantire l'agilità, un'applicazione nativa del cloud è composta da un set di microservizi. Ogni microservizio:
- Implementa una parte della funzionalità completa.
- Viene eseguito nel proprio processo ed è isolato dagli altri, spesso in un contenitore dedicato.
- Viene creato da un team separato.
- Comunica con gli altri, ma è ad accoppiamento libero.
Ogni team sceglie i linguaggi e le tecnologie che preferisce implementare il proprio microservizio. Ogni microservizio viene distribuito e ridimensionato in modo indipendente dagli altri.
Il diagramma seguente illustra le differenze tra un'applicazione Web monolitica tradizionale e un'applicazione Web composta da microservizi.
Le app native del cloud possono offrire molti vantaggi per l'azienda. Ad esempio:
- Ospitando l'app nel cloud, non è necessario creare e gestire l'infrastruttura da soli, ad esempio i server di hosting, i sistemi operativi e i servizi di supporto.
- Poiché ogni microservizio viene sviluppato in modo indipendente, è possibile distribuire continuamente nuove funzionalità in esse senza dover attendere altri team o attività cardine della versione principale.
- Poiché ogni microservizio viene eseguito in uno o più contenitori, si sa che l'ambiente sarà lo stesso in tutti gli ambienti di test, processo di gestione temporanea e produzione.
- È possibile usare un sistema di orchestrazione dei contenitori, ad esempio Kubernetes, per distribuire rapidamente istanze aggiuntive in risposta a richieste aggiuntive.
Sfide presentate dalle applicazioni native del cloud
Un'applicazione nativa del cloud composta da più microservizi e con molte funzionalità può diventare complessa e presentare sfide che non si presentano con app monolitiche. Ad esempio:
- Definizione dell'app. A meno che non sia documentato con cura, può essere difficile per gli sviluppatori capire quali componenti costituiscono l'app nativa del cloud completa.
- Comunicazione. Ogni microservizio potrebbe dover scambiare messaggi o dati con altri microservizi per formulare una risposta a una richiesta dell'utente. Anche se è necessario abilitare tale comunicazione, bisogna farlo in modo da non accoppiare strettamente un microservizio all'altro. È anche necessario che la comunicazione rimanga affidabile in momenti di domanda elevata o durante gli errori del servizio.
- Resilienza. Nessun servizio di hosting può essere disponibile al 100%. È necessario assicurarsi che, in rari casi in cui un microservizio non sia disponibile, l'app gestisca gli errori in modo affidabile e mantenga le richieste fino al ripristino del servizio.
- Dati distribuiti. Ogni microservizio implementa il proprio livello di archiviazione dati e potrebbe non usare lo stesso server di database degli altri. È necessario considerare come eseguire query per i dati da più microservizi e come implementare le transazioni.
- Segreti. Se l'app gestisce qualsiasi tipo di dati sensibili, ogni microservizio deve autenticare ogni richiesta ricevuta prima di restituire una risposta. Spesso vengono usati segreti come chiavi di crittografia asimmetrica e simmetrica per proteggere i dati e identificare positivamente gli utenti e i microservizi chiamanti. È necessario considerare il modo in cui questi segreti vengono archiviati e scambiati nell'app nativa del cloud.
- Onboarding per sviluppatori. I nuovi sviluppatori devono essere in grado di comprendere l'architettura dell'app e come usarla rapidamente. È necessario assicurarsi che i nuovi sviluppatori possano raggiungere la velocità necessaria senza una grande quantità di conoscenze tra domini o configurazione locale.
Recentemente, la progettazione di applicazioni native del cloud ha guadagnato popolarità, ma sfide come quelle in questa sezione scoraggiano alcuni team dall'adottare questo modello. .NET, ad esempio, include tutte le funzionalità necessarie per risolvere questi problemi, ma le soluzioni potrebbero richiedere investimenti significativi in training e codice personalizzato.
Che cos'è .NET Aspire?
.NET Aspire è un nuovo stack pronto per il cloud progettato per .NET per consentire agli sviluppatori di creare applicazioni native del cloud in modo rapido e semplice. Verranno ora esaminate le funzionalità di .NET Aspirare che affrontano le sfide affrontate.
Orchestrazione
I microservizi e la loro natura ad accoppiamento libero aumentano la flessibilità dell'app distribuita, ma possono rendere più difficile la configurazione. L'elenco dei servizi che compongono l'app può diventare poco chiaro e l'endpoint in cui è disponibile un microservizio può essere difficile da identificare. .NET Aspire offre funzionalità di orchestrazione in modo che:
- È possibile specificare chiaramente per tutti i team i progetti .NET, i contenitori, gli eseguibili e le risorse cloud che compongono l'applicazione.
- I microservizi possono individuare automaticamente gli endpoint per tutti i componenti dell'applicazione. .NET Aspire esegue l'individuazione del servizio gestendo le stringhe di connessione e inserendole in microservizi dove necessario.
Quando si crea una soluzione .NET Aspire, verrà visualizzato un nuovo progetto nella soluzione denominata <SolutionName>. AppHost. Questo progetto implementa l'orchestrazione per l'app ed è necessario assicurarsi che sia il progetto di avvio per la soluzione.
Componenti
I microservizi hanno in genere requisiti funzionali per servizi di supporto complessi che sono alla base delle loro funzionalità. Ad esempio:
- Archiviazione dei dati. Per rendere persistenti i dati a supporto di cataloghi prodotti, carrello acquisti, archivi di identità e altre funzionalità, i microservizi devono archiviare i dati in archivi strutturati o semi-strutturati.
- Memorizzazione nella cache. Per ottimizzare le prestazioni, i microservizi possono archiviare risposte parziali o complete in una cache in modo che le richieste simili successive possano essere soddisfatte più rapidamente.
- Messaggistica. I microservizi ad accoppiamento libero devono comunicare tra loro e assicurarsi che questa comunicazione sia affidabile anche quando il traffico è elevato o le condizioni di rete sono difficili. Un servizio che accoda e distribuisce messaggi dai mittenti ai destinatari è un requisito comune.
In .NET Aspire è facile implementare questi servizi di backup in ogni microservizio perché lo stack include componenti .NET Aspire. Ogni componente è un pacchetto NuGet che è possibile aggiungere alla soluzione e implementa un'interfaccia standard a un servizio di backup. Questa interfaccia standard garantisce che il microservizio si connetta ai servizi di backup in modo coerente e senza problemi.
I componenti predefiniti di .NET Aspire includono:
- Componenti di archiviazione dei dati, ad esempio quelli per PostgreSQL, database SQL, Azure Cosmos DB e MongoDB.
- Componenti di memorizzazione nella cache come il componente per Redis.
- Componenti di messaggistica come quelli per RabbitMQ e il bus di servizio di Azure.
Importante
.NET Aspire include molti componenti che funzionano con i servizi di Azure, ad esempio Archiviazione di Azure e il bus di servizio di Azure, ma Azure non è necessario per i progetti .NET Aspire e funzionano altrettanto bene con i servizi di backup esterni ad Azure, ad esempio RabbitMQ e MongoDB.
Strumenti
.NET Aspire aggiunge anche agli strumenti disponibili per gli sviluppatori in Visual Studio. Ad esempio:
- I nuovi modelli di progetto consentono di creare soluzioni .NET Aspire con pochi passaggi in una procedura guidata.
- Il dashboard .NET Aspire è un'interfaccia Web visualizzata ogni volta che si avvia la soluzione da Visual Studio. Questo dashboard visualizza tutti i microservizi e i servizi di backup dell'app ed è possibile chiamarli per i test. Mostra anche gli strumenti di monitoraggio e prestazioni.
- Vengono visualizzate altre voci di menu, che è possibile usare per aggiungere un componente .NET Aspire, registrare un progetto per il supporto dell'agente di orchestrazione .NET Aspire o completare altre attività.
Nota
Altre informazioni sugli strumenti .NET Aspire verranno fornite più avanti in questo modulo.