Microservices
Microservices zijn de moderne bouwstenen in softwareontwikkeling die een mooie oplossing bieden voor de problemen die we ondervinden bij de traditionele aanpak. Stefaan legt uit waarom.
Probleem van uitbreidbaarheid
De meeste applicaties beginnen met beperkte functionaliteit. Nieuwe features worden stap voor stap toegevoegd. Tenslotte bekomt men één groot geheel wat een monolitische applicatie noemt. Er bestaan verschillende methodieken om dergelijke mastodonten te structureren, te testen en te onderhouden. Echter vergt het steeds meer inspanningen om elke nieuwe feature in deze structuren te doen passen. Het vereist ook telkens meer tijd om het geheel op kwaliteit te testen. Met de toenemende complexiteit van moderne applicaties is de tradionele aanpak niet langer de beste keuze.
Probleem van schaalbaarheid
Naarmate de populariteit van een applicatie stijgt kunnen problemen ontstaan met de performantie. Verticaal schalen is een voor de hand liggende oplossing. Hierbij wordt het aantal processoren en de hoeveelheid intern geheugen van de servers verhoogt. Deze aanpak loopt al snel tegen de limieten van een enkele server. Een andere oplossing is horizontaal schalen. Hierbij wordt de applicatie op meerdere servers geïnstalleerd. Dit brengt extra onderhoud met zich mee. Er is bijvoorbeeld nood aan een load balancer om de lading te verdelen. Een monolitische applicatie op deze manier schalen is ingewikkeld, waardoor het moeilijk wordt om het geheel draaiende te houden.
Microservices, ook reactieve services genoemd, is een nieuwe manier van softwareontwikkeling. Een applicatie bestaat hierbij uit een compositie van onafhankelijk installeerbare services. Iedere microservice beperkt zich tot één bepaalde functionaliteit. De verschillende microservices worden daarna met minimale communicatie aan elkaar gekoppeld. Dergelijke architectuur is zeer uitbreidbaar, onderhoudbaar en ook perfect schaalbaar. Er zijn vier architecturale karakteristieken:
Responsive
Het systeem moet zo snel mogelijk reageren. Dit zal de gebruikers tevreden stellen. Er wordt gestreefd naar een reactietijd van 0,1 seconde. Door deze snelheid kunnen ook technische problemen snel gevonden en opgelost worden.
Resilient
Het systeem moet te allen tijde blijven reageren, ook in geval er iets fout loopt. Deze non-stop beschikbaarheid wordt bereikt door replicatie of fallback services. De verschillende microservices worden hiervoor van nabij gemonitord. Vaak wordt de component die uitgevallen is automatisch terug geactiveerd.
Elastic
Het systeem moet elke belasting aankunnen. Een elastisch systeem kan de beschikbare hardware dynamisch toekennen aan de individuele componenten om aan de vraag te voldoen. Er zijn geen centrale bottlenecks omdat het systeem gedistribueerd is over verschillende servers.
Message driven
Reactieve services communiceren met asynchrone boodschappen. Hierdoor zijn de componenten losgekoppeld van elkaar en blokkeren ze elkaar niet. Een component verstuurt zijn boodschap en hoeft niet op het antwoord te wachten. Het antwoord wordt verwerkt door een andere component. Het is zelfs mogelijk dat de boodschap door verschillende componenten behandeld en beantwoord wordt.
Bij de ontwikkeling van microservices is technologische diversiteit zowel een voordeel als nadeel.
In tegenstelling tot monolithische applicaties, waarbij men voor iedere nieuwe feature gebonden is aan dezelfde technologie, kan voor elke microservice een andere technologie gekozen worden. De keuze kan voor iedere component verschillen. Dit voordeel komt de ontwikkeling en performantie ten goede.
Als nadeel kan gesteld worden dat niet enkel experts nodig zijn, maar ook polyglotten. Polyglotten zijn ontwikkelaars die met vele technologieën overweg kunnen. Duo heeft zowel experts als polyglotten in huis. Bovendien werken de verschillende technologische teams steeds vaker samen, omdat er steeds vaker gekozen wordt voor een aanpak met microservices.