Close

Microservices vs. monolithische architectuur

Als monolieten te groot worden, is het misschien tijd om over te stappen op microservices

Headshot van Chandler Harris
Chandler Harris

Marketingstrateeg en auteur


Een monolithische toepassing wordt gemaakt als één uniforme eenheid, terwijl een microservices-architectuur een verzameling van kleinere services is die afzonderlijk geïmplementeerd kunnen worden. Welke optie past bij jou? Dat hangt van een aantal factoren af.

In 2009 kreeg Netflix te maken met een aantal problemen. De infrastructuur kon de vraag naar de snelgroeiende videostreamingdiensten niet bijhouden. Het bedrijf besloot de IT-infrastructuur te migreren van particuliere datacenters naar een openbare cloud en de monolithische architectuur te vervangen door een microservices-architectuur. Het enige probleem was dat de term 'microservices' niet bestond en de structuur niet bekend was.

Netflix werd een van de eerste grote bedrijven die met succes migreerde van een monoliet naar een cloudgebaseerde microservices-architectuur. Het won de JAX Special Jury-award in 2015, deels vanwege deze nieuwe infrastructuur die DevOps internaliseerde. Tegenwoordig heeft Netflix meer dan duizend microservices die afzonderlijke delen van het platform beheren en ondersteunen, waarbij technici regelmatig (soms duizenden keren per dag) code implementeren.

Netflix was een voorloper in de bijna gebruikelijke norm van tegenwoordig: de overstap van een monolithische architectuur naar een microservices-architectuur.

Wat is een 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 toepassingen. Het woord 'monoliet' wordt vaak toegeschreven aan iets groots, wat ook geldt voor een monolithische architectuur voor softwareontwerp. Een monolithische architectuur is een uniek, groot computernetwerk met één codebasis die alle zakelijke belangen samenvoegt. Als er een wijziging in zulke toepassingen doorgevoerd moet worden, moet de hele stack worden bijgewerkt door toegang te krijgen tot de codebasis en een bijgewerkte versie van de interface aan de servicekant te maken en te implementeren. Hierdoor worden updates beperkend en nemen ze veel tijd in beslag.

Monolieten kunnen al vroeg in een project handig zijn voor eenvoudig codebeheer, minder cognitieve overhead en gemakkelijke implementatie. Hierdoor kan alles in de monoliet in één keer worden gereleased.

afbeelding monolithische architectuur
Pictogram codebuild
gerelateerd materiaal

Microservices opzetten

Pictogram van drie ringen
Oplossing bekijken

Beheer je componenten met Compass

Voordelen van een monolithische architectuur


Organisaties kunnen kiezen voor een monolithische of microservices-architectuur, afhankelijk van een aantal verschillende factoren. Bij de ontwikkeling met behulp van een monolithische architectuur is de hoge ontwikkelingssnelheid het belangrijkste voordeel vanwege de eenvoud van een toepassing op basis van één codebasis.

De voordelen van een monolithische architectuur zijn onder andere:

Eenvoudige implementatie — Eén uitvoerbaar bestand of uitvoerbare map maakt de implementatie eenvoudiger.

Ontwikkeling — Als een toepassing met één codebasis is gemaakt, dan is deze gemakkelijker te ontwikkelen.

Prestaties — In een centrale codebasis en repository kan één API vaak dezelfde taken uitvoeren als meerdere API's met microservices.

Vereenvoudigde testen — Aangezien een monolithische toepassing één centrale eenheid is, kunnen end-to-endtesten sneller worden uitgevoerd dan bij een gedistribueerde toepassing.

Eenvoudige debugging — Als alle code zich op één plek bevindt, kan een aanvraag gemakkelijker gevolgd worden en een issue sneller gevonden worden.

Nadelen van een monolithische architectuur


Net als bij Netflix kunnen monolithische toepassingen zeer effectief zijn, tot ze te groot worden waardoor schalen lastig wordt. Voor een kleine verandering in één functie moet het hele platform worden gecompileerd en getest, wat in strijd is met de agile aanpak waar ontwikkelaars tegenwoordig de voorkeur aan geven.

