Über unsMediaKontaktImpressum
Dominik Obermaier 15. Juni 2014

Internet der Dinge: Leichtgewichtiges Messaging

Das Internet der Dinge bzw. Internet of Things (IoT) bezeichnet die Digitalisierung von realen, physischen Objekten und deren Vernetzung über das Internet. Dazu gehören neben gängigen vernetzten Geräten wie Computer, Smartphones und Tablets vor allem Objekte, die klassischerweise nur in der "Offline-Welt" verfügbar sind, wie etwa Autos, Fernseher, Armbanduhren, Heizungen, Wetterstationen und andere Sensorik. 

© Depositphotos-com / BrianAJackson
Internet der Dinge
© Depositphotos-com / BrianAJackson

Auf der CES in Las Vegas, der weltgrößten Fachmesse für Unterhaltungselektronik, konnte man dieses Jahr sehr gut beobachten, dass der Trend ganz klar zur Vernetzung von wirklich allem geht. Ein kurioses und viel zitiertes Beispiel ist etwa die vernetzte Zahnbürste Kolibree [1], welche Auswertungen über das Zahnputzverhalten liefert und diese Daten gleich mit dem Zahnarzt teilen kann. Analysten übertreffen sich aktuell mit Aussagen bezüglich der Dimension der Vernetzung und Digitalisierung von "Dingen" in den nächsten Jahren, die meisten Prognosen pendeln sich bei 26-50 Milliarden Geräten bis 2020 ein [2][3].

Das Internet der Dinge

Es stellt sich zunächst die Frage warum gerade jetzt die Digitalisierung und Vernetzung von fast allen IT-Industriegrößen (und natürlich kleinen Firmen bzw. Startups) so stark vorangetrieben wird. Beispielsweise ist die Fokussierung auf das Internet of Things für Oracle eine Schlüsselstrategie für die Programmiersprache Java, wie man Ende 2013 auf der JavaOne verkündet hat [4].

Es gibt viele verschiedene Gründe die für die rasante Digitalisierung sprechen, in erster Linie dürfte ein Grund dafür sein, dass Hardware so günstig ist wie noch nie zuvor. Für ca. 30 Euro ist es mittlerweile möglich sich einen internetfähigen Minicomputer wie etwa einen Raspberry Pi zu kaufen und damit hat man einen komplett funktionsfähigen Minirechner, der von der Leistung so manchen älteren Desktop-PC ablösen könnte. Seit vor einigen Jahren die ersten sehr günstigen Arduino Mikrocontroller auf den Markt kamen, ist es selbst für ungeübte Laien möglich, eigene kleine Experimente mit Sensoren und Aktoren zu machen. Das begünstigte sehr stark die Entwicklung der sogenannten "Maker"-Szene. Die sog. "Maker" sind Laien, welche mit oben genannter Hardware eigene Lösungen bauen, von der einfachen Temperaturanzeige bis zu Homeautomation-Lösungen. Aus dieser Szene bildeten sich sehr viele der momentan erfolgreichen Internet of Things Startups.

Neben günstiger Hardware ist es dank der - zwar langsamen aber stetigen - Verbreitung von IPv6 technisch möglich, wirklich jedes Objekt an das Internet anzuschließen, da eine globale Eindeutigkeit gewährleistet werden kann. Die schier unglaubliche Zahl von theoretisch 2128 verfügbaren IPv6 Adressen würde es erlauben jedes Sandkorn auf der Erde mit einer IP Adresse auszustatten [5].

Schlussendlich ist es nicht nur eine Frage des technisch Möglichen, dass gerade jetzt das Zeitalter des Internet of Things anbricht, es liegt vor allem daran, dass klassische Consumer diesen hohen Grad der Vernetzung immer mehr zu wünschen scheinen. Smartphones und Tablets boomen nach wie vor und immer mehr Menschen sind es gewohnt "always online" zu sein. Für viele sog. 'Wearables' wie etwa Smartwatches und Brillen, wie etwa Google Glasses dient das Smartphone des Benutzers als Gateway ins Internet. Es ist nur eine Frage der Zeit bis diese Art von Hardware standardmäßig autark (z.B. über Mobilfunk) ohne Smartphone mit dem Internet verbunden ist.

Herausforderungen für das Internet der Dinge

