Waar moet ik op letten bij een migratie van monoliet naar microservices?
Jun 09, 2021Inleiding
Het is mogelijk om systemen te ontwikkelen die gebruik maken van verschillende software architectuurmodellen die rekening houden met de voorkeuren van elke ontwikkelaar. Een sterke trend in de huidige softwaremarkt is de microservice-architectuur, vaak tegengesteld tot monolithische architectuur.
De term microservices is ontstaan in mei 2011 tijdens een conferentie van software architecten. Microservices vertegenwoordigt een stijl van systeemarchitectuur en de grootte van de services waar het uit bestaat, zoals de naam al suggereert.
Het doel van microservices architectuur is om systemen te ontwikkelen die flexibeler, schaalbaarder en eenvoudiger te onderhouden zijn dan de architecturen van monolithische systemen, die normaal worden gebruikt.
Monolithische Architectuur
De belangrijkste programmeertalen bieden mogelijkheden om de complexiteit van systemen in modules op te splitsen. Deze zijn echter ontworpen om één enkel (monolithisch) uitvoerbaar bestand te maken, waarin alle gebruikte modules worden uitgevoerd op dezelfde machine. Deze modules delen hierdoor processorkracht, geheugen, databases en bestanden.
In een typisch monolithische architectuur van een complex systeem worden alle bedrijfsfuncties geïmplementeerd in één enkel proces.
Na verloop van tijd groeit het systeem, waardoor het steeds complexer wordt en steeds meer resources vereist. Dit kan grote uitdagingen opleveren voor het onderhouden van systemen met deze architectuur. Hieronder zie je enkele voorbeelden van zulke uitdagingen:
Vergrote complexiteit en grootte over tijd
Het systeem wordt zo complex dat onderhoud steeds duurder en langzamer wordt. Ontwikkelaars moeten door veel regels code heen navigeren om het juiste stuk aan te pakken.
Grote afhankelijkheid van codecomponenten
Vele functies zijn onderling van elkaar afhankelijk en met elkaar verbonden, dus kan het toevoegen van nieuwe functionaliteiten of onderhouden van systeemcomponenten leiden tot inconsistenties of onverwacht gedrag.
De schaalbaarheid van het systeem is beperkt
Als je alleen een onderdeel van de functionaliteit wilt uitbreiden of upscalen, vereist een monolithische architectuur dat het gehele systeem wordt gerepliceerd, wat tot hogere kosten leidt dan verwacht.
Gebrek aan flexibiliteit
Het vereist dat ontwikkelaars gebonden zijn aan de technologie die oorspronkelijk was uitgekozen voor het systeem, ook al is dit in sommige situaties niet (meer) de beste keuze.
Lastig updaten van de software in productie
Elke verandering, ongeacht hoe klein, vereist een update van het complete systeem. Omdat dit operationele risico’s op kan leveren is het nodig dat het ontwikkel-, test- en onderhoudsteam alle veranderingen van de software doorlopen.
Microservices-architectuur
De microservices-architectuur wordt gebruikt om applicaties te ontwikkelen die deel zijn van een reeks van kleine services die werken volgens hun eigen proces. Elke service is onafhankelijk ontwikkeld volgens een reeks van specifieke bedrijfsregels.
Hierdoor is het mogelijk om sommige barrières in het model van monolithische architectuur te doorbreken.
Voordelen van microservices
Onderhoud en evolutie van stabielere services
Omdat ontwikkelaars zullen werken met code die maar één enkele functie uitvoert zullen individuele services los van de rest van de applicatie functioneren, waardoor er geen onnodige delen van de applicatie geladen hoeven te worden.
Services met een laag niveau van koppeling en onderlinge afhankelijkheid
Onderhoud op een specifieke service heeft geen directe invloed op de andere functionaliteiten van het systeem.
Schaalbaarheid van het systeem
De implementaties en replicaties van microservices worden gedaan via server-infrastructuren, virtuele machines en containers die onafhankelijk georganiseerd zijn. Dit zorgt ervoor dat de systeemgroei en het aanpassingsvermogen vele malen flexibeler is.
Kostenbesparing
Elke applicatie gebruikt alleen de services die deze nodig heeft. Hierdoor zul je geen extra kosten ervaren door ongebruikte functies te laden. Alle kosten hebben een rechtstreeks verband met de functionaliteit en gebruiksbelasting van het systeem.
Flexibiliteit in technologie
Door een laag niveau van overkoepeling tussen services is het niet nodig om ontwikkelaars zich te laten binden aan een specifieke technologie, waardoor je de beste optie kunt kiezen voor elk scenario.
Dit vermindert het risico op technologische veroudering en maakt het mogelijk voor het systeem om constant te verbeteren en updaten.
Makkelijk updaten van de productieomgeving
De wijzigingen in het systeem worden doorgevoerd door middel van wijzigingen en updates in de services. Hierdoor hoeft niet het complete systeem te worden geupdate om te blijven functioneren. Hierdoor is het ontwikkelteam dat de veranderingen in de gaten houdt alleen verantwoordelijk voor de services die worden veranderd.
Ondanks de voordelen van microservices, is een hoger niveau van automatisering vereist vanwege de complexere structuur. Tevens is er om dit geheel schaalbaar te implementeren en beheren orkestratie nodig, zodat automatisch op- en afschalen mogelijk wordt. Dit zorgt voor een hoge beschikbaarheid, monitoring en disaster recovery. De complexiteit vereist ontwikkelaars met op zijn minst een goed begrip van DevOps (Development and Operations) om een soepele werking te garanderen.
Waarom zijn microservices belangrijk voor het bedrijf?
Het is uiteraard vaak onderdeel van de bedrijfsdoelstellingen om de huidige marktontwikkelingen bij te houden om constant verder te kunnen groeien, meer te kunnen bereiken, de flexibiliteit te vergroten in het maken van nieuwe producten en diensten, voor te blijven op de concurrentie en, natuurlijk, kosten te verlagen.
Om deze doelen te halen moet de architectuur van de applicatie ook doorgroeien.
Maar wat kan niet gemist worden in deze applicaties?
Focus op de gebruikerservaring: Dynamiek en interactiviteit zijn concepten die niet mogen ontbreken als het aankomt op toegevoegde waarde leveren voor de eindgebruiker, ongeacht het platform (waartoe ook mobiele apparaten behoren);
Schaalbaarheid: De ontwikkelde applicaties moeten in hoge mate beschikbaar zijn. Daarnaast moet het mogelijk zijn om ze in cloudomgevingen te draaien.
Soepele updates: Het ideale scenario is dat de updates geen downtime of instabiliteit veroorzaken die de gebruiker kunnen schaden. De op microservices gerichte architectuur maakt het mogelijk om systemen te bouwen die al deze bovenstaande kenmerken hebben, in tegenstelling tot monolithische applicaties.
De microservices maken het mogelijk om:
- Nieuwe processen of diensten beschikbaar te maken zonder dat het invloed heeft op al bestaande processen en diensten;
- Veranderingen te maken in processen en diensten zonder het gehele systeem stil te leggen;
- Het gebruik van de cloud infrastructuur te optimaliseren;
- De onderhoudscomplexiteit te verminderen.
Op deze manier zullen de implementaties van nieuwe services door het ontwikkelteam gedurende de levenscyclus van de applicatie velen malen eenvoudiger en sneller door te voeren zijn.
Belangrijke factoren voor het adopteren van de microservices-architectuur
Een complex systeem dat microservices gebruikt heeft lagere onderhoudskosten dan applicaties met een monolithische architectuur.
Er is echter een barrière die de keuze van een architectuur op basis van microservices kan beïnvloeden: De opstartkosten kunnen hoger zijn vergeleken met die van een monolithisch systeem. Bovendien kan er uiteindelijk behoefte zijn aan extra inspanningen voor het beheer van microservices, waar ook rekening mee gehouden moet worden.
We moeten ook de mogelijke risico’s benoemen die komen bij het adopteren van een op microservices gerichte architectuur. Omdat we het over complexe systemen hebben zullen er altijd punten zijn die meer aandacht vereisen, ongeacht de gekozen architectuur.
In het geval van microservices is het nodig om aandacht te schenken aan:
Kosten
Monolithische architectuur is eenvoudiger en hierdoor in eerste instantie ook goedkoper. Na een verloop van tijd zal de complexiteit en de vraag naar systeembronnen vergroten, waardoor het echter duurder zal worden. In het geval van microservices geldt het tegenovergestelde. De initiële implementatie vereist een grotere investering, maar de trend is dat na verloop van tijd het kosten-batenverhouding beter zal zijn.
Communicatie tussen microservices
Wie software heeft gebaseerd op microservices-architectuur moet goed zorgen voor de onderlinge communicatie tussen de microservices. Dit maakt integratie mogelijk met andere onafhankelijk ontwikkelde diensten, waardoor het systeem op een professionelere manier wordt aangevuld dan de functies die monolithisch zijn ontwikkeld. De mogelijkheden voor integratie zijn talloos, waardoor het eenvoudiger is voor het bedrijf om nieuwe producten en diensten aan klanten aan te bieden.
Beheer van de applicatie
De complexiteit van de coördinatie is minder in een monolithische architectuur. Er is een relevant probleem dat monolithische architectuur op dit punt nadelig maakt: omdat alles één enkele applicatie draait, kan een probleem in elk onderdeel van het proces het compleet niet meer werken van de toepassing veroorzaken. Bij het ontwikkelen van applicaties gebaseerd op microservices zal dit niet voorkomen en zijn eventuele problemen alleen van toepassing op het betreffende onderdeel, waardoor in veel gevallen de overige functionaliteiten van het systeem normaal gebruikt kunnen worden.
Conclusie
Het kiezen tussen microservices- en monolithische architectuur is geen eenvoudige opgave. Het veranderen van het eerder gekozen model is ook een complexe keuze die de analyse van alle bovengenoemde factoren vereist. Maar alles lijkt erop te wijzen dat de markt langzaam op weg is om de voorkeur te geven aan microservices.
Ben je benieuwd wat NForza voor je kan betekenen om meer grip te krijgen op je software ontwikkeling?