De nadelen van een monoliet zijn onder andere:

Lagere ontwikkelingssnelheid — Een grote, monolithische toepassing maakt de ontwikkeling complexer en langzamer.

Schaalbaarheid — Je kunt afzonderlijke componenten niet schalen.

Betrouwbaarheid — Als er een fout in een module optreedt, kan dit de beschikbaarheid van de hele toepassing beïnvloeden.

Lastige technische implementatie — Eventuele wijzigingen in het framework of de taal hebben invloed op de gehele toepassing, waardoor wijzigingen vaak duur zijn en veel tijd in beslag nemen.

Weinig flexibiliteit — Een monoliet is gebonden aan de technologie die al in de monoliet wordt gebruikt.

Implementatie — Als er een kleine wijziging in een monolithische toepassing doorgevoerd moet worden, dan moet de gehele monoliet opnieuw geïmplementeerd worden.

Wat zijn microservices?


Een microservices-architectuur, die ook gewoon 'microservices' wordt genoemd, is een architectonische methode die afhankelijk is van een reeks afzonderlijk implementeerbare services. Deze services hebben hun eigen bedrijfslogica en database met een specifiek doel. Bijwerken, testen, implementeren en schalen vindt plaats binnen elke service. Microservices zetten grote zakelijke, domeinspecifieke belangen om in afzonderlijke, onafhankelijke codebases. Microservices zorgen niet voor minder complexiteit, maar maken elke complexiteit zichtbaar en beter beheersbaar door taken om te zetten naar kleinere processen die onafhankelijk van elkaar functioneren en bijdragen aan het geheel.

Het adopteren van microservices gaat vaak gepaard met DevOps, omdat ze de basis vormen voor continue levering waarmee teams zich snel kunnen aanpassen aan de vereisten van de gebruiker.

afbeelding microservice-architectuur

De weg van Atlassian naar microservices


Atlassian stapte over op microservices in 2018 nadat we te maken kregen met uitdagingen op het gebied van groei en schaal met Jira en Confluence. We ontdekten dat onze monolithische architecturen met één tenant die on-premise draaien niet in staat zouden zijn om te schalen op basis van toekomstige behoeften.

We besloten Jira en Confluence opnieuw te ontwerpen en ze te verplaatsen van een beperkt monolithisch systeem met één tenant naar grenzeloze cloudtoepassingen met meerdere tenants, gehost door Amazon Web Services (AWS). Daarna deelden we ze in de loop van de tijd op in microservices. Het project werd Vertigo genoemd nadat een senior technicus zei: 'Ik vind het idee echt top, maar het maakt me duizelig.” Het was ons grootste infrastructuurproject tot nu toe en het duurde twee jaar om de transitie naar AWS te voltooien, waarbij meer dan 100.000 klanten in iets meer dan 10 maanden werden overgezet zonder serviceonderbrekingen. We deden er ook alles aan om de diensten op te delen in microservices.

Voordelen van microservices


Microservices zijn zeker geen wondermiddel maar lossen wel allerlei problemen op voor groeiende software en bedrijven. Aangezien een microservices-architectuur bestaat uit eenheden die onafhankelijk worden uitgevoerd, kan elke service ontwikkeld, bijgewerkt, geïmplementeerd en geschaald worden zonder de andere services te beïnvloeden. Software-updates kunnen vaker worden uitgevoerd met een hogere betrouwbaarheid, meer uptime en betere prestaties. Eerst voerden we eenmaal per week updates uit en doen dit nu zo'n twee tot drie keer per dag.

Naarmate Atlassian groeit, kunnen we dankzij microservices teams en geografische locaties betrouwbaarder schalen, door meer mogelijkheden te bieden voor het leveren van service. Voordat we Vertigo begonnen had Atlassian vijf verschillende ontwikkelingscentra over de hele wereld. Deze gedistribueerde teams werden beperkt door een centrale monoliet, en we moesten ze meer zelfstandigheid bieden. Dit konden we doen dankzij microservices.

