Dynaamisesti tyypitettyjen verkko-ohjelmistokehysten tehokkuusvertailu
Turpeinen, Matti (2023)
Turpeinen, Matti
2023
Tietojenkäsittelyopin maisteriohjelma - Master's Programme in Computer Science
Informaatioteknologian ja viestinnän tiedekunta - Faculty of Information Technology and Communication Sciences
This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Hyväksymispäivämäärä
2023-06-13
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tuni-202305226039
https://urn.fi/URN:NBN:fi:tuni-202305226039
Tiivistelmä
Verkkoteknologioiden ja -kehysten suuren käyttömäärän vuoksi olisi hyödyllistä tarkastella niiden käytön tehokkuutta REST- ja WebSocket-konteksteissa, sillä niiden käyttömäärien perusteella pienetkin erot voivat vaikuttaa suuresti eri yhteyksissä. Tutkielmassa tarkastellaan joidenkin suosittujen dynaamisesti tyypitettyjen verkkokehysten tehokkuutta, jotta voidaan löytää niiden reaalimaailman tehokkuuseroja, sekä täydentää olemassa olevia tutkimuksia.
Tutkielmassa tarkastellaan ensin verkkorajapintakehysten Express, Django, FastAPI, Flask, Laravel, sekä Ruby on Rails ja niiden ohjelmointikielten tyylejä ja malleja, jotta niistä saadaan hyvä yleiskuva. Onkin huomattavaa, että edellisten kehysten tehokkuudet ovat osittain ristiriidassa keskenään aiemmissa tutkimuksissa, jota tällä tutkielmalla pyritään osaltaan paikkaamaan. Tätä on tutkittu rakentamalla uniikit, mutta naiivit verkkopalvelimet tutkituista kehyksistä, sekä asiakasohjelma, joka pyrkii rasittamaan näitä palvelimia. Mainittu asiakasohjelma mittaa samalla eri palvelinkehysten aikoja antaen kuvaa niiden tehokkuudesta asiakkaan näkökulmasta.
Tutkielmassa kerätystä aineistosta voidaan huomata, että mitattavat kehykset tulisi jakaa erikseen täysien pinokehyksien kategoriaan, sekä muiden kehysten kategoriaan näiden tarjoa-man erilaisen ympäristön ja käyttötarkoituksen vuoksi, jonka oletetaan olennaisesti vaikuttavan tehokkuuteen. Tutkielman ja muiden tutkimusten tuloksista voidaan päätellä, että kehyksistä ilmeisesti joko FastAPI tai Flask on tehokkain ohjelmistokehys REST-kontekstissa, sekä Ruby on Rails on tehokkain täysistä pinokehyksistä. Vastaavasti WebSocket-käytössä Rails vaikuttaisi olevan nopein kaikista kehyksistä, kun taas epätäysistä kehyksistä nopein vaikuttaisi olevan FastAPI. Vaikkakin tutkielmassa huomautetaan aiheen erittäin suuresta laajuudesta, voidaan molemmille verkkoprotokollille suositella käytetyllä palvelinympäristöllä 512 limittäisen yhteyden raja-arvoa. Vastaavasti testaamisen raja-arvoksi voidaan suositella 128 limittäistä yhteyttä testa-tulla arkkitehtuurilla.
Tutkielmassa tarkastellaan ensin verkkorajapintakehysten Express, Django, FastAPI, Flask, Laravel, sekä Ruby on Rails ja niiden ohjelmointikielten tyylejä ja malleja, jotta niistä saadaan hyvä yleiskuva. Onkin huomattavaa, että edellisten kehysten tehokkuudet ovat osittain ristiriidassa keskenään aiemmissa tutkimuksissa, jota tällä tutkielmalla pyritään osaltaan paikkaamaan. Tätä on tutkittu rakentamalla uniikit, mutta naiivit verkkopalvelimet tutkituista kehyksistä, sekä asiakasohjelma, joka pyrkii rasittamaan näitä palvelimia. Mainittu asiakasohjelma mittaa samalla eri palvelinkehysten aikoja antaen kuvaa niiden tehokkuudesta asiakkaan näkökulmasta.
Tutkielmassa kerätystä aineistosta voidaan huomata, että mitattavat kehykset tulisi jakaa erikseen täysien pinokehyksien kategoriaan, sekä muiden kehysten kategoriaan näiden tarjoa-man erilaisen ympäristön ja käyttötarkoituksen vuoksi, jonka oletetaan olennaisesti vaikuttavan tehokkuuteen. Tutkielman ja muiden tutkimusten tuloksista voidaan päätellä, että kehyksistä ilmeisesti joko FastAPI tai Flask on tehokkain ohjelmistokehys REST-kontekstissa, sekä Ruby on Rails on tehokkain täysistä pinokehyksistä. Vastaavasti WebSocket-käytössä Rails vaikuttaisi olevan nopein kaikista kehyksistä, kun taas epätäysistä kehyksistä nopein vaikuttaisi olevan FastAPI. Vaikkakin tutkielmassa huomautetaan aiheen erittäin suuresta laajuudesta, voidaan molemmille verkkoprotokollille suositella käytetyllä palvelinympäristöllä 512 limittäisen yhteyden raja-arvoa. Vastaavasti testaamisen raja-arvoksi voidaan suositella 128 limittäistä yhteyttä testa-tulla arkkitehtuurilla.