MQTT’s Capabilities in an Unstable Network
Luomala, Aleksi (2018)
Luomala, Aleksi
Kajaanin ammattikorkeakoulu
2018
All rights reserved
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-2018091415155
https://urn.fi/URN:NBN:fi:amk-2018091415155
Tiivistelmä
Kyseisen insinöörityön toimeksiantaja oli Kalmar Cargotec. Yritys tarjoaa rahtisatamavälineitä, -toteutuksia sekä automatisoituja rahtisataman automatisointiratkaisuja. Työn tehtävänä oli selvit-tää MQTT-välittäjän soveltuvuutta yrityksen edeltävän viestintälaitteiston korvaajaksi. Tämä tuli selvittää testaamalla MQTT:n toimintaa simuloidussa, epäluotettavassa verkossa. Työssä tuli selvittää, onko MQTT:n oletuspersistointi riittävä takaamaan yhteyden palautuksen ja luotettavan viestien välittämisen tilanteissa, joissa yhteys voi katketa. Oli myös selvittävä, onko oletuspersistoinnin suorituskyky riittävä. Lisäksi haluttiin testattavan eri asiakasohjelman ja MQTT-välittäjän konfiguraatioiden vaikutusta suorituskykyyn. Suorituskyky ja persistoinnin toiminta eri QoS-luokilla tuli testata. QoS 0-luokka jätettiin pois testauksesta, sillä sen tärkeys yrityksen tarkoitusperiin koettiin olevan marginaalinen.
Työtä varten tuli asentaa ja konfiguroida MQTT-välittäjä, koodata asiakasohjelma, jonka avulla viestejä voitaisiin lähettää ja vastaanottaa MQTT-välittäjältä. Asiakasohjelman ja MQTT-välittäjän väliin tuli tehdä välityspalvelin, jonka avulla epäluotettavan verkon simulointi toteutettiin. Sen avulla viestien läpivienti pystyttiin ajastetusti estämään ja viestien toimittamista pystyttiin tutkimaan. Työn kannalta oli tärkeä tutkia tilannetta, jossa katkos ja viestien katoaminen tapahtui niin lyhyellä aikavälillä, ettei MQTT-välittäjä tai asiakasohjelma aikakatkaissut yhteyttä. Lisäksi tuli tutkia toimintaa tilanteessa, jossa yhteyden katkaisu tapahtui niin pitkällä aikavälillä, että MQTT-välittäjä sekä asiakasohjelma pystyivät itse toteamaan yhteyden olevan poikki.
Testit osoittivat, ettei asetusten muuttaminen merkittävästi vaikuttanut MQTT:n kykyyn palautua odottamattomasta yhteyden katkeamisesta. Viestien toimituksen nopeuden testaamisessa merkittävimmiksi asetuksiksi nousivat QoS-asetuksen sekä pysyvyysasetuksen muuttaminen. QoS-luokan muutoksella 5000 viestin toimitusnopeus saatiin 5,5 sekunnista 3,0 sekuntiin. Pysyvyyden aktivoiminen aiheutti toimitusajan nousemisen 27 sekuntiin. Vaikutukset olivat erittäin merkittäviä. Automaattinen tallennus ja pysyvyys yhdessä aiheuttivat testiajojen epäonnistumisen useita kertoja.
Yleisesti ottaen MQTT vaikuttaa sopivalta sen tarkoitettuun rooliin, vaikkakin pysyvyys ei tarjon-nut odotettua suorituskykyä. On todennäköistä, että otettaessa MQTT käyttöön joudutaan pysyvyys tuottamaan itse, paremman suorituskyvyn takaamiseksi. Pysyvyyden ja automaattisen tallennuksen välinen toimimattomuus tuskin nousisi esteeksi.
Työn kaikki koodi tehtiin C:llä tai C++:lla. Kaikki koodi, joka ei ollut MQTT Paho C-asiakasohjelmaan suoraan yhteydessä, pyrittiin toteuttamaan C++:lla. Koodausympäristönä toimi Microsoft Visual Studio 2017. MQTT-välittäjänä työssä toimi Mosquitton toteutus. Työ toteutettiin Microsoft-käyttöjärjestelmälle.
Työtä varten tuli asentaa ja konfiguroida MQTT-välittäjä, koodata asiakasohjelma, jonka avulla viestejä voitaisiin lähettää ja vastaanottaa MQTT-välittäjältä. Asiakasohjelman ja MQTT-välittäjän väliin tuli tehdä välityspalvelin, jonka avulla epäluotettavan verkon simulointi toteutettiin. Sen avulla viestien läpivienti pystyttiin ajastetusti estämään ja viestien toimittamista pystyttiin tutkimaan. Työn kannalta oli tärkeä tutkia tilannetta, jossa katkos ja viestien katoaminen tapahtui niin lyhyellä aikavälillä, ettei MQTT-välittäjä tai asiakasohjelma aikakatkaissut yhteyttä. Lisäksi tuli tutkia toimintaa tilanteessa, jossa yhteyden katkaisu tapahtui niin pitkällä aikavälillä, että MQTT-välittäjä sekä asiakasohjelma pystyivät itse toteamaan yhteyden olevan poikki.
Testit osoittivat, ettei asetusten muuttaminen merkittävästi vaikuttanut MQTT:n kykyyn palautua odottamattomasta yhteyden katkeamisesta. Viestien toimituksen nopeuden testaamisessa merkittävimmiksi asetuksiksi nousivat QoS-asetuksen sekä pysyvyysasetuksen muuttaminen. QoS-luokan muutoksella 5000 viestin toimitusnopeus saatiin 5,5 sekunnista 3,0 sekuntiin. Pysyvyyden aktivoiminen aiheutti toimitusajan nousemisen 27 sekuntiin. Vaikutukset olivat erittäin merkittäviä. Automaattinen tallennus ja pysyvyys yhdessä aiheuttivat testiajojen epäonnistumisen useita kertoja.
Yleisesti ottaen MQTT vaikuttaa sopivalta sen tarkoitettuun rooliin, vaikkakin pysyvyys ei tarjon-nut odotettua suorituskykyä. On todennäköistä, että otettaessa MQTT käyttöön joudutaan pysyvyys tuottamaan itse, paremman suorituskyvyn takaamiseksi. Pysyvyyden ja automaattisen tallennuksen välinen toimimattomuus tuskin nousisi esteeksi.
Työn kaikki koodi tehtiin C:llä tai C++:lla. Kaikki koodi, joka ei ollut MQTT Paho C-asiakasohjelmaan suoraan yhteydessä, pyrittiin toteuttamaan C++:lla. Koodausympäristönä toimi Microsoft Visual Studio 2017. MQTT-välittäjänä työssä toimi Mosquitton toteutus. Työ toteutettiin Microsoft-käyttöjärjestelmälle.