Mit der unglaublich großen Menge an mit dem Internet verbundenen Geräten ergeben sich einige nicht-triviale Herausforderungen für Hersteller von Hardware und Software, die hier nur kurz beleuchtet werden, da diese Thematik selbst einen eigenen Artikel wert wäre.

  • Interoperabilität ist ein Schlüsselthema. Es gibt eine unüberschaubare Menge an proprietären und offenen Kommunikationsprotokollen. Da es unmöglich ist, alle Daten dieser Welt in eine einheitliche Struktur zu bringen, ist es hierbei von Vorteil, wenn das Kommunikationsprotokoll möglichst Daten-agnostisch ist. Langfristig werden sich nur offene Protokolle im Internet durchsetzen können. Offenheit ist zwingend erforderlich für Interoperabilität, das hat die Geschichte des Internets gezeigt.
  • Die Skalierbarkeit von (Backend-) Systemen auf potentiell Millionen von Benutzern bzw. Geräten ist ein technisch komplexes Thema, da der Betrieb solcher Systeme ein tiefes Know-How in Infrastruktur, Betriebssystemen und Software erfordert. Deshalb ist es wichtig, auf Systeme zu setzen, welche leicht, kostengünstig und bestenfalls linear skalierbar sind.
  • Die Kommunikation von Consumer Hardware über das Internet sollte in vielen Anwendungsszenarien bestenfalls an jedem Ort funktionieren, deshalb wird sehr oft Mobilfunk als eine wichtige Technologie im IoT gesehen. Dadurch ergeben sich natürlich erhebliche Herausforderungen wie etwa eine hohe Latenz, große Timeouts und eine niedrige Bandbreite.
  • Bei der Skalierung von IoT Systemen hat man auch sehr oft ein Big Data Problem, da bei Millionen von gleichzeitig verbundenen Geräten sehr große Datenmengen für die Auswertung anfallen können.

MQTT to the rescue?

Es stellt sich die Frage, welches Kommunikationsprotokoll geeignet ist um den Anforderungen des Internet of Things gerecht zu werden. Neben dem Klassiker unter den Internetprotokollen, HTTP, etabliert sich das Protokoll MQTT immer mehr zu einem IoT-Standard. Das sehr schlanke und leichtgewichtige Kommunikationsprotokoll punktet durch folgende Eigenschaften:

  • MQTT ist schlank und leichtgewichtig und sehr einfach zu implementieren.
  • MQTT implementiert das Publish / Subscribe Pattern und erlaubt damit echtes Push-Messaging zwischen allen Kommunikationsteilnehmern.
  • MQTT gewährleistet durch verschiedene Quality of Service Levels die Datenübertragung in instabilen Netzen, wie etwa Mobilfunknetzen.
  • MQTT besitzt einen minimalen Protokolloverhead.
  • MQTT ist Session-Aware. Das bedeutet, Metainformationen müssen im Idealfall nur einmal übertragen werden, da der Server die Daten nach einem Verbindungsabbruch weiterhin vorhält.
  • MQTT ist datenagnostisch. Es ist daher möglich, Daten in jedem möglichen Format zu übertragen.

All diese Eigenschaften machen MQTT zu einer sehr guten Wahl, da mittels dem Publish / Subscribe Pattern eine hohe Skalierbarkeit erreicht werden kann und mit dem minimalen Overhead und verschiedenen Quality of Service Levels können selbst instabile und teure Kommunikationskanäle wie Mobilfunknetze und Satellitenübertragung kosteneffizient genutzt werden.

Funktionsweise von MQTT

Abb. 1: MQTT Message Broker  © Dominik Obermaier
Abb. 1: MQTT Message Broker
© Dominik Obermaier

Schauen wir uns zunächst die grundlegende Funktionsweise von MQTT an einem Beispiel an. Das Herzstück einer jeden Kommunikation ist der MQTT-Broker. Wenn nun ein MQTT-Client eine Nachricht sendet (Publish), enthält diese Nachricht einen Betreff, einen sogenannten Topic. Interessierte Clients können Topics abonnieren und der MQTT Message Broker ist nun verantwortlich dafür, dass interessierte Clients die gesendete Nachricht erhalten. Der Broker verschickt die Nachricht, somit erhält der Client eine echte Push Nachricht, ohne dass er selbst mittels Polling aktiv beim Broker nach neuen Daten fragen muss.