De voordelen van Vertigo zijn onder andere een hogere implementatiesnelheid, disaster recovery, lagere kosten en hogere prestaties. Hierdoor kunnen we ons doel sneller bereiken en meer incrementele waarde te bieden aan klanten.

Bovendien maken microservices het voor teams over het algemeen eenvoudiger om code bij te werken en releasecycli te versnellen met continue integratie en continue levering (CI/CD). Teams kunnen experimenteren met code en alles weer terugdraaien als er iets misgaat.

De voordelen van microservices zijn in het kort:

Agility — Stimuleer agile werkwijzen met kleine teams die vaak implementeren.

Flexibel schalen — Als een microservice zijn laadvermogen bereikt, kunnen nieuwe installaties van die service snel worden ingezet in de bijbehorende cluster om de druk te verlichten. We bieden nu grenzeloze opties met meerdere tenants en hebben klanten verspreid over meerdere installaties. Nu kunnen we veel grotere installaties ondersteunen.

Continue implementatie — We hebben nu regelmatige en snellere releasecycli. Hiervoor voerden we eenmaal per week updates uit en nu kunnen we dat zo'n twee tot drie keer per dag doen.

Eenvoudig te onderhouden en testen – Teams kunnen experimenteren met nieuwe functies en alles weer terugdraaien als er iets niet werkt. Hierdoor kan code gemakkelijker bijgewerkt worden en kunnen nieuwe functies sneller gereleased worden. Bovendien is het eenvoudig om fouten en bugs in individuele services te isoleren en op te lossen.

Afzonderlijk te implementeren — Aangezien microservices afzonderlijke eenheden zijn, maken ze een snelle, eenvoudige onafhankelijke implementatie van individuele functies mogelijk.

Technologische flexibiliteit — Microservice-architecturen geven teams de vrijheid om de tools te kiezen die ze willen.

Hoge betrouwbaarheid — Je kunt wijzigingen voor een specifieke service implementeren, zonder dat je je zorgen hoeft te maken dat de hele toepassing wordt uitgeschakeld.

Blijere teams — Atlassian-teams die met microservices werken, zijn een stuk blijer omdat ze zelfstandiger zijn en zelf kunnen maken en implementeren, zonder dat ze weken op de goedkeuring van een pull request hoeven te wachten.

Nadelen van microservices


Toen we overstapten van een klein aantal monolithische codebases naar meerdere gedistribueerde systemen en diensten die onze producten mogelijk maakten, had dit onbedoelde complexiteit tot gevolg. We hadden aanvankelijk moeite om nieuwe capaciteiten toe te voegen met dezelfde snelheid en hetzelfde vertrouwen als eerder. Microservices kunnen tot meer complexiteit leiden die een te uitgebreide ontwikkeling of snelle en onbeheerde groei kan veroorzaken. Het kan lastig zijn om te bepalen hoe verschillende componenten zich tot elkaar verhouden, wie een bepaalde softwarecomponent bezit of hoe je voorkomt dat afhankelijke componenten worden verstoord.

We hebben met Vertigo een gemeenschappelijke functionaliteit gebouwd die de motor vormt achter onze bestaande producten en de toekomstige producten die we overnemen en ontwikkelen. Als je een bedrijf hebt met één product, zijn microservices mogelijk niet nodig.

De nadelen van microservices zijn onder andere:

Te uitgebreide ontwikkeling — Microservices zorgen voor meer complexiteit in vergelijking met een monolithische architectuur, omdat er meer services op meer plaatsen zijn die door meerdere teams worden gecreëerd. Als de ontwikkeling niet goed wordt beheerd, leidt dit tot een lagere ontwikkelingssnelheid en lagere operationele prestaties.

