07/02/2022
De opmars van Kubernetes en microservices in 2021
Het gebruik van Kubernetes en het werken met een microservices architectuur is een trend die al jarenlang in de lift zit.
Blog
Parallel aan de ontwikkeling en populariteit van containertechnologie, is ook het gebruik van microservices architectuur aan een opmars bezig. Het idee achter microservices is dat applicaties eenvoudiger te bouwen en te onderhouden zijn als ze worden opgebroken in kleine, onderling samenwerkende onderdelen. Ieder component wordt apart ontwikkeld, waarna de applicatie daarna eenvoudigweg de som is van de verschillende delen. Dit verschilt dus van een tradionele, monolithische applicatie waarbij alles centraal wordt ontwikkeld. Het gebruik van een microservices architectuur is langzaam maar zeker de standaard aan het worden bij systemen die gebruik maken van continuous deployment.
Bij het gebruik van microservices worden functionele componenten van een applicatie dus uit elkaar getrokken en apart geplaatst. Bij een webshop bijvoorbeeld, zou dit kunnen betekenen dat in plaats van één grote applicatie er losse microservices worden gedefinieerd voor de zoekfunctie, de shopping cart, producten, bestellingen, klanten, enzovoorts. De keuze hiervan ligt bij de ontwikkelaar en kan zo gedetailleerd (klein) zijn als gewenst. Als services te specifiek worden gemaakt, spreekt men ook wel van nanoservices. Deze resulteren in onnodige overhead die de voordelen teniet doen.
Voorbeeld van microservices voor een e-commerce website
Het werken met een microservices architectuur kan verschillende voordelen met zich meebrengen.
Zoals gezegd, het gebruik van microservices resulteert in een hoge en zeer flexibele mate van schaalbaarheid. Van ieder component kunnen bij meer drukte of behoefte extra instanties bijgeschakeld worden. Bij grote drukte van een webshop bijvoorbeeld kunnen extra containers met shopping carts worden bijgezet. Door slim te werken met loadbalancers en technologie als sharding, ontstaat een applicatieomgeving die nagenoeg oneindig via meerdere dimensies kan schalen.
Omdat de applicaties klein zijn, kan veel sneller ontwikkeld en getest worden dan bij grote, logge toepassingen. De applicaties zijn vele malen overzichtelijker, waardoor een nieuwe versie snel getest en geïmplementeerd kan worden.
Doordat onderling gecommuniceerd wordt middels APIs kan ieder component geprogrammeerd worden in feitelijk iedere programmeertaal naar keuze. Voor iedere toepassing kan de meest geschikte en krachtige technologie-stack worden ingezet.
Over het algemeen worden developers enthousiast als ze kunnen werken met de nieuwste technieken en programmeertalen. Bij oude, monolitische applicaties zit men gevangen in vaste applicatiestructuren en methodieken die niet of nauwelijks meer te veranderen zijn. Microservices zijn betrekkelijk snel geheel opnieuw te ontwikkelen of aan te passen. Dit motiveert ontwikkelaars, hetgeen resulteert in betere resultaten en trouwere medewerkers.
Vergeleken met monolithische architecturen is de complexiteit van een enkele microservice enorm laag. Door het gebruik van APIs is alle functionaliteit duidelijk gestructureerd en omschreven zonder abstractielagen. Dit betekent dat het voor een ontwikkelaar mogelijk is om een dergelijke applicatie van voor tot achter helemaal te begrijpen. Met name voor nieuwe collega’s geldt dat deze hierdoor sneller aan de gang kunnen om een bijdrage te leveren aan een productieomgeving.
Eén van de nadelen van het gebruik van microservices is wellicht de hoeveelheid werk die initieel zit in configuratie en automatisering van alle verschillende componenten. Maar dit levert op termijn juist een groot voordeel op. Systemen worden robuuster, minder gevoelig voor configuratiefouten en de hoeveelheid handwerk wordt gereduceerd tot een minimum. Doordat in korte, grotendeels geautomatiseerde ontwikkel en update cyclussen wordt gewerkt, kunnen eventuele bugs snel worden gedetecteerd en opgelost. En, indien gewenst, kunnen updates ook weer snel en eenvoudig worden teruggedraaid.
De moderne applicatie van vandaag is de legacy applicatie van de toekomst. Vroeg of laat krijgt een organisatie ermee te maken dat software achterhaald is en een remmende factor wordt voor toekomstige groei. Dat zal ook gelden voor de applicaties die nu ontwikkeld worden in een microservices architectuur. Echter, omdat deze in kleine onderdelen zijn opgesplitst, is het tezijnertijd vervangen van de applicatie op te splitsen in kleine projecten. In plaats van het in één keer moeten vervangen van een enorme alles-in-één applicatie, kan het moderniseren in fases worden gedaan. U zult moeten blijven werken aan het up-to-date houden van software en technologie, maar kunt dat in kleine, relatief veilige stappen doen.
Misschien is dit laatste argument dan ook wel de belangrijkste. Als u het goed aanpakt, heeft u de kans om een systeem te ontwikkelen dat nooit meer een remmende factor is bij veranderende omstandigheden.
Eén van de grootste en meest bekende voorbeelden van het gebruik van een microservices architectuur is ongetwijfeld OpenStack, waarop ook ons Fuga Cloud platform is gebouwd. OpenStack is opgebouwd uit een groot (en nog steeds toenemend) aantal componenten die samen de infrastructuur vormen voor dit cloud platform. Het platform maakt gebruik van zo klein mogelijke, functionele schakels die op uniforme wijze middels API’s met elkaar communiceren. Ieder component is een apart project binnen OpenStack. Naast de communicatie tussen de API’s, wordt gewerkt met zo identiek mogelijke methodes voor functioneel en technisch design, ontwikkelmethodiek en test- en acceptatieprocedures. Zo wordt ervoor gezorgd dat dit project met een enorme omvang toch overzichtelijk, beheersbaar en betrouwbaar blijft.
Zowel microservices als containers zijn design principles. Voor containers geldt dit op het gebied van deployment, schaalbaarheid en onderhoud van systemen. Bij microservices betreft het functionaliteit, beheersbaarheid en betrouwbaarheid van software. Het combineren van de twee vormt een methode om een enorm platform te bouwen dat waarop zowel de infrastructuur als de software snel aan te passen en bij te werken is. Als een bepaald deel van een applicatie meer capaciteit nodig heeft, kan alleen dat gedeelte worden uitgebreid, zonder dat direct voor de hele applicatie uitbreiding moet worden verzorgd. Door microservices onder te brengen op containers ontstaat een bijzonder flexibele architectuur die snel en eenvoudig mee kan groeien (of krimpen) met een actuele behoefte en die snel voorzien kan worden van de nieuwste updates.
Ondanks de vele voordelen zoals hierboven geschetst, is het vaak niet eenvoudig om over te schakelen naar een microservices architectuur. Er dient een hoop nadenkwerk vooraf te worden gedaan. Het is in veel gevallen ook eenvoudigweg nauwelijks mogelijk om een bestaande, monolithische applicatie om te bouwen naar een architectuur op basis van microservices. Alle componenten (applicaties, loadbalancers, netwerkarchitectuur, scripts voor automatisering en schaalbaarheid) dienen op de juiste wijze met elkaar samen te werken. Uw developers hebben hier een belangrijke rol in, maar Cyso kan u als hostingpartij ook van advies en ondersteuning voorzien bij het opbouwen, inrichten en hosten van de infrastructuur van uw platform en applicaties. Neem contact op voor een vrijblijvend gesprek.