Cloud

Microservices

De traditionele monolithische applicatie architectuur is gemakkelijk om te programmeren, te testen en te deployen. Deze applicaties worden helaas groter, complexer, en het is moeilijker om met een team aan dezelfde applicatie te werken. Grote applicaties intimideren developers en verhogen de coördinatie tussen de teamleden. Wanneer de applicatie in productie gezet moet worden ,dan heeft een monolithische applicatie ook een verhoogd risico tot falen.

Indien men gebruik zou maken van een microservice architectuur, dan wordt de (monolithische) applicatie in kleinere "micro"-services onderverdeeld. Nieuwe teamleden zullen dan gemakkelijker en sneller een micro-service kunnen gebruiken. Het teamlid moet immers niet de hele monolithische applicatie onder de knie krijgen, maar een klein onafhankelijk deeltje van de applicatie. Een kleinere service is ook gemakkelijker om te packagen, en sneller om te deployen. Nieuwe programmeertalen en databases kunnen sneller geïntroduceerd worden, omdat deze gekozen kunnen worden voor 1 enkele microservice. Er zijn vele voordelen aan het gebruik van microservices. In de volgende stappen doorlopen we hoe we een microservice kunnen deployen in de organisatie.

1. Gebruik containers

Virtuele machines zijn traag om op te starten, te groot om te delen, en veel minder efficiënt dan wanneer er gebruik gemaakt wordt van containers. Wanneer overgeschakeld wordt op microservices zal het veel gemakkelijker en efficiënter zijn om de software in containers te laden, dan gebruik te maken van een virtuele machine voor elke instance. De code in een versie controle systeem (bv. GIT) kan rechtstreeks in een container geplaatst worden, zonder aanpassingen te maken aan de code. Variabelen worden toegevoegd door gebruik te maken van omgevingsvariabelen. De developer kan zodoende dezelfde code inclusief de omgeving op de laptop uitvoeren, of op een on-premise server, of op een cloud server. Deze pariteit van omgevingen is belangrijk om het risico te verminderen dat de software op de laptop van een developer werkt, maar niet in een productie omgeving. Dat dit een veelvoorkomend probleem is, is duidelijk wanneer men zou nagaan hoe vaak developers zeggen "maar het werkt op mijn machine". De meest populaire container software is Docker.

2. Gedistribueerde applicaties

De toekomst van applicaties zijn gedistribueerde applicaties. Deze applicaties zijn toleranter voor fouten en schaalbaar. Gedistribueerde applicaties hebben een hogere beschikbaarheid en zijn horizontaal schaalbaar tijdens piekmomenten. Naar de eindgebruiker toe zullen de applicaties vlotter werken, en minder onbereikbaar zijn, wat klantentevredenheid en de gebruikservaring zal verbeteren.

Het is best om een methodologie zoals de 12-Factor app te gebruiken om goede applicaties te schrijven. Deze applicaties moeten immers kunnen werken in containers. Een van de belangrijke regels is dat de applicatie stateless moet zijn zijn, zodat extra containers met de applicatie opgestart kunnen worden wanneer de load hoog is. Containers moeten ook gestopt kunnen worden wanneer er weinig tot geen activiteit is, wat kostenverlagend werkt. Ook upgrades zullen gemakkelijker worden, omdat verschillende containers met de app in parallel kunnen draaien en een upgrade geleidelijk uitgevoerd kan worden, zonder dat de eindgebruiker er iets van merkt. Deze principes noemt men zero-downtime deployments en Green/Blue deployments.

3. Orchestration (Orkestratie)

Wanneer we microservices gebruiken, zullen we veel verschillende containers met microservices starten. Om dit te kunnen beheren, hebben we software nodig dat de orchestration zal behandelen. De software zal health checks moeten uitvoeren, recovery van containers moeten uitvoeren, en de containers moeten kunnen schalen wanneer nodig. We kunnen zelf scripts schrijven dat de orchestration zou kunnen af handelen, of beter: we kunnen hiervoor specifieke software gebruiken. Hieronder vindt u enkele tools dat samen werken met Docker:

4. On-Premise PaaS

De orchestration tools kunnen gebruikt worden zowel voor applicaties als voor services (bvb. databases). Voor snel applicaties op een enkele node te deployen, neem een kijkje naar Dokku. Voor multi-node (vanaf 3 nodes) kan Deis een goede oplossing zijn. Beiden laten toe om snel PHP, Ruby, Python, of Java applicaties te deployen op uw eigen machines, in containers. Deis zal ook de plaatsing van containers over de nodes afhandelen, alsook health checks, failover, en allerhande zaken dat developers liever niet mee in aanraking komen. Het laat toe om de Developer te laten focussen op de app zelf, niet op de infrastructuur.

Wie zijn wij?

Bij in4it helpen we klanten betere software te ontwikkelen en deze sneller te kunnen deployen met gebruik van tools zoals Docker. Neem een kijkje op onze website en ons in4it DevOps Platform.

Over de auteur

Ward has been a system administrator for more than a decade and has been working as a Consultant and Trainer for the last few years. Besides DevOps he is also into the latest Big Data technologies. Originally Belgian, currently enjoying life in London.