Performance characteristics of current microservice frameworks
Kesa, Heikki (2021)
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-2021061415972
https://urn.fi/URN:NBN:fi:amk-2021061415972
Tiivistelmä
Tämä opinnäytetyö vertailee mikropalvelujen kehittämiseen soveltuvien ohjelmistokehysten suorituskykyä. Vastaavia aikaisempia tutkimuksia ei löytynyt, mutta on olemassa mikropalvelujen kehittämistä koskevia tutkimuksia jotka sivuavat suorituskykyä.
Tulokset kerättiin luomalla kaksi sovellusta kullekkin tutkimuksessa käytetylle kehykselle, jotka olivat Nest, Spring ja Micro. Ensimmäinen sovellus luotiin mittaamaan kehysten aiheuttamaa lisäkuormaa, palauttamalla vain merkkijonon ”Hello World!”. Toinen sovellus luotiin paremmin mallintamaan tosielämän käyttökohdetta, tässä sovellus valtuuttaa pyynnön pääsyoikeuden ja palauttaa listan korkeakoulujen perustietoja halutun valtion perusteella. Jokaisen sovelluksen suorituskyky mitattiin lähettämällä kutsuja sovelluksen ulkoiseen rajapintaan rasituskoetyökalulla. Rasituskokeesta taltioitiin pyyntöjen vasteajat sekä sovelluksen muistin- ja prosessorinkäyttö. Kaksi erilaista rasituskoetta suoritettiin: toinen pienemmällä pyyntöjen määrällä ja toinen suurella määrällä samanaikaisia pyyntöjä joiden välissä oli lyhyempi tauko. Jokainen koe suoritettiin kolme kertaa sovellusta kohti ja tulosten keskiarvoja käytettiin lopullisia tuloksia koostettaessa.
Selkeästi tehokkain kehys oli Nest, olemalla nopein kaikissa kokeissa. Toiseksi sijoittui Spring ja viimeiseki jäi Micro. Springin pyyntöjen vasteaikojen mediaani oli lähellä Nestiä, mutta sen ensimmäisten vastausten nopeus oli joukon hitain, joka oli seurausta Java Virtual Machine -virtuaalikoneen hitaasta käynnistymisestä. Micron vasteaikojen mediaani oli kaikissa testeissä hitain. Sovellusten resurssikäyttö osoitti Nestin käyttävän vähiten muistia sekä prosessoritehoa, vaikka se tuotti nopeimpia vastauksia. Micro käytti eniten prosessoritehoa kaikissa kokeissa, Spring taas käytti joukon eniten muistia kaikissa paitsi yhdessä kokeessa. This thesis compares performance of microservice development frameworks. There were no studies found that directly compare the performance of microservice frameworks, although the subject is covered to a degree in studies that focus on other aspects of microservice development.
The results were gathered by creating two applications with each framework chosen for this study, which were Nest, Spring and Micro. First application was created to measure the overhead the framework adds, by only returning string “Hello World!” upon requests. Second was a real-life simulating application which authorizes requests and returns list of basic info about universities for the requested country. Each applications performance was then measured by firing requests to the application endpoints using stress testing tool. Request response times were recorded, together with memory and CPU usage values. Two types of tests were executed: one with a low amount of requests and another with high amount of simultaneous requests with shorter time in between. Each test was executed three times per application and the average values were used for the final results.
Nest was by far the fastest framework across all tests, followed by Spring and Micro. Springs median response times were close to Nests but its initial responses were the slowest of all three, attributed to the Java Virtual Machines slow warm up time. Micros median response times were consistently slowest. Resource utilization results showed Nest using the least amount of memory and CPU while producing the best results. Micro used the most CPU in all tests and Spring required the highest amount of memory in all but one test.
Tulokset kerättiin luomalla kaksi sovellusta kullekkin tutkimuksessa käytetylle kehykselle, jotka olivat Nest, Spring ja Micro. Ensimmäinen sovellus luotiin mittaamaan kehysten aiheuttamaa lisäkuormaa, palauttamalla vain merkkijonon ”Hello World!”. Toinen sovellus luotiin paremmin mallintamaan tosielämän käyttökohdetta, tässä sovellus valtuuttaa pyynnön pääsyoikeuden ja palauttaa listan korkeakoulujen perustietoja halutun valtion perusteella. Jokaisen sovelluksen suorituskyky mitattiin lähettämällä kutsuja sovelluksen ulkoiseen rajapintaan rasituskoetyökalulla. Rasituskokeesta taltioitiin pyyntöjen vasteajat sekä sovelluksen muistin- ja prosessorinkäyttö. Kaksi erilaista rasituskoetta suoritettiin: toinen pienemmällä pyyntöjen määrällä ja toinen suurella määrällä samanaikaisia pyyntöjä joiden välissä oli lyhyempi tauko. Jokainen koe suoritettiin kolme kertaa sovellusta kohti ja tulosten keskiarvoja käytettiin lopullisia tuloksia koostettaessa.
Selkeästi tehokkain kehys oli Nest, olemalla nopein kaikissa kokeissa. Toiseksi sijoittui Spring ja viimeiseki jäi Micro. Springin pyyntöjen vasteaikojen mediaani oli lähellä Nestiä, mutta sen ensimmäisten vastausten nopeus oli joukon hitain, joka oli seurausta Java Virtual Machine -virtuaalikoneen hitaasta käynnistymisestä. Micron vasteaikojen mediaani oli kaikissa testeissä hitain. Sovellusten resurssikäyttö osoitti Nestin käyttävän vähiten muistia sekä prosessoritehoa, vaikka se tuotti nopeimpia vastauksia. Micro käytti eniten prosessoritehoa kaikissa kokeissa, Spring taas käytti joukon eniten muistia kaikissa paitsi yhdessä kokeessa.
The results were gathered by creating two applications with each framework chosen for this study, which were Nest, Spring and Micro. First application was created to measure the overhead the framework adds, by only returning string “Hello World!” upon requests. Second was a real-life simulating application which authorizes requests and returns list of basic info about universities for the requested country. Each applications performance was then measured by firing requests to the application endpoints using stress testing tool. Request response times were recorded, together with memory and CPU usage values. Two types of tests were executed: one with a low amount of requests and another with high amount of simultaneous requests with shorter time in between. Each test was executed three times per application and the average values were used for the final results.
Nest was by far the fastest framework across all tests, followed by Spring and Micro. Springs median response times were close to Nests but its initial responses were the slowest of all three, attributed to the Java Virtual Machines slow warm up time. Micros median response times were consistently slowest. Resource utilization results showed Nest using the least amount of memory and CPU while producing the best results. Micro used the most CPU in all tests and Spring required the highest amount of memory in all but one test.