Wat is er nieuw en verbeterd in Microsoft’s .NET 8

Slankere containerimages, eenvoudigere codesyntax, en een aangename verrassing – .NET Aspire, een doordachte stack voor het bouwen van cloud-native applicaties met .NET.

Een terugkerend thema bij recente platform- en toolreleases, vooral rond .NET, is de productiviteit van ontwikkelaars. Dat is niet verwonderlijk gezien het huidige economische klimaat en de impact ervan op de personeelsbezetting. We zijn allemaal belast met het doen van meer met minder.

Microsoft en de .NET Foundation hebben onlangs de nieuwste versie van hun cross-platform ontwikkelingsframework uitgebracht, .NET 8. Voorafgaand aan de lancering zat ik samen om te praten met Gaurav Seth, partner directeur product, ontwikkelaarsplatforms bij Microsoft, over de nieuwe release en hoe hij verwacht dat ontwikkelaars .NET 8 in hun dagelijkse taken zullen gebruiken.

Omdat .NET 8 een Long Term Support-release is, is het waarschijnlijk dat de meeste .NET-ontwikkelingsteams het platform zullen aannemen en verwachten dat het goed voor hen werkt tot de volgende LTS-release, .NET 10. Net als bij .NET 6 mixt .NET 8 nieuwe functies met verbeterde tools, gericht op gemeenschappelijke leveringspatronen en ondersteuning van nieuwe manieren van werken.

Snellere implementatie met geoptimaliseerde containers
Een belangrijke focus lag op de infrastructuur, met name rond de snelgroeiende cloud-native workloads. Een gebied waar ik in eerdere artikelen op heb gewezen, zijn de containerimages van .NET. Deze zijn blijven worden geoptimaliseerd, gebouwd op distro-loze, slanke images om downloads te versnellen en de dichtheid van services op een host te vergroten.

Dat laatste punt is er een waar we meestal niet aan denken, maar het zal een aanzienlijke impact hebben op zowel de schaalbaarheid als de kosten van cloud-native applicaties. Als je minder middelen kunt gebruiken om een applicatie te draaien zonder dat dit invloed heeft op de prestaties, kun je de economie van je code verbeteren.

De cijfers zijn indrukwekkend. Een gecomprimeerd, slank Ubuntu 22.04-image is nu slechts 48MB, met een afgeslankte runtime van slechts 16MB. Het kleine opslag- en geheugenverbruik zal het mogelijk maken om de autoscaling van .NET-resources in Kubernetes te versnellen en nieuwe builds uit te proberen zonder te hoeven wachten op het downloaden van images uit het repositorysysteem van je buildsysteem.

Het leesbaarder maken van code
Een subtiel effect van de nieuwe release is een reeks verbeterde taalconstructies die de leesbaarheid van C#-code vergroten. Het vereenvoudigen van code verbetert aanzienlijk het onderhoud, vooral voor grote projecten die worden onderhouden door grote ontwikkelingsteams. Een eenvoudigere syntaxis maakt het voor nieuwe ontwikkelaars gemakkelijker om de code te begrijpen, waardoor de tijd naar een oplossing wordt verkort.

Zoals Seth me vertelde: “En dat is de reis die we hebben afgelegd. Hoe blijven we die standaardtekst weghalen? Hoe blijven we het steeds eenvoudiger maken en bereiken we veel meer met minder regels code die je moet schrijven?” Hij beschrijft het als een streven naar een minimale patroon, waarbij de onderliggende platformen de vereenvoudiging in de talen die het aandrijft drijven. Voor de meesten van ons betekent dit verbeteringen in C#, maar we zullen aspecten van deze nieuwe functies zien in het hele scala van .NET-talen.

Een doordachte cloud-native ontwikkeling
Hoewel veel van de .NET 8-release al geruime tijd publiekelijk bekend was, door middel van een reeks releasekandidaten en previewversies van Visual Studio, is er nog steeds ruimte voor verrassingen. Dit keer is het de onthulling van .NET Aspire, dat Seth beschrijft als een doordachte stack voor het bouwen van cloud-native applicaties met .NET.

Je kunt .NET Aspire beschouwen als een platformniveau-equivalent van tools zoals Dapr of Radius, dat je de steiger en de leuningen geeft die nodig zijn om op elke openbare cloud microservices-gebaseerde applicaties te bouwen. “Het is een met goud geplaveid pad”, vertelde Seth me. “Het wordt geleverd met een reeks samengestelde componenten en tools, en ondersteunt veerkracht, beheersbaarheid en zichtbaarheid.” Seth suggereert dat .NET Aspire bedoeld is voor .NET wat Spring Boot is voor Java.

In elk geval begint .NET Aspire een grote leegte in de toolsstrategie van .NET op te vullen. Voor een platform dat wordt gebruikt in veel bedrijfsprojecten, is het verrassend dat .NET geen tools of frameworks biedt die specifiek zijn voor ondernemingen, waardoor je bij elk groot project het wiel opnieuw moet uitvinden. Met zijn kant-en-klare doordachte aanpak zou .NET Aspire het leven moeten vereenvoudigen voor veel ondernemingsarchitecten, waardoor ze zich kunnen concentreren op het snel leveren van goede code.

