Backend-sovelluskehykset suorituskykyvertailussa
Kemppi, Jori (2025)
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-2025110426992
https://urn.fi/URN:NBN:fi:amk-2025110426992
Tiivistelmä
Opinnäytetyössä tavoitteena oli vertailla neljän eri REST API -palvelinkehyksen suorituskykyä keskenään. Aikaisemman opiskelu- ja työkokemuksen perusteella palvelinkehyksiksi valikoituivat Spring Boot, ASP.NET Core, Express ja FastAPI. Valitut kehykset edustavat tasaisesti tulkattuja ja käännettyjä ohjelmointikieliä. Palvelinarkkitehtuuria käsitellään opinnäytetyösskä viiden elementin kokonaisuutena. Elementit ovat ohjelmistokehyksen itsensä lisäksi HTTP-palvelin, tietokanta, ORM ja migraatio.
Suorituskykyä mitattiin palvelinkehysten vasteaikojen perusteella. Vasteaikojen keräämiseksi suunniteltiin yksinkertainen palvelinarkkitehtuuri ja toteutettiin se jokaisella palvelinkehyksellä. Toteutukselle asetettiin tutkimuskysymyksen tueksi ja tulosten yhdenmukaisuuden varmistamiseksi kaksi rajoitusta. Suunnitelmaa ei optimoitu jos huomattiin että tietyn palvelinkehyksen kanssa jokin toinen suunnitelma olisi optimaalinen. Testeissä ei myöskään käytetty omia SQL-lauseita. Näin kyettiin arvioimaan, kuinka tehokasta SQL:ää palvelinkehysten kanssa käytetyt ORM-työkalut toteuttavat.
Lisäksi testien ajamista varten kehitettiin Python-pohjainen benchmark-ohjelma, joka loi testidataa, suoritti palvelimelle kyselyjä, ja kellotti kyselyiden käsittelyyn menevän ajan. Lisäksi testeistä ajettiin versio, jossa kellotettiin palvelimen sisällä myös eri välivaiheisiin kuluva aika.
Välivaiheet kellotettiin omana testisarjanaan, sillä välivaiheiden aikojen mittaaminen itsessään kuormittaa palvelinta ja vaikuttaa vasteaikoihin. Pohdinnassa arvioidaan kuhunkin palvelintoteutukseen valittujen teknologioiden vahvuuksia, heikkouksia ja muita erityispiirteitä. Lisäksi pohditaan, onko jollakin valituista teknologioista selkeä ja yksiselitteinen etumatka muihin teknologioiden nähden, vai ovatko ne kaikki valideja vaihtoehtoja mihin tahansa ohjelmistoprojektiin.
Työn keskeisenä tuloksena todettiin, että mikään valituista teknologioista ei ole yksiselitteisesti paras tai huonoin. Jokaisesta tunnistettiin erityispiirteitä, jotka tekevät niistä erityisen soveltuvia tiettyihin ratkaisuihin, sekä sudenkuoppia, jotka on vältettävissä huolellisella suunnittelulla.
Suorituskykyä mitattiin palvelinkehysten vasteaikojen perusteella. Vasteaikojen keräämiseksi suunniteltiin yksinkertainen palvelinarkkitehtuuri ja toteutettiin se jokaisella palvelinkehyksellä. Toteutukselle asetettiin tutkimuskysymyksen tueksi ja tulosten yhdenmukaisuuden varmistamiseksi kaksi rajoitusta. Suunnitelmaa ei optimoitu jos huomattiin että tietyn palvelinkehyksen kanssa jokin toinen suunnitelma olisi optimaalinen. Testeissä ei myöskään käytetty omia SQL-lauseita. Näin kyettiin arvioimaan, kuinka tehokasta SQL:ää palvelinkehysten kanssa käytetyt ORM-työkalut toteuttavat.
Lisäksi testien ajamista varten kehitettiin Python-pohjainen benchmark-ohjelma, joka loi testidataa, suoritti palvelimelle kyselyjä, ja kellotti kyselyiden käsittelyyn menevän ajan. Lisäksi testeistä ajettiin versio, jossa kellotettiin palvelimen sisällä myös eri välivaiheisiin kuluva aika.
Välivaiheet kellotettiin omana testisarjanaan, sillä välivaiheiden aikojen mittaaminen itsessään kuormittaa palvelinta ja vaikuttaa vasteaikoihin. Pohdinnassa arvioidaan kuhunkin palvelintoteutukseen valittujen teknologioiden vahvuuksia, heikkouksia ja muita erityispiirteitä. Lisäksi pohditaan, onko jollakin valituista teknologioista selkeä ja yksiselitteinen etumatka muihin teknologioiden nähden, vai ovatko ne kaikki valideja vaihtoehtoja mihin tahansa ohjelmistoprojektiin.
Työn keskeisenä tuloksena todettiin, että mikään valituista teknologioista ei ole yksiselitteisesti paras tai huonoin. Jokaisesta tunnistettiin erityispiirteitä, jotka tekevät niistä erityisen soveltuvia tiettyihin ratkaisuihin, sekä sudenkuoppia, jotka on vältettävissä huolellisella suunnittelulla.
