- Door
- Jeroen Bakker (Cyso)
- geplaatst op
- 16 juni 2016 10:00 uur
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.
Modulair opsplitsen van software
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 shoppingcart, 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.
Voordelen van microservices software design
Het werken met een microservices architectuur kan verschillende voordelen met zich meebrengen.
Schaalbaarheid
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 shoppingcarts worden bijgezet. Door slim te werken met loadbalancers en technologie als sharding, ontstaat een applicatieomgeving die nagenoeg oneindig via meerdere dimensies kan schalen.
Snellere ontwikkelingscyclus
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.
Taal-onafhankelijkheid
Doordat onderling gecommuniceerd wordt middels API’s, kan ieder component geprogrammeerd worden in feitelijk iedere programmeertaal naar keuze. Voor iedere toepassing kan de meest geschikte en krachtige technologie-stack worden ingezet.
Stimulans voor ontwikkelaars
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.
Lagere complexiteit
Vergeleken met monolithische architecturen is de complexiteit van een enkele microservice enorm laag. Door het gebruik van API’s 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.
Automatisering
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.
Duurzaamheid
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 te zijner tijd 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.
OpenStack: Microservice Architectuur in de praktijk
Eén van de grootste en bekendste voorbeelden van het gebruik van een microservices architectuur, is ongetwijfeld OpenStack, waarop ook ons Fuga platform is gebouwd. OpenStack is opgebouwd uit een groot (en nog steeds toenemend) aantal componenten die samen de infrastructuur vormen voor dit cloudplatform. 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.
Infrastructuur voor microservices
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.
Geschreven door Jeroen Bakker (Cyso)
Dit ingezonden artikel is geschreven door Jeroen Bakker van Cyso.
Lees ook de onderstaande artikelen van Cyso
Stuur ook uw blog, achtergrond artikel of andere bijdrage in!
Indien u zelf een interessante bijdrage, zoals een blog, how-to of achtergrond heeft, dan plaatsen wij die graag en dat kost u niks. Neem contact op met de ISPam.nl redactie via [email protected] of kijk op deze pagina voor meer informatie over het leveren van een bijdrage aan ISPam.nl.