Technology

.NET Core, het fundament van Elvive

By 26 september 2018 juni 20th, 2019 No Comments
.NET Core

Elvive, de loonmotor van Prato

Een gloednieuwe loonmotor vanaf nul bouwen, is niet simpel. Buiten het feit dat we te maken hebben met een immens groot functioneel domein zijn er ook tal van technische vereisten waar we rekening mee moeten houden.

We mikken op een capaciteit van 6 miljoen loonbriefjes per jaar. Elvive moet dus een enorme hoeveelheid data met vele pieken aankunnen. Schaalbaarheid is vanaf dag 1 een vereiste. Performantie is ook noodzakelijk. Een payroll consultant verwacht vandaag real-time resultaat. Hij of zij heeft nood aan een optimale workflow want time is money. Een laatste voorwaarde is open integratie voor zowel eigen als externe systemen.

In deze blog gaan we dieper in hoe .NET Core een ideale match is om aan deze vereisten te voldoen.

 

.NET Core

.NET Core is een cross-platform open source applicatie framework van Microsoft. Het is gemaakt voor de cloud met focus op performantie en schaalbaarheid.

Het biedt een oplossing voor vier scenario’s:

    • Webapplicaties (ASP.NET Core): Van simpele websites tot complexe software in de cloud zoals Elvive.
    • Console applicaties: Ideaal voor cross-platform tools.
    • Universal Windows Platform apps.
    • Libraries: herbruikbare componenten om te gebruiken in de vorige 3 scenario’s.

Het framework bestaat uit:

    • De CoreCLR bevat low level componenten zoals garbage collation, type systeem, JIT compiler en andere services.
    • De CoreFX bevat implementaties van collecties en andere fundamentele tools.
    • Een set van framework libraries, voor de ondersteuning van applicatie en primitieve data types.
    • SDK tools zoals compilers.
    • De ‘dotnet’ app host als container voor de applicatie zelf.

 

Schaalbaarheid

6 miljoen loonbriefjes per jaar. Omgerekend zijn er dat dus iets meer dan 16.000 per dag. In de uitzendsector berekenen ze lonen meestal op dezelfde dag. Dat betekent dat we rekening moeten houden met pieken.

.NET Core werkt cross-platform waardoor we vlot kunnen schakelen tussen verschillende hosting opties. Door gebruik te maken van cloud-oplossingen zoals Microsoft Azure is het mogelijk om op aanvraag, on the fly, meer resources toe te kennen aan de loonmotor, ook wel scale-up genoemd.

Scale-out is de tegenhanger van scale-up. Dat komt er in de praktijk op neer dat je meerdere instances naast elkaar uitrolt die je ad hoc kan aan- en uitzetten. Van belang is hier vooral dat je stateless services bouwt. .NET Core laat dit perfect toe via gedistribueerde caching systemen zoals Redis.

Performantie

Performance is a Key .NET Core Feature’. .NET Core gebruikt snelle releases en krijgt ondersteuning van een grote open source community. Het hele framework wordt ook mee gedeployed met de applicatie. Iedere nieuwe release is direct beschikbaar voor het grote publiek via een simpele NuGet update. Dit in tegenstelling met het .NET framework waar een Windows-update nodig is om een nieuwe versie te installeren. Performantieverbeteringen zijn hierdoor snel en kunnen iteratief ontwikkeld worden. Zo zijn er in de laatste versie .NET Core 2.1 weer tal van verbeteringen aangebracht. De feedback van de community volgt snel.

Er zijn hier enkele voorbeelden:

    • Throughput: 500.000 is het aantal requests per seconde dat een ASP.NET Core aankon bij de eerste release in een benchmarkomgeving. Een jaar later was dit al verdubbeld naar 1.15 miljoen.
    • Database – DBContextPooling: Entity framework is een veelgebruikte ORM in .NET Core. Sinds .NET Core 2.1 kunnen we gebruik maken van DBContextPooling. Een DBContext kan je zien als de toegang naar de database. Standaard wordt er bij iedere request, waar database toegang nodig is, een nieuwe DBContext aangemaakt. Bij context pooling haalt een nieuwe request een DBContext uit de pool in plaats van een nieuwe aan te maken. Na gebruik keert deze keurig terug naar de pool. Hierdoor maken we geen onnodige DBContexten aan en is de applicatie sneller.
    • String Parsing: Tekstmanipulatie gebeurt constant binnen een applicatie, minieme verbeteringen geven enorme winsten. Sinds de nieuwe versie wordt er slimmer omgegaan met geheugen en function calls waardoor deze veelgebruikte functies nog sneller zijn.

De performantieverbeteringen gebeuren over het hele framework. Aangezien alles open source is, geniet ieder component van deze snelle release en feedback loop.

 

Open integratie

Als ruggengraat van de backoffice zal Elvive door veel systemen benaderd worden. Verschillende frontoffice-pakketten versturen data naar Elvive en boekhoudpakketten moeten makkelijk data ophalen. Verder zijn er ook nog de diverse aangiftes zoals DMFA en BV.

Om de communicatie met al deze systemen vlot te laten verlopen, maken we gebruik van een duidelijke Web API die ook de taal spreekt van de domeinspecialisten. Ook hier is .NET Core een goede bondgenoot. ASP.NET Core leunt op de concepten Web API en MVC van het standaard ASP.NET framework en bouwt verder op de jarenlange ervaring – de eerste versie dateert van 16 januari 2002 – van dit platform.

Enkele features die wij gebruiken zijn:

    • REST API: Alle data die Elvive nodig heeft, komt binnen via een duidelijk omschreven API waar we zowel interne systemen zoals PratoFlex als externe systemen aan koppelen. De configuratie en parametrisatie van Elvive komt eveneens binnen via de API met daarvoor een hedendaagse user interface.
    • Swagger: Swagger is door de Swashbuckle plugin beschikbaar voor ASP.NET Core. We gebruiken het voor de ontwikkeling van onze API. Via Swagger UI krijgen we een mooie documentatie en testomgeving.
    • Security: ASP.NET Core integreert naadloos met IdentityServer, een OpenID Connect en OAuth 2.0 framework.
    • Validatie: Het is belangrijk dat de data die we binnenkrijgen correct en volledig is. Validatie kan worden toegevoegd door middel van annotaties die je boven de eigenschap van een klasse plaatst. Hieronder zie je een voorbeeld van een werknemer waarvan de naam verplicht is. Er zijn tal van soorten annotaties beschikbaar: StringLength, RegularExpression, Range. Een eigen validatie toevoegen, kan ook. De validatie werkt samen met Swagger UI en maakt de API nog duidelijker.

    • Middleware: Om het framework verder uit te breiden met aspecten als logging, security en exception handling kan je zogenoemde middleware componenten gebruiken. Hiermee kan er code worden uitgevoerd voor of na de applicatie code.

Toekomst

Met .NET Core bouwen we een schaalbaar en performant ‘Software as a Service’ product voor de toekomst. Zo zijn we zeker dat we vandaag én de komende jaren één van de meest performante technologieën voor onze applicaties ter beschikking hebben.

Hou je van een uitdaging? Heb je goesting om onze nieuwe loonmotor mee verder te ontwikkelen? Check dan zeker onze vacatures!