Microservices-architectuur
Een microservices-architectuur biedt een zeer schaalbaar en gedistribueerd modern systeem
Het moderniseren van applicaties in een moderne wereld betekent vaak migreren naar cloudapplicaties die zijn gebouwd als microservices. Ze worden vervolgens geïmplementeerd met behulp van containertechnologie, zoals Docker of Kubernetes. Netflix en Atlassian hebben dit al gedaan, evenals talloze andere organisaties. Ze kozen hiervoor omdat een microservices-architectuur zorgt voor meer schaalbaarheid, hogere ontwikkelingssnelheden en een betere service-iteratie.
In een microservices-architectuur is een toepassing opgesplitst in een reeks onafhankelijk implementeerbare services die communiceren via API's. Hierdoor kan elke individuele service onafhankelijk worden geïmplementeerd en geschaald. Zo kunnen grote, complexe applicaties snel en regelmatig worden geleverd. In tegenstelling tot bij een monolithische toepassing kunnen teams met een microservices-architectuur nieuwe functies implementeren en sneller wijzigingen aanbrengen, zonder een groot deel van de bestaande code te herschrijven.
Enkele belangrijke kenmerken van een microservices-architectuur zijn:
Services met meerdere componenten
Microservices bestaan uit individuele, losjes met elkaar gekoppelde componentservices die kunnen worden ontwikkeld, geïmplementeerd, beheerd, gewijzigd en opnieuw geïmplementeerd zonder de functie van andere services of de integriteit van een applicatie in gevaar te brengen. Hierdoor kunnen de individuele functies van een applicatie snel en eenvoudig worden geïmplementeerd.
Eenvoudig onderhouden en testen
Met microservices kunnen teams experimenteren met nieuwe functies en deze terugdraaien als ze niet werken. Hierdoor kan code gemakkelijker bijgewerkt worden en kunnen nieuwe functies sneller gereleased worden. Bovendien kan het team eenvoudig fouten en bugs in individuele services isoleren en oplossen.
Eigendom van kleine teams
Kleine, onafhankelijke teams bouwen doorgaans een service binnen microservices, en stimuleren zo het gebruik van agile practices en DevOps. Teams kunnen zelfstandig werken en snel schakelen, waardoor de ontwikkelingscyclus sneller verloopt.
Bedrijfsmogelijkheden staan centraal
Bij een microservices-aanpak zijn services georganiseerd rond bedrijfsmogelijkheden. Teams zijn cross-functioneel, hebben alle nodige vaardigheden voor ontwikkeling en werken aan individuele functionaliteiten.
Geautomatiseerde infrastructuur
Teams die microservices opzetten en onderhouden, maken doorgaans gebruik van automatiseringspraktijken voor infrastructuur zoals continue integratie (CI), levering (CD) en implementatie (ook CD). Hierdoor kunnen teams elke service onafhankelijk opzetten en implementeren zonder impact op andere teams. Ook kunnen teams zo naast de vorige versie een nieuwe versie van een service implementeren.
Voorbeeld van een microservices-architectuur
We nemen een hypothetisch e-commerce softwareproject als voorbeeld. Hieronder zie je een diagram van een e-commercesite met een webapplicatie en mobiele applicatie die samenwerkt met meerdere microservices. Elke microservice biedt specifieke mogelijkheden voor een domein.
Moderne webapplicaties draaien in browsers en worden vaak beheerd vanuit een contentdistributienetwerk (CDN). Met een CDN worden webapplicaties snel gedistribueerd naar servers over de hele wereld, zodat webbrowsers ze snel kunnen downloaden. CDN's worden ook gebruikt om voor media zoals afbeeldingen, audio en video. In dit systeem worden bijvoorbeeld de afbeeldingen en video's van de aangeboden producten geleverd vanuit het CDN.
De microservices in deze afbeelding zijn:
Accountservice
Informatie over het klantaccount, zoals adres- en betalingsgegevens.
Inventarisservice
Actuele inventarisinformatie voor de producten die de klant kan kopen.
Winkelwagenservice
Klanten gebruiken deze service om hun aan te schaffen producten te selecteren uit de inventaris.
Betalingsservice
Klanten betalen voor de producten in het winkelwagentje.
Leveringsservice
Hier worden verpakking en levering van de gekochte producten gepland.
De applicaties werken samen met de microservices via REST API's die elk van de microservices publiceert. Met een API-gateway kunnen de applicaties vertrouwen op de API's die door de microservices worden geleverd en kunnen de microservices worden ingewisseld voor andere microservices met dezelfde API.
Elke microservice bestaat uit een service en een database. De services verwerken de REST API, implementeren bedrijfslogica en slaan gegevens op in een database. Bij microservices isoleren we de resources zoals databases en wachtrijen van elkaar, conform het 12 Factor App-contract.
Microservices opzetten
Voor veel organisaties is het starten met een monolietarchitectuur de eerste stap. Vervolgens moet je een codebase splitsen in meerdere services, de juiste patronen implementeren om netwerkproblemen snel te herstellen, omgaan met gegevensconsistentie, de servicelast controleren, etc. En dat is alleen maar de technische kant. Je moet ook je teams reorganiseren en hoogstwaarschijnlijk een DevOps-cultuur omarmen.
Dan komt het moeilijke deel: je moet de monoliet opsplitsen in microservices. Het opnieuw inrichten van een monolithisch databaseschema kan een lastige klus zijn. Het is belangrijk om duidelijk te bepalen welke datasets elke service nodig heeft en waar dit eventueel overlapt. Continue levering verlaagt het risico op uitval van de release en zorgt ervoor dat je team zich richt op het bouwen en uitvoeren van de applicatie, en niet vast blijft zitten bij het implementeren ervan.
Microservices vs. monolithische architectuur
Een monolithische architectuur is een traditioneel model, dat is gemaakt als een uniforme eenheid van een softwareprogramma die op zichzelf staat en onafhankelijk is van andere applicaties. Een microservices-architectuur is eigenlijk het omgekeerde van een monoliet, omdat het een architectuurmethode is die afhankelijk is van een reeks onafhankelijk inzetbare services. Monolieten kunnen al vroeg in een project handig zijn voor eenvoudig codebeheer, minder cognitieve overhead en gemakkelijke implementatie. Maar zodra een monolietapplicatie te groot en complex wordt, wordt deze moeilijk te schalen, is continue implementatie een uitdaging en kunnen updates omslachtig zijn.
Een monolithische applicatie is gebouwd als een enkele, ondeelbare eenheid. Met microservices wordt die eenheid opgesplitst in een verzameling onafhankelijke eenheden die samen het grotere geheel vormen. Een applicatie is gebouwd als een reeks onafhankelijk inzetbare services die gedecentraliseerd en onafhankelijk van elkaar ontwikkeld zijn.
Gedistribueerde architectuur
Microservices zijn als het ware een gedistribueerd systeem. Een gedistribueerd systeem is een verzameling computerprogramma's die computingresources gebruiken van meerdere, afzonderlijke computingnodes om een gemeenschappelijk doel te bereiken. Gedistribueerde systemen zorgen vaak voor meer betrouwbaarheid en betere prestaties van het systeem. Ook kunnen teams hiermee eenvoudig schalen.
De nodes in een gedistribueerd systeem bieden redundantie, want als een node faalt, kunnen anderen de defecte node overnemen. Elke node kan horizontaal en verticaal schalen, zodat het systeem beter presteert. Als een systeem zwaar wordt belast, kunnen extra nodes worden toegevoegd om de last te verdelen.
Kubernetes vs. Docker
Docker is een commercieel containerplatform en runtime waarmee ontwikkelaars containers kunnen bouwen, implementeren en uitvoeren. Docker biedt een efficiënte manier om containerapplicaties te verpakken en te distribueren, maar het is een uitdaging om containers op schaal uit te voeren en te beheren met alleen Docker.
Kubernetes is een populair open source-platform dat containerruntime-systemen orkestreert in een cluster van netwerkresources. Kubernetes kan met of zonder Docker worden gebruikt. Docker is een containerruntime, maar Kubernetes is een platform voor het uitvoeren en beheren van containers vanuit vele containerruntimes.
Configuratiebeheer
Softwareconfiguratiebeheer is een proces dat de metadata van de configuratie van softwaresystemen beheert, organiseert, volgt en controleert en wijzigingen eraan bijhoudt. Dit wordt gewoonlijk gebruikt in combinatie met versiebeheer en CI/CD-infrastructuur.
Configuratiebeheer helpt engineeringsteams om krachtige en stabiele systemen te bouwen met behulp van tools die automatisch updates naar configuratiegegevens beheren en controleren. Dit helpt een wildgroei aan software in een microservice-architectuur beter te beheren door een "bron van waarheid" aan te maken met een centrale locatie voor configuratie.
Volgend onderwerp
Aanbevolen artikelen
Bookmark deze resources voor meer informatie over softwareontwikkeling en voortdurende updates over Compass