Een preview van .NET Aspire wordt geleverd als onderdeel van de .NET 8-release, met een volledige release gepland in het voorjaar van 2024. De toolkit wordt geleverd met een startersapp die je helpt je eerste Aspire-project op te zetten en de functies van Aspire te verkennen. Samen met .NET 8 heb je de nieuwste Visual Studio preview-release nodig om Aspire-applicaties te bouwen. Er is basisondersteuning voor de .NET CLI en ondersteuning voor de C# Dev Kit voor Visual Studio Code staat gepland.

Aan de slag met .NET Aspire
Het maken van je eerste .NET Aspire-applicatie geeft je een front-end Blazor webapp en een bedrijfslogicaservice. Daarnaast zijn er twee nieuwe projecttypen, een AppHost en een set ServiceDefaults. Je kunt deze zien als de orkestratie-engine voor je gedistribueerde .NET-applicaties.

De AppHost is waar je je applicatiecontainers en andere ondersteuningstools definieert, inclusief verbindingsreeksen, terwijl ServiceDefaults alle op service gerichte functies bevatten die worden gebruikt voor app-ontdekking en voor telemetrie, zodat je één plek hebt om je beheer- en zichtbaarheidstools aan te sluiten. Deze omvatten OpenTelemetry-eindpunten en standaard .NET-gezondheidscontroles. ServiceDefaults maken ook service-ontdekking mogelijk, zodat je API’s kunnen worden gebruikt door andere componenten in je gedistribueerde omgeving.

De standaardsjablonen bieden de basisstructuur van een .NET Aspire-applicatie. Je kunt de twee beschikbare starters gebruiken om je eigen apps te bouwen, ofwel met het standaardvoorbeeld om een basis te hebben om op voort te bouwen, of alleen met de essentiële onderdelen en je eigen front-end en back-end componenten vanaf nul op te bouwen.

Een handige functie in de AppHost is de mogelijkheid om snel hulpprogramma’s vanuit je code te configureren, bijvoorbeeld door containers toe te voegen met databases en andere applicatieservices. Deze aanpak maakt het mogelijk dat je applicaties zichzelf orkestreren, waarbij AppHost Kubernetes en andere infrastructuurservices voor je beheert. Componenten die infrastructurele services beschrijven, zijn beschikbaar via NuGet, zodat je bestaande .NET-tools kunt blijven gebruiken, zelfs terwijl je gedistribueerde applicatie-infrastructuur opbouwt.

Het .NET Aspire-componentenmodel is een krachtig instrument, en er zijn al componenten voor de meeste gangbare Azure-services, inclusief externe services zoals Redis en PostgreSQL. Omdat het model open source is, mag je verwachten dat er snel extra services beschikbaar komen.

Een ontwikkeldashboard voor .NET
In tegenstelling tot andere delen van .NET heeft .NET Aspire een ontwikkeldashboard. Dit is een belangrijk hulpmiddel voor de ontwikkeling van gedistribueerde applicaties, omdat het je één plek geeft om belangrijke metingen van je applicatie te zien, zonder je ontwikkelomgeving te hoeven verlaten om naar een zichtbaarheidssuite of een monitoringplatform te kijken (die sowieso onwaarschijnlijk onderdeel zullen zijn van een ontwikkelomgeving).

Wanneer je je ontwikkelcode uitvoert, krijg je een visuele trace van je verzoeken, samen met toegang tot logs. Dit geeft je de informatie die nodig is om oproepen te optimaliseren en de oorzaken van vertragingen op te sporen die mogelijk niet zichtbaar zijn met conventionele debugtools – vooral wanneer je een afhankelijkheid bijhoudt van externe tools zoals Redis.

Een belangrijk voordeel van het gebruik van .NET Aspire is dat, hoewel het op zichzelf nuttig is, er de mogelijkheid is om het in synergie te gebruiken met andere tools voor het bouwen en uitvoeren van gedistribueerde applicaties. Wat als je platformengineeringteam applicatie-infrastructuur en definities aan het bouwen was in Radius, met code die wordt afgehandeld in .NET Aspire en implementaties en sidecars in Dapr?

Aangezien .NET Aspire een open-source platform is, mogen we verwachten dat het functies ontwikkelt die andere cloud-native scenario’s buiten Azure aanpakken. Als we kijken naar het serverloze platform van AWS, waar een actieve C#-community actief is, zouden we zelfs ondersteuning kunnen zien voor op gebeurtenissen gebaseerde serverloze applicaties, met tools die helpen bij het configureren van doelomgevingen en die codegeneratietools gebruiken om native .NET-implementaties van service-API’s te bieden.

Met de lancering van .NET Aspire en een hele reeks andere productiviteitstools is het duidelijk dat .NET 8 zich richt op het sneller en gemakkelijker maken van het bouwen van applicaties die zowel bedrijven als consumenten nodig hebben – inclusief moderne, gedistribueerde, cloud-native applicaties.

 

 

Bron: Microsoft Learn .net8 ; InfoWorld ; Devblogs ; Microsoft Learn