Wat is een monolitische applicatie?

Waar bestaat een moderne applicatie uit die via het internet wordt geserveerd? Waar moet een developer allemaal rekening mee houden? En hoe zitten die relaties in elkaar? Ik onderzoek het in een aantal blogposts. Vandaag: monolitische applicaties.

Ontwikkelteams staan voor vele keuzes in de ontwikkeling en het beheer van de applicaties in het huidige landschap. Sommige disciplines, denk- en werkwijzen zijn gemeengoed geworden, anderen zijn onderhevig aan meningsverschillen en interpretaties – zoals de definitie van een ‘moderne applicatie’. Want wat is dat nou precies? Om die vraag te beantwoorden wil ik eerst een andere tackelen: wat is een monolitische applicatie?

Wat is een monolithische applicatie? 

De definitie van de moderne applicatie wordt vaak in een adem genoemd met een monolitische applicatie. Een monolithische applicatie is een ‘single-tiered software application’ (verder: een applicatie) waar verschillende componenten gecombineerd worden tot 1 programma – bijvoorbeeld een website. Componenten kunnen bestaan uit autorisatie, presentatie (http-verzoeken), businesslogica, een database-laag, applicatie-integratie (bijv. met een API) of notificatie zijn. 

Een webshop als monolotische applicatie

Een voorbeeld van een monolitische applicatie in de praktijk, bijvoorbeeld een webshop. De applicatie moet de klant kunnen authenticeren, orders kunnen plaatsen, de product inventaris tonen en betalingen- en gegevens voor verzending verwerken. Alle processen, modules en diensten worden gebouwd als een applicatie voor alle platforms (desktop, mobiel en tablet) waarbij een (relationeel) databasesysteem (DBMS) als basis wordt gebruikt. 

Monolitisch heeft een aantal voordelen. In het begin van de ontwikkeling van een monolitisch systeem is het gemakkelijk om te ontwikkelen en te testen. Voor het testen kan een ontwikkelaar bijvoorbeeld de UI testen met Selenium (?). Ander voordeel is bijvoorbeeld is dat de de bestanden van een applicatie vrij eenvoudig te kopiëren zijn naar en server en dat het het horizontaal schalen van meerdere kopieën achter een load balancer kan gebeuren. 

De nadelen van monolitische applicaties

Naarmate een monolithische applicatie groeit ontstaan er problemen.

Zo wordt het onderhoud complexer als de applicatie te groot is, waardoor het moeilijker wordt om snel en foutloos wijzigingen door te voeren. De grootte kan daarnaast problemen veroorzaken op het vlak van laadtijden, de applicatie moet ook elke keer in zijn volledigheid opnieuw opgeleverd worden.

Verdere problemen zijn bijvoorbeeld de betrouwbaarheid – als er een bug in een module zit kan dit mogelijk een proces verstoren die cruciaal zijn voor de continuïteit van het systeem.

Een ander belangrijk nadeel is dat monolithische applicaties moeilijk om kunnen gaan met nieuwere technologie. Komt er bijvoorbeeld een nieuwe versie van een programmeertaal of framework dan kan dit impact hebben op de gehele applicatie.

Kortom: het kan een vrij log systeem worden waarbij innovaties simpelweg niet snel genoeg doorgevoerd kunnen worden.