Technology Radar
Modular Monolith
Een Modular Monolith is een architectuur waarbij een applicatie wordt opgedeeld in individuele modules die zoveel mogelijk ontkoppeld zijn van elkaar. De modules worden echter nog wel als een geheel gebouwd en deployed. Daarmee onderscheid het zich van een Microservice architectuur, waarbij de individuele modules (services) ook allemaal los gebouwd en deployed worden.
Omdat je de overhead van het ondersteunen van meerdere verschillende services zoals bij een Microservice architectuur niet hebt is een Modular Monolith een stuk eenvoudiger te implementeren. Tegelijkertijd heb je wel de losse koppeling tussen modules waardoor het beter onderhoudbaar en uitbreidbaar is dan een tradionele monoliet. Daarom wordt een Modular Monolith wel gezien als de "gulden middenweg" tussen die twee architecturen.
Voordelen
- Minder complex als microservices : Omdat elke module nog steeds in dezelfde monoliet leeft is de communicatie tussen verschillende modules minder complex dan bij microservices.
- Makkelijker aanpasbaar : Als de verantwoordelijkheden van modules veranderen dan is dat een stuk eenvoudiger aan te passen dan wanneer het verschillende microservices zijn
Nadelen
- Minder flexibel dan microservices : Modules zijn niet los deploybaar of schaalbaar, dus als dat nodig is dan zit er niks anders op dan om het af te splitsen als een microservice.
- Vergt discipline : Om te zorgen dat de monoliet ook daadwerkelijk modulair blijft is een zekere mate van discipline van het team nodig. Dat is bij microservices niet nodig omdat de architectuur het daar afdwingt.
Conclusie
Voor greenfield projecten raden wij aan om te beginnen met een Modular Monolith architectuur. Dit zorgt er voor dat je je applicatie eerst gaat opdelen in goed afgebakende modules, zonder dat je je druk hoeft te maken over de extra complexiteit van Microservices. Ook als je een bestaande monoliet wilt gaan refactoren is het vaak eenvoudiger om het eerst om te bouwen naar een Modular Monolith voordat je er Microservices van maakt.
Als losse deployments of individuele schaalbaarheid van belang wordt, dan is het heel eenvoudig om van een Modular Monolith alsnog een Microservice architectuur te maken. Alle onderdelen zijn namelijk al duidelijk afgebakend en ontkoppeld van elkaar.