Legacy-applicaties moderniseren met containers en microservices
Voor bedrijfskritische applicaties zijn de eisen van eindgebruikers en wet- en regelgeving de afgelopen jaren hoger, maar zeker ook strenger geworden. Het upgraden of toevoegen van nieuwe features aan legacy-applicaties kan maanden en soms zelfs jaren in beslag nemen. Daarnaast is het onderhouden van legacy-applicaties een dure en onzekere aangelegenheid, vooral omdat er veel tijd en geld ‘verspild’ moet worden aan het onderhouden van een ouderwetse IT-infrastructuur. Dit resulteert in een situatie waarin een bedrijf in zijn ontwikkeling geremd wordt. Containers en microservices bieden echter uitkomst en maken het mogelijk om veel legacy-apps snel en relatief pijnloos te moderniseren. In dit blogartikel leggen we uit hoe dit in zijn werk gaat.
Meer applicaties en de opmars van de cloud
Bij het horen van de term ‘legacy’ slaat veel jonge ontwikkelaars de schrik om het hart. Ze hebben vaak weinig tot geen ervaring met applicaties of systemen die vijftien jaar of ouder zijn. Toch gebruiken organisaties in onze gedigitaliseerde maatschappij steeds meer applicaties. Veel van die applicaties leveren bedrijfskritische diensten en functionaliteiten die essentieel zijn voor bedrijfsprocessen.
Een ontwikkeling die parallel loopt aan de groei van het zakelijke applicatie-oerwoud is de snelle opmars van de cloud. Steeds meer data en applicaties worden ondergebracht in de cloud, vooral omdat clouddiensten zoals SaaS, PaaS en IaaS voor veel bedrijven voordelen bieden op het gebied van kosten en schaalbaarheid als je ze vergelijkt met IT-netwerken die on-premises draaien.
Tegelijkertijd zijn veel bedrijfsapplicaties nog gebaseerd op betrekkelijk oude technologieën. Neem bijvoorbeeld banken en overheidsorganisaties. Deze instanties gebruiken nog steeds veel applicaties die zijn geschreven in de jaren tachtig van de twintigste eeuw. En het zijn zeker geen uitzonderlijke gevallen. Uit onderzoeken van Fortune en Forbes blijkt dat zelfs een groot deel van de bedrijven uit onder andere de Fortune 500 nog steeds de nodige legacy-applicaties gebruikt. En dit brengt de nodige beveiligingsrisico’s met zich mee.
Traditionele modernisatie van legacy-applicaties
Zeker in het pre-containertijdperk kwam het moderniseren van applicaties vooral neer op grondig herstructureren. Dit betekent dat je een applicatie moet upgraden naar de nieuwste versie van de libraries en het framework. Die handeling is vervolgens vereist bij elke nieuwe versie van de applicatie in kwestie. Dit herstructureren op de traditionele manier gaat gepaard met twee problemen: het is duur, terwijl traditionele herstructurering in de praktijk ook vooral uitdraait op een onderhoudswerkzaamheid die geen extra waarde of voordelen voor de klant genereert. Het resultaat? Een groot deel van het IT-budget gaat op aan het onderhouden en managen van legacy-apps, terwijl er op hetzelfde moment veel druk van bovenaf is om een publieke, private of hybride cloud-strategie te ontwikkelen.
Containers en legacy-applicaties
Gelukkig kan het moderniseren van legacy-applicaties tegenwoordig sneller en beter, vooral door gebruik te maken van containertechnologie. Door de applicatie te laten draaien in een container werkt hij op de gewoonlijke manier in elke hostingomgeving die containers ondersteunt, zonder dat je daarbij uitgebreid hoeft te sleutelen aan de configuratie.
Containers faciliteren portabiliteit omdat ze alle variabelen en factoren herbergen die invloed hebben op de manier waarop een applicatie functioneert. Externe factoren, zoals het besturingssysteem (OS), hebben in de container geen effect op de applicatie. Het resultaat is dat je bij het verplaatsen van een applicatie naar een nieuwe hostingomgeving, bijvoorbeeld een nieuw cloudplatform, alles meeneemt wat een applicatie nodig heeft om te kunnen draaien. Containers nemen dus de noodzaak weg om een applicatie helemaal opnieuw te configureren als je die app verplaatst naar een andere IT-omgeving. De ontwikkelaar kan vertrouwen op de scripts die zijn ingebouwd in de container, ongeacht de omgeving waarbinnen de app draait.
Containers en orkestratietools als Kubernetes voorzien een ontwikkelomgeving tevens van continuous integration (CI) en continuous delivery (CD). Het snel en efficiënt gebruiksklaar maken van software zorgt ervoor dat de eindgebruiker niet langer maandenlang hoeft te wachten op een releasedatum om nieuwe features te kunnen gebruiken. Bovendien zet je updates sneller en vaker live.
Opdelen in kleinere stukjes
Toch hebben ook containers hun beperkingen als het aankomt op het moderniseren en gebruiksvriendelijker maken van legacy-applicaties. Het grootste probleem is dat de meeste legacy-applicaties niet geschreven zijn met containers in het achterhoofd. En de huidige structuur van een applicatie verandert natuurlijk niet als bij toverslag wanneer je zo’n applicatie in een container op een cloudplatform zet.
Je zou daarom kunnen overwegen om een legacy-applicatie uit te rusten met nieuwe functionaliteiten die de app gemakkelijker schaalbaar en beter geschikt voor een cloudomgeving maken. Niet dus. De kans is namelijk groot dat het toevoegen van functionaliteiten leidt tot nog meer code en dus een averechts effect heeft op de stabiliteit en gebruiksvriendelijkheid van de applicatie.
Probeer in plaats daarvan stukjes van de legacy-applicatie af te hakken door deze op te delen in kleinere, afzonderlijke en opzichzelfstaande microservices. Kijk daarbij vooral naar diensten binnen de applicatie die geschikt zijn als microservice. In de praktijk betekent dit dat zo’n dienst gemakkelijk toegankelijk is via een API. Het opdelen van legacy-applicaties in microservices is een non-invasieve manier om functionaliteiten te verplaatsen naar nieuwe, sterk gemoderniseerde componenten.
Gemakkelijker moderniseren met containers en microservices
Zijn alle legacy-applicaties dus goed te migreren naar containers? Nee, maar door op een goede en slimme manier gebruik te maken van containertechnologie en microservices, hoeft het moderniseren van logge en verouderde legacy-applicaties niet langer een hoofdpijndossier te zijn. Door de apps onder te brengen in containers en de structuur op te knippen in afzonderlijke microservices, worden applicaties gebruiksvriendelijker en elastischer. Die toegenomen elasticiteit maakt legacy-applicaties ook toekomstbestendig omdat ze beter voorbereid zijn op verbeteringen en wijzigingen van de IT-infrastructuur waarbinnen ze draaien.