Streaming

Von: Thomas Bayer
Datum: 18. Sept. 2018

Streaming bezeichnet das Versenden von mehreren Teilen anstatt eines großen Datensatzes oder einer Datei. Es wird zwischen dem Streaming großer Daten und dem zeitversetzten Übertragen unterschieden.

7.1 Streaming von großen Datenmengen

Beim Streaming großer Daten verarbeitet der Empfänger bereits einen Teil der Daten, während der Sender noch dabei ist Teile zu übertragen. Da die Daten in viele kleinere Pakete aufgeteilt werden, können Daten übertragen werden, die wesentlich größer sind als der zur Verfügung stehende Hauptspeicher.

REST, GraphQL und gRPC unterstützen das Streaming von großen Daten. REST und GraphQL basieren auf HTTP-1 und verwenden dafür HTTP-Chunking. gRPC verwendet HTTP-2, welches asynchrone und nicht blockierende Kommunikation unterstützt.

7.2 Zeitversetztes Streaming

Zeitversetztes Streaming ist hilfreich, wenn z.B. der Client ständig das aktuelle Wetter benötigt. Ohne Streaming könnte der Client in kurzen Abständen ständig dieselbe Abfrage abschicken, damit ihm keine Wetteränderung entgeht.

Ohne Streaming

Abbildung : Ohne Streaming, Client fragt ständig nach dem Wetter

Beim Streaming erhält der Client auf eine Anfrage nicht nur eine sofortige Antwort. Seine Anfrage wird stehen gelassen und der Server kann jederzeit über den Stream eine Nachricht schicken, z.B. immer dann, wenn es eine Veränderung beim Wetter gibt. Wenn kein Interesse mehr an den Nachrichten besteht, kann der Client dem Stream schließen.

Mit Streaming

Abbildung : Client wird bei Bedarf über den Stream informiert.

Dieses Streaming widerspricht der zustandslosen Übertragung von REST und wird von REST nicht unterstützt. Nachdem ein REST-Client eine Antwort erhalten hat gibt es für den Server keine Möglichkeit Daten auf eigene Initiative an den Client zu schicken.

GraphQL unterstützt das Server-Client Streaming und gRPC unterstützt sowohl Server-Client als auch Client-Server Streaming.

REST selbst unterstützt kein zeitversetztes Streaming. Es gibt aber Möglichkeiten ein Streaming mit HTTP nachzubauen. Beispielsweise durch Long-Polling, bei dem der Server mit der Antwort einfach wartet, bis ihm irgendwann etwas einfällt. Oder durch eine Ergänzung einer Schnittstelle mit den WebSockets.