Ga direct naar inhoud
'maak serverless java supersonisch met lambda en quarkus'

'maak serverless java supersonisch met lambda en quarkus'

Michael Strydom & Julian Exenberger

Experienced professionals

Architecture

Software Engineering

Weinig developers staan te springen als ze Java serverless moeten gebruiken. Het heeft de reputatie traag te zijn. Solution architects Michael Strydom en Julian Exenberger vertellen je hier dat dit oud nieuws is. Met de juiste optimalisaties werkt Java ook serverless weer soepel – bijvoorbeeld op Lambda. En als kers op de taart bouw je met Quarkus in een mum van tijd de snelste serverless Java-apps.

Waar denk je aan als je Alfa Romeo hoort? Waarschijnlijk aan roest. Een vervelend stigma dat op het automerk rust sinds de jaren zeventig toen het inderdaad kort met roestproblemen kampte. Met zo’n stigma kampt ook Java. En het is waar, wil je serverless werken met Java dan houdt het nieuwere talen als JavaScript en Python niet bij. Een echte beperking voor Java developers in de serverless space. Jammer dat dit beeld nu overheerst, want Java is in de kern ontzettend stabiel, flexibel en in staat zich te evolueren. Als je het maar een beetje liefde geeft.

Kies serverless

Dat Java het minder goed doet op serverless platforms heeft vooral te maken met de langzame start-up. Ideaal voor traditionele client/server computing, waarbij een enkel Java Server-programma duizenden verzoeken voor gebruikers uitvoerde en de start-up zo veel mogelijk werd geoptimaliseerd. Hierdoor komt Java traag op gang, maar draait het daarna extreem snel. Serverless daarentegen draait potentieel duizenden standalone Java-programma’s met elk een eigen gebruikersverzoek. Daar merk je bij elk verzoek aan het serverless platform de trage opstarttijd van Java.

Benut de lifecycle

Die traagheid van Java binnen een serverless platform kan je met wat aandacht gelukkig prima oplossen. Hoe precies, vertellen we je aan de hand van AWS Lambda. Op dat platform lopen de verschillende fasen van de lifecycle op verschillende snelheden. Door te veranderen hoe Java samenwerkt met de serverless lifecycle, realiseer je – in sommige gevallen – een dramatische prestatieboost. Hoe? Door de verschillende snelheden van de lifecycle te benutten om de algemene prestaties te verbeteren.

Stop met Spring

En je kan verder optimaliseren door Java-apps anders te schrijven. We hebben serverless namelijk niet altijd de overhead nodig van populaire ontwikkelingsframeworks, zoals Spring. Die helpen bij het beheer van complexe programma’s, maar verhogen ook het resourceverbruik en de start-upsnelheid van Java-programma’s. En de vele Spring-alternatieven die er dankzij Android zijn, maken efficiëntere en eenvoudigere programma’s mogelijk. Denk aan het Dagger framework van Google, dat conceptueel vergelijkbaar is met Spring, maar veel beter werkt voor kleinere applicaties en stukken sneller is.

Blijf trouw aan Java

Quarkus is zo’n geschikt framework om snel serverless Java-apps te bouwen. Iets waar Java tot voor kort het onderspit in dolf. Waarom? Java kon Kubernetes en de opkomst van clusterbeheer met lichtgewicht applicaties niet bijhouden. Nieuwe scripttalen boden bovendien meer mogelijkheden voor server- en clientside ontwikkelingen. En single threaded apps zoals Node.JS waren geen probleem meer, omdat Kubernetes meerdere van deze single threaded toepassingen beheert. Multi-threaded applicaties zoals Java kregen hierdoor een klap.

Java ondervond nog meer problemen op Kubernetes. Vooral de grootte van de artefacten na het bouwen en de tijd die het kostte om apps uit te rollen. En vergeet niet het beroemde garbage collection-probleem, waarbij het onmogelijk was om een garbage collection uit te voeren op het moment van jouw voorkeur. En wanneer dat toch lukte, hielp het weinig. Als gevolg verdween Java bijna van het toneel. Pas bij de latere patchversie van Java 8 (na patch 153) werden de meeste problemen met de Java-Kubernetes-integratie opgelost. Op één ding na: de grootte van deployment artefacten bleef groot.

Herontdek Java met Quarkus

Daar vond Red Hat in 2019 een antwoord op met hun opensourceplatform Quarkus. Red Hat wilde Java klein en licht maken en zorgen dat Java-development van serverless apps leuk en gemakkelijk werd. Daarom heeft Quarkus uitgebreide libraries en standaarden en combineert het imperatief en reactief coderen. Zo lost Red Hat onder meer het probleem van Java’s grootte op.

Quarkus maak je je ook makkelijk eigen. Zo configureer je het – zonder te overdrijven – in een dag. Ik, Michael, gebruik Quarkus nu voor integraties en rapportages om mijn team te ontlasten. Ik bouw met Quarkus in een mum van tijd Springboot-API’s, Apache Camel-integraties en OpenTelemetry. Helemaal sterk is dat je geen keuzestress hebt bij Quarkus; in plaats van duizend manieren om code te schrijven is gekozen voor de meest nuttige manier.

En dan is Quarkus ook nog eens open source, en wordt het platform continu verbeterd door haar gemeenschap.

We kunnen dus officieel zeggen: de roestproblemen van Java zijn verleden tijd. Java is nu ook serverless keihard uit de startblokken. Spread the word.

Over Julian

Julian is software architect bij Capgemini met een passie voor technologie. Naast Java heeft hij in alles gewerkt van VB tot Objective-C tot Ruby-on-Rails. De laatste tijd is hij uitgegroeid tot een behoorlijk Kotlin-afficiando, cloud-native ontwikkelingsveteraan en Lean-enthousiasteling. Als hij niet achter een computer zit, kan je hem zien lezen, schrijven of houtbewerken of gewoon tijd doorbrengen met zijn gezin.

Over Michael

Ook Michael is software architect bij Capgemini. Het grootste deel van zijn ervaring ligt in systeemintegratie, SOA-patronen en natuurlijk Java. In zijn vrije tijd experimenteert hij onder andere met de cloud, IOT, automatisering, robotica en Raspberry Pi. Hij heeft een voorliefde voor alles wat met back-end te maken heeft en laat het front-end werk over aan degenen die van selfies en man-buns houden.