Jeder Client kann selbst entscheiden, zu welchem Topic er publishen oder subscriben möchte. Topics sind frei wählbare Zeichenketten und können mittels eines "/" hierarchisch aufgebaut werden. Beispiele wären homeautomation/temperature und homeautomation/brightness. Der  Eltern-Topic wäre hier homeautomation und die untergeordneten Topics wären temperature und brightness. Ein Client könnte entweder ein konkretes Kind-Topic abonnieren oder mittels einer Wildcard ("#") alle Kind-Topics eines Eltern-Topics abonnieren. Beispielsweise könnte er homeautomation/# abonnieren, was zur Folge hätte, dass er alle Nachrichten für homeautomation/temperature und homeautomation/brightness zugestellt bekommen würde. Bei den Topic-Namen wird zwischen Groß- und Kleinschreibung unterschieden.

Geschichte von MQTT

Obwohl MQTT erst in den letzten Jahren stark an Popularität gewonnen hat, gibt es das Protokoll schon sehr lange. Es wurde 1999 von Andy Stanford-Clark (IBM) und Arlen Nipper (Cirrus Link) im Rahmen eines Projektes zum Monitoring von Ölpipelines entwickelt. Zu dieser Zeit mussten die Daten über Satellit übertragen werden, was extrem kostspielig war. Aus diesem Grund wurde MQTT mit den oben genannten Eigenschaften entwickelt, jedoch konnte vor 15 Jahren noch niemand ahnen, dass die gleichen Anforderungen wie in diesem Projekt auch für das kommende Internet of Things gelten würden.  Nach diesem Projekt wurde MQTT als proprietäres Protokoll bei IBM in diversen Projekten benutzt und weiterentwickelt. 2010 wurde die Spezifikation dann öffentlich freigegeben und seitdem hat sich ein großes Ökosystem um MQTT entwickelt. 2013 wurde die Standardisierung der neuesten Protokollversion, 3.1.1, bei der Standardisierungsorganisation OASIS [6] begonnen. Im Sommer 2014 wird die finale MQTT 3.1.1 Version offiziell verabschiedet werden.

Ökosystem

Seit der Offenlegung der Spezifikation haben sich verschiedene MQTT Broker am Markt etabliert, darunter der quelloffene Broker 'Mosquitto' [7], welcher sich speziell für kleinere Heimautomatisierungsprojekte und den Einsatz auf kleinen Minirechnern eignet. Für anspruchsvolle Telemetrie- und Messagingprojekte eignet sich der in Deutschland entwickelte, hochskalierbare Broker 'HiveMQ' [8], welcher für den professionellen Einsatz in Unternehmenslösungen und für den Einsatz in M2M Cloud Plattformen entwickelt wurde. Zusätzlich bieten viele Message Queuing Produkte wie etwa RabbitMQ MQTT Adapter an, jedoch meist mit einem Bruchteil des Featuresets von vollwertigen MQTT Brokern. Eine Liste aller gängigen MQTT Broker findet sich hier [9].

MQTT Client Bibliotheken sind für die meisten gängigen Programmiersprachen verfügbar. Unter dem Schirm der Eclipse Foundation gibt es das 'Paho' Projekt [10], welches offene Implementierungen in vielen Programmiersprachen wie etwa Java, C, C++, Javascript, Python, Lua und Go für den Produktiveinsatz bietet. Durch ein Grundprinzip in MQTT, nämlich der Einfachheit, gibt es neben dem Paho Projekt auch viele andere hochwertige Implementierungen, eine Liste von gängigen Clients kann hier eingesehen werden: [11] 

Features

Betrachten wir nun die wichtigsten Protokollfeatures mit denen sich MQTT von anderen Kommunikationsprotokollen abhebt:

Quality of Service Levels

Abb. 2: MQTT Quality of Service © Dominik Obermaier
Abb. 2: MQTT Quality of Service © Dominik Obermaier

Das MQTT-Protokoll definiert drei Arten von Quality of Services (QoS):

  • QoS 0: At most once delivery
  • QoS 1: At least once delivery
  • QoS 2: Exactly once delivery

