Quando scegliere .NET per i contenitori Docker

Suggerimento

Questo contenuto è un estratto dell'eBook "Microservizi .NET: Architettura per le applicazioni .NET incluse in contenitori", disponibile in .NET Docs o come PDF scaricabile gratuitamente e da poter leggere offline.

.NET Microservices Architecture for Containerized .NET Applications eBook cover thumbnail.

La modularità e la natura leggera di .NET 8 lo rendono la scelta ideale per i contenitori. Quando si distribuisce e si avvia un contenitore, la sua immagine risulta notevolmente più piccola con .NET 8 rispetto a .NET Framework. Al contrario, per usare .NET Framework per un contenitore, è necessario basare l'immagine su un'immagine di Windows Server Core che risulta molto più pesante rispetto alle immagini di Windows Nano Server o Linux usate per .NET 8.

Inoltre, .NET 8 è multipiattaforma e consente quindi di distribuire app server con immagini del contenitore Linux o Windows. Tuttavia, se si usa .NET Framework tradizionale, è solo possibile distribuire immagini basate su Windows Server Core.

Di seguito è fornita una spiegazione dettagliata sui motivi per cui è opportuno scegliere .NET 8.

Sviluppo e distribuzione per più piattaforme

Chiaramente, se l'obiettivo è creare un'applicazione (app Web o servizio) che può essere eseguita su più piattaforme supportate da Docker (Linux e Windows), la scelta corretta è .NET 8, in quanto .NET Framework supporta solo Windows.

.NET 8 supporta anche macOS come piattaforma di sviluppo. Tuttavia, quando i contenitori vengono distribuiti in un host Docker, l'host deve (attualmente) essere basato su Linux o Windows. In un ambiente di sviluppo, ad esempio, si potrebbe usare una macchina virtuale Linux in esecuzione in un Mac.

Visual Studio fornisce un ambiente di sviluppo integrato (IDE) per Windows e supporta lo sviluppo per Docker.

Visual Studio per Mac è un ambiente IDE, evoluzione di Xamarin Studio, che viene eseguito su macOS e supporta lo sviluppo di applicazioni basate su Docker. Questo strumento è la scelta più indicata per gli sviluppatori che lavorano con computer Mac e vogliono anche usare un potente IDE.

È anche possibile usare Visual Studio Code in macOS, Linux e Windows. Visual Studio Code supporta pienamente .NET 8, incluse le funzionalità IntelliSense e di debug. Poiché Visual Studio Code è un editor leggero, è possibile usarlo per sviluppare app in contenitori nel computer in combinazione con l'interfaccia della riga di comando di Docker e l'interfaccia della riga di comando di .NET. È anche possibile usare .NET 8 con la maggior parte degli editor di terze parti, come Sublime, Emacs, vi e il progetto OmniSharp open source, che fornisce anche il supporto di IntelliSense.

Oltre agli ambienti di sviluppo integrato e agli editor, è possibile usare l'interfaccia della riga di comando di .NET per tutte le piattaforme supportate.

Uso dei contenitori per i nuovi progetti (green field)

I contenitori vengono comunemente usati in combinazione con un'architettura di microservizi, sebbene possano essere impiegati anche per creare contenitori di servizi o app Web basati su qualsiasi schema architetturale. È possibile usare .NET Framework in contenitori Windows, ma le caratteristiche di modularità e leggerezza rendono .NET 8 la scelta ideale per i contenitori e le architetture di microservizi. Quando si crea e si distribuisce un contenitore, la sua immagine risulta notevolmente più piccola con .NET 8 rispetto a .NET Framework.

Creare e distribuire microservizi in contenitori

Per creare applicazioni basate su microservizi (senza contenitori) è possibile usare .NET Framework tradizionale e processi normali. In questo modo, poiché .NET Framework è già installato e condiviso tra i processi, i processi sono leggeri e si avviano velocemente. Tuttavia, se si usano i contenitori, l'immagine per .NET Framework tradizionale è basata su Windows Server Core e diventa troppo pesante per un approccio per microservizi basati su contenitori. I team, tuttavia, hanno cercato opportunità per migliorare anche l'esperienza degli utenti di .NET Framework. Di recente, le dimensioni delle immagini del contenitore di Windows Server Core sono state >ridotte del 40%.

D'altra parte, .NET 8 è il miglior candidato per un sistema orientato ai microservizi basato su contenitori, perché è leggero. Inoltre, le immagini del contenitore correlate, sia per Linux che per Windows Nano Server, sono snelle e di piccole dimensioni per garantire la leggerezza dei contenitori e aumentarne la velocità di avvio.

Un microservizio deve essere più piccolo possibile: deve essere leggero quando accelera, avere un footprint ridotto e un contesto delimitato di piccole dimensioni (vedere DDD, Domain-driven design), non deve generare un eccesso di preoccupazioni e deve poter essere avviato e arrestato velocemente. Con questi requisiti, sarà opportuno usare immagini del contenitore di piccole dimensioni e che garantiscono la creazione di istanze veloce, come l'immagine del contenitore .NET 8.

Un'architettura di microservizi consente di usare una combinazione di tecnologie in un'area di servizi confinata. Questo approccio permette una migrazione graduale a .NET 8 per i nuovi microservizi che funzionano in combinazione con altri microservizi o con servizi sviluppati con Node.js, Python, Java, GoLang o altre tecnologie.

Distribuzione dell'alta densità nei sistemi scalabili

Se il sistema basato su contenitori richiede i massimi livelli di densità, granularità e prestazioni, le opzioni ottimali sono rappresentate da .NET e ASP.NET Core. ASP.NET Core è 10 volte più veloce rispetto ad ASP.NET in .NET Framework tradizionale ed è in testa alla classifica delle più diffuse tecnologie di settore per microservizi, come servlet Java, Go e Node.js.

Questo aspetto riguarda in particolare le architetture con centinaia di microservizi (contenitori) in esecuzione. Con le immagini ASP.NET Core, basate sul runtime .NET, in Linux o Windows Nano, è possibile eseguire il sistema con un numero molto minore di server o macchine virtuali, risparmiando così sui costi di infrastruttura e di hosting.