Kim Björk - En jämförelse av kompilatorstrategier för
serverless-funktioner skrivna i Kotlin

Sammanfattning

Möjligheterna att hosta mjukvara har blivit fler och mer modifierbara, från att behöva äga all hårdvara själv till att man nu kan skräddarsy en flexibel hosting-lösning i molnet. Serverless är en av de senaste lösningnarna inom hosting.

Olika leverantörer av publika molntjänster så som Amazon, Google och IBM tillhandahåller serverless-lösningar. Dock har ingen av dessa leverantörer ett officiellt stöd för det populära programmeringsspråket Kotlin. Detta kan vara en av anledningarna till att språkets prestanda i en serverless miljö är, så vitt vi vet, relativt okänd. Denna rapport har som syfte att bidra med kunskap inom just detta område.

Två olika kompilatorstrategier kommer att jämföras, en JIT (Just-In-Time) kompilator och en AOT (Ahead-Of-Time) kompilator. Den JIT-kompilator som används är Hotspot JVM. Den AOT-kompilator som används är GraalVM.

För detta arbete har en benchmark svit skapats och för varje test i denna svit skapades två serverless-funktioner. En som kompileras med JVM och en som körs som en färdig binär skapad av GraalVM. Testerna har delats upp i två kategorier. En där alla tester genomgått kall-starter, något som sker då det är första gången funktionen kallas eller då det har gått en längre tid sedan funktionen kallades senast. Den andra kategorien är då testet inte behöver gå igenom en kall-start, då har funktionen blivit kallad nyligen. Körningen kan då undvika att genomgå vissa steg som krävs vid en kall-start.

Resultatet visade att de tester som genomfördes inom kategorin kall-starter visade på att körtiden var snabbare och att minnesanvändningen var mindre för de funktioner som kompilerats av GraalVM. I den andra kategorin, då testerna inte behövde genomgå en kall-start, krävde GraalVM-funktionerna fortfarande mindre minne men JVM-funktionerna visade på en stor förbättring när det kom till exikveringstid. Dom totala körtiderna av de två olika kompilatorstrategierna var då mer jämnlika.