Exponentiële infrastructuurkosten — Elke nieuwe microservice kan kosten met zich meebrengen voor testsuites, implementatiedraaiboeken, hostinginfrastructuur, monitoringtools en meer.

Meer organisatorische overhead — Teams moeten een aanvullend communicatie- en samenwerkingsniveau toevoegen om updates en interfaces af te stemmen.

Uitdagingen bij debuggen — Elke microservice heeft zijn eigen set logs, waardoor debuggen ingewikkelder wordt. Bovendien kan één bedrijfsproces op meerdere machines worden uitgevoerd, wat debuggen nog ingewikkelder maakt.

Gebrek aan standaardisatie — Zonder een gemeenschappelijk platform kan er sprake zijn van een proliferatie van talen, logstandaarden en monitoring.

Onduidelijke eigenaren — Naarmate er meer services worden geïntroduceerd, geldt dat ook voor het aantal teams dat deze services beheert. Na verloop van tijd wordt het lastig om te bepalen voor welke services een team nodig is en met wie contact opgenomen kan worden voor support.

afbeelding monoliet vs. microservices

Atlassian's tips voor het overstappen van een monoliet naar microservices-architectuur


Veel projecten beginnen aanvankelijk als monoliet en evolueren naar een microservicearchitectuur. Naarmate er nieuwe functies aan een monoliet worden toegevoegd, kan het omslachtig worden als veel ontwikkelaars aan één codebasis werken. Codeconflicten komen vaker voor en het risico dat updates van één functie bugs introduceren in een niet-gerelateerde functie neemt toe. Wanneer deze ongewenste patronen zich voordoen, is het misschien tijd om over te stappen naar microservices.

Hieronder volgen een aantal best practices die we van onze migratie hebben geleerd:

Stel een migratiestrategie op

We hebben veel tijd besteed aan het bepalen van de volgorde van hoe we klanten wilden overzetten. We wisten dat veel van onze klanten verschillende profielen en een andere gebruiksdynamiek zouden hebben zodra we ze hadden overgezet, dus hebben we van tevoren een planning gemaakt.

Tools

De juiste tools zijn essentieel bij een migratie van microservices. We hebben klanten niet meteen overgezet, maar eerst tools voor de migratie gemaakt en erin geïnvesteerd. We zagen dit als een marathon in plaats van een sprint. De belangrijkste tool die we hebben gemaakt was Microscope, onze eigen interne servicecatalogus om alle microservices te volgen. Elke ontwikkelaar bij Atlassian kan Microscope gebruiken om alle informatie van elke microservice binnen het bedrijf te zien.

We hebben ook een tool in Microscope gemaakt die ServiceQuest heet. Deze tool detecteert automatisch controles van code vóór productie, waaronder controles van kwaliteit, serviceontwerp, privacy, veiligheid en betrouwbaarheid.

Daarnaast hebben we een tool gemaakt voor onze technische stacks. We hebben een interne service waarmee we een nieuwe service op een bepaalde stack kunnen opzetten die onder andere vooraf gaat aan logs, monitoring en cache. Tot slot hebben we zoveel mogelijk geautomatiseerd, inclusief het migratieproces zelf. We hebben ons eigen dashboard gemaakt om alle migraties effectief in realtime te bekijken.

Stem verwachtingen af

Voor een bedrijfstransformatie is een sponsor met senior-bevoegdheid vereist die verantwoordelijk is voor de resultaten en bereid is de nodige compromissen te sluiten, zegt Sri Viswanath, CTO van Atlassian. Deze persoon moet de organisatie in staat stellen in nieuwe tools, systemen en processen te investeren om verbeteringen permanent te maken.

Bij een grote infrastructuurmigratie waarbij veel mensen betrokken zijn, wil het bedrijf meer weten over het rendement, zegt Mike Tria, Head of Platform bij Atlassian. Het is erg belangrijk om te blijven communiceren met teams van leidinggevenden, de belanghebbenden, klanten, partners en de rest van de R&D-teams. Zorg ervoor dat ze weten wat je doet, inclusief de verwachte voordelen. Zorg er daarnaast voor dat je succesvolle resultaten viert.

