Condividi tramite


Concetti chiave dell'architettura dei microservizi .NET

Suggerimento

Questo contenuto è un estratto dell'eBook, Architettura di microservizi .NET per applicazioni .NET containerizzati, disponibile in documentazione .NET o come PDF scaricabile gratuitamente leggibile offline.

Architettura di Microservizi .NET per Applicazioni .NET Containerizzate miniatura della copertina dell'eBook.

Come riepilogo e considerazioni chiave, di seguito sono riportate le conclusioni più importanti di questa guida.

Vantaggi dell'uso dei contenitori. Le soluzioni basate su contenitori offrono importanti risparmi sui costi perché consentono di ridurre i problemi di distribuzione causati da dipendenze non riuscite negli ambienti di produzione. I contenitori migliorano significativamente DevOps e le operazioni di produzione.

I contenitori saranno onnipresenti. I contenitori basati su Docker stanno diventando lo standard de facto nel settore, supportato dai principali fornitori negli ecosistemi Windows e Linux, ad esempio Microsoft, Amazon AWS, Google e IBM. Docker sarà probabilmente presto onnipresente nei data center cloud e locali.

Contenitori come unità di distribuzione. Un contenitore Docker sta diventando l'unità standard di distribuzione per qualsiasi applicazione o servizio basato su server.

Microservizi. L'architettura dei microservizi sta diventando l'approccio preferito per applicazioni distribuite e complesse cruciali basate su molti sottosistemi indipendenti sotto forma di servizi autonomi. In un'architettura basata su microservizi, l'applicazione viene compilata come una raccolta di servizi sviluppati, testati, sottoposti a controllo delle versioni, distribuiti e ridimensionati in modo indipendente. Ogni servizio può includere qualsiasi database autonomo correlato.

Progettazione basata su dominio e SOA. I modelli di architettura dei microservizi derivano dall'architettura orientata ai servizi (SOA) e dalla progettazione basata su dominio (DDD). Quando si progettano e sviluppano microservizi per ambienti con esigenze e regole aziendali in continua evoluzione, è importante considerare approcci e modelli DDD.

Problemi relativi ai microservizi. I microservizi offrono molte potenti funzionalità, ad esempio distribuzione indipendente, limiti avanzati del sottosistema e diversità tecnologica. Tuttavia, generano anche molte nuove sfide correlate allo sviluppo di applicazioni distribuite, ad esempio modelli di dati frammentati e indipendenti, comunicazioni resilienti tra microservizi, coerenza finale e complessità operativa risultanti dall'aggregazione delle informazioni di registrazione e monitoraggio da più microservizi. Questi aspetti introducono un livello di complessità molto più elevato rispetto a un'applicazione monolitica tradizionale. Di conseguenza, solo scenari specifici sono adatti per le applicazioni basate su microservizi. Queste includono applicazioni di grandi dimensioni e complesse con più sottosistemi in evoluzione. In questi casi, vale la pena investire in un'architettura software più complessa, perché offrirà maggiore agilità a lungo termine e manutenzione delle applicazioni.

Contenitori per qualsiasi applicazione. I contenitori sono utili per i microservizi, ma possono essere utili anche per le applicazioni monolitiche basate su .NET Framework tradizionale, quando si usano contenitori Windows. I vantaggi dell'uso di Docker, ad esempio la risoluzione di molti problemi di distribuzione in produzione e la fornitura di ambienti di sviluppo e test all'avanguardia, si applicano a molti tipi diversi di applicazioni.

CLI contro IDE. Con gli strumenti Microsoft è possibile sviluppare applicazioni .NET in contenitori usando l'approccio preferito. È possibile sviluppare con un'interfaccia della riga di comando e un ambiente basato su editor usando l'interfaccia della riga di comando di Docker e Visual Studio Code. In alternativa, è possibile usare un approccio incentrato sull'IDE con Visual Studio e le relative funzionalità univoche per Docker, ad esempio il debug multi-contenitore.

Applicazioni cloud resilienti. Nei sistemi basati sul cloud e nei sistemi distribuiti in generale, esiste sempre il rischio di errori parziali. Poiché i client e i servizi sono processi separati (contenitori), un servizio potrebbe non essere in grado di rispondere in modo tempestivo alla richiesta di un client. Ad esempio, un servizio potrebbe essere inattivo a causa di un errore parziale o per la manutenzione; il servizio potrebbe essere sovraccarico e rispondere lentamente alle richieste; o potrebbe non essere accessibile per un breve periodo di tempo a causa di problemi di rete. Pertanto, un'applicazione basata sul cloud deve accettare gli errori e avere una strategia per rispondervi. Queste strategie possono includere criteri di ripetizione dei tentativi (invio di nuovo messaggi o ripetizione di richieste) e implementazione di modelli di interruttore per evitare un carico esponenziale di richieste ripetute. Fondamentalmente, le applicazioni basate sul cloud devono avere meccanismi resilienti, basati sull'infrastruttura cloud o personalizzati, come quelli di alto livello forniti da agenti di orchestrazione o bus di servizio.

Sicurezza. Il mondo moderno dei contenitori e dei microservizi può esporre nuove vulnerabilità. Esistono diversi modi per implementare la sicurezza di base delle applicazioni, in base all'autenticazione e all'autorizzazione. Tuttavia, la sicurezza dei contenitori deve considerare componenti chiave aggiuntivi che comportano applicazioni intrinsecamente più sicure. Un elemento fondamentale della creazione di app più sicure è avere un modo sicuro per comunicare con altre app e sistemi, un elemento che spesso richiede credenziali, token, password e simili, comunemente definiti segreti dell'applicazione. Qualsiasi soluzione sicura deve seguire le migliori pratiche di sicurezza, come la crittografia dei segreti durante il transito e a riposo, e la prevenzione della fuoriuscita di segreti quando vengono consumati dall'applicazione finale. Questi segreti devono essere archiviati e mantenuti al sicuro, come quando si usa Azure Key Vault.

Orchestratori. Gli agenti di orchestrazione basati su contenitori, ad esempio il servizio Azure Kubernetes e Azure Service Fabric, fanno parte di qualsiasi microservizio significativo e applicazione basata su contenitori. Queste applicazioni sono dotate di complessità elevata, esigenze di scalabilità e passano attraverso un'evoluzione costante. Questa guida ha introdotto agenti di orchestrazione e il relativo ruolo nelle soluzioni basate su microservizi e basate su contenitori. Se le esigenze dell'applicazione si stanno spostando verso app in contenitori complesse, è utile cercare risorse aggiuntive per altre informazioni sugli agenti di orchestrazione.