Mit einem QoS Level definiert ein Client, wie wichtig es ist, dass die Nachricht auch wirklich bei den Empfängern ankommt. QoS 0 bedeutet "fire and forget". MQTT definiert keine zusätzlichen Mechanismen um sicherzustellen, dass die Nachricht angekommen ist. QoS 1 bedeutet, dass garantiert wird, dass die Nachricht mindestens einmal bei den Empfängern ankommt. QoS 2 garantiert, dass die Nachricht genau einmal bei den jeweiligen Empfängern ankommt. Je höher der QoS-Level ist, desto weniger performant wird die Übertragung, da eine zusätzliche Kommunikation zwischen den Clients und dem Broker nötig ist, um sicherzustellen, dass die Nachricht auch wirklich angekommen ist (siehe Bild 2).

LWT

MQTT Clients können beim Verbinden mit dem MQTT Broker eine Nachricht als sog. "Last Will and Testament" angeben. Falls nun der Client unerwartet die Verbindung zum MQTT Broker verliert, sendet der Broker diese Nachricht an alle Subscriber. Damit ist es möglich, interessierte Clients mit einer Nachricht zu informieren, dass ein anderer Client nicht mehr online ist. Sehr häufig wird dieser Mechanismus verwendet um schnell auf Probleme einzelner Clients reagieren zu können, da man sofort ein Feedback bekommt, falls es Störungen gibt.

Retained Messages

Ein weiteres wichtiges Konzept ist das Konzept eines "Last known good value", einer sogenannten 'Retained Message'. Stellen Sie sich folgendes Szenario vor: Ein Temperatursensor schickt alle 30 Sekunden einen neuen Wert an alle Subscriber. Ein neuer Subscriber geht online, müsste jetzt aber im schlimmsten Fall bis zu 30 Sekunden warten bis er einen initialen Wert vom Broker erhält. Falls der Publisher die Nachricht als 'Retained Message' verschickt hätte, würde der MQTT Broker jeden neu verbundenen Subscriber sofort die letzte bekannte Nachricht auf diesem Topic senden, damit er mit einem "last known good value" sofort arbeiten kann.

Integration von MQTT in bestehende Softwarelandschaften

Die Praxis zeigt, dass MQTT Broker in bestehende Softwarelandschaften eingebunden werden müssen. Angefangen von Benutzer- und Rechteverwaltung bis zum Data-Warehouse muss diese zusätzliche Technologie mit verschiedenen vorher vorhandenen Systemen kommunizieren. Deshalb ist es wichtig, bei der Evaluierung eines MQTT Brokers für eigene Projekte diese Integrierbarkeit zu berücksichtigen. Achten Sie deshalb darauf, dass der MQTT Broker Ihrer Wahl ein geeignetes Plugin System mitbringt. HiveMQ beispielsweise erlaubt die nahtlose Integration in bestehende Authentifizierungs-/Authorisierungsdatenbanken und Webservices um Lese- und Schreibrechte für verschiedene Topics einzuschränken. Dank dem Plugin System kann jedes weitere Fremdsystem sehr leicht in bestehende Systeme integriert werden und der Broker auf eigene Bedürfnisse angepasst werden.

Andere wichtige Protokolle im IoT

Neben MQTT gibt es noch andere Protokolle, die sehr oft im Kontext des Internet of Things verwendet werden. Diese würden einen eigenen Artikel rechtfertigen, deshalb seien diese nur der Vollständigkeit halber erwähnt:

  • CoAP (Constrained Application Protocol): Ein HTTP-ähnliches Protokoll, welches auf die Kommunikation zwischen Maschinen optimiert ist und das REST Pattern implementiert.
  • XMPP (Extensible Messaging and Presence Protocol): ein flexibles Kommunikationsprotokoll welches viele Features bietet, dafür jedoch sehr schwergewichtig daherkommt. Wird sehr oft für Chat Applikationen verwendet.

Fazit

Das Internet der Dinge birgt einige technische Herausforderungen. Selbst klassische Geschäftsanwendungen werden in Zukunft immer mehr von der Entwicklung im Mobile- und IoT Markt betroffen sein. Auf der Kommunikationsebene kann man durch eine kluge Protokollwahl wie etwa MQTT einige der technischen Herausforderungen ohne großen Aufwand lösen und somit auf eine stabile, offene und skalierbare Technologie setzen ohne selbst einen großen Implementierungsaufwand zu haben.

nach Oben
Autor

Dominik Obermaier

Dominik Obermaier ist Architekt des MQTT Brokers 'HiveMQ' sowie Autor und Sprecher auf Konferenzen zu Java Applikationsarchitekturen, IoT und M2M.
>> Weiterlesen
botMessage_toctoc_comments_929