Leg je neer bij een culturele verschuiving

"Cultuur is erg belangrijk bij dit soort enorme projecten", zegt Viswanath. "Je wilt er zeker van zijn dat een issue elke keer wordt opgelost." Wanneer je een migratie uitvoert, omvat deze niet alleen een technische migratie maar ook een verandering onder mensen en organisaties. Atlassian stond in 2015 achter het schrijven van code die blindelings werd doorgegeven aan het operatieteam dat de code uitvoerde en implementeerde. Tegen het einde van 2017 omarmden we een DevOps-cultuur van 'jij bouwt het, jij voert het uit', waarbij alle ontwikkelaars bij Atlassian hun eigen services uitvoeren.

“Ik was vooral bezig om ervoor te zorgen dat ons SRE-team succesvolle resultaten bij dit project boekte, meer dan elk ander werk dat ik tijdens het project deed, omdat de culturele verschuiving het grootste verschil op de lange termijn was voor Atlassian als gevolg van Vertigo”, zegt Tria.

Zoek een balans tussen snelheid en vertrouwen

Vertigo had veel sneller uitgevoerd kunnen worden. Na de eerste vier maanden hadden we 80 procent van de migraties voltooid. We hadden het laatste deel van de gebruikers kunnen overzetten, ook al konden we niet garanderen dat ze de betrouwbaarheid en prestaties zouden hebben die we wilden. We hebben ons laten leiden door een van de kernwaarden van Atlassian: hou de klant niet voor de gek.

We hebben een systeem van controles opgezet met onze technici om een hoge betrouwbaarheid te behouden, en we voldeden aan de hoge normen die we wilden bereiken. Als je het de eerste keer meteen goed maakt, bespaar je tijd en problemen op de lange termijn.

Toen er nog 500 klanten waren, wat de moeilijkste klanten waren om over te zetten, gebruikten we de Jira- en Trello-integratie om elke klant aan een Atlassian-engineer toe te wijzen.

Kortom...


In januari 2016 hadden we in totaal zo'n 15 microservices. Nu hebben we er meer dan 1300. We hebben 100.000 klanten overgezet naar de cloud, daarbij een nieuw platform opgezet, onze cultuur aangepast en daardoor nieuwe tools gekregen. Onze teams zijn blijer en zelfstandiger, en we hebben een betere DevOps-cultuur.

Microservices zijn misschien niet voor iedereen weggelegd. Een oudere monoliet werkt misschien perfect, en een aanpassing is mogelijk niet de moeite waard. Naarmate organisaties echter groeien en de vraag naar hun toepassingen toeneemt, kan een microservices-architectuur waardevol zijn.

Aangezien de trend voor veel organisaties microservices met gedistribueerde architecturen is, ontwikkelde Atlassian Compass om bedrijven te helpen de complexiteit van gedistribueerde architecturen te beheren terwijl ze schalen. Compass is een uitbreidbaar ontwikkelaarsplatform dat verspreide informatie over engineeringoutput en teamsamenwerking samenbrengt op één centrale, doorzoekbare locatie.

Chandler Harris
Chandler Harris

Chandler Harris is een marketingstrateeg en schrijver voor Atlassian. Hij heeft voor meer dan 40 verschillende publicaties geschreven over onderwerpen van technologie tot wetenschap, het bedrijfsleven, financiën en o


Deel dit artikel
Volgend onderwerp

Aanbevolen artikelen

Bookmark deze resources voor meer informatie over soorten DevOps-teams of voor voortdurende updates over DevOps bij Atlassian.

Toelichting DevOps

Compass-community

illustratie obstakels overwinnen

Tutorial: Een component aanmaken

Afbeelding van kaart

Ga gratis aan de slag met Compass

Meld je aan voor onze DevOps-nieuwsbrief

Thank you for signing up