Comparison of data-communication technologies for a Real ...

57
HTWK Leipzig Bachelorarbeit Comparison of data-communication technologies for a Real-World Business Application Vorgelegt von: Bastian Treitz Matrikelnummer: 69669 Erstbetreuer: Prof. Dr. Robert M¨ uller Zweitbetreuer: Martin Pfeiffer Fakult¨ at Informatik und Medien Studiengang Medieninformatik 11. November 2020

Transcript of Comparison of data-communication technologies for a Real ...

HTWK Leipzig

Bachelorarbeit

Comparison of data-communicationtechnologies for a Real-World Business

Application

Vorgelegt von:Bastian Treitz

Matrikelnummer:69669

Erstbetreuer:Prof. Dr. Robert Muller

Zweitbetreuer:Martin Pfeiffer

Fakultat Informatik und MedienStudiengang Medieninformatik

11. November 2020

Kurzfassung

In einer Client/Server-Netzwerkarchitektur wird die Kommunikation der Kompo-

nenten durch Protokolle geregelt. Die Wahl des Protokolls hat dabei Einfluss auf die

Verzogerungszeiten im Datentransfer.

Diese Arbeit hat ausgewahlte Protokolle und Technologien fur A12 Business-Anwen-

dungen bezuglich des Aspekts der Performance getestet. Der Fokus lag auf HT-

TP/2, HTTP Long Polling, WebSockets und der AMQP-Implementierung Rab-

bitMQ. Um dies zu realisieren wurde eine Applikation entwickelt, die alle Anwen-

dungsfalle fur jede der Technologien implementiert. Die erstellten Testszenarien wur-

den daraufhin ausgefuhrt und die Ergebnisse zeigen, welche Technologien in welchen

Anwendungsfallen gut oder schlecht geeignet sind.

HTTP/2 erzielt im Vergleich gute Ergebnisse, wenn der vorliegende Anwendungs-

fall dem Request/Response-Muster entspricht. Wenn es sich zudem um große zu

sendende Objekte handelt, kann HTTP/2 Verzogerungseinsparungen von mindes-

tens 22% gegenuber den anderen getesteten Technologien vorweisen. Long Polling

erweist sich fur A12 Business-Anwendungen mit sich standig aktualisierenden Live-

Daten als keine gute Option. WebSockets hingegen stechen in diesem Fall durch

eine sehr geringe Latenz hervor, die insbesondere bei einer hoheren Anzahl von Cli-

ents uberzeugt. Hier existieren Anwendungsfalle, bei denen der WebSocket 63 %

schneller ist als die Alternativen. RabbitMQ uberzeugt durch gute Resultate in ver-

schiedensten Anwendungsfallen. Bei Live-Daten fur einen Client kann die Message

Queue mit den Latenzen des WebSockets mithalten. Erst eine Erhohung der Anzahl

der Clients bewirkt eine großer werdende Abweichung. Zudem uberzeugt RabbitMQ

mit geringen Zeiten in der Neu-Verbindung und fur A12 Business-Anwendungen

mit Request/Response-Muster. In Letzterem existieren Anwendungsfalle bei denen

RabbitMQ 10 % schneller ist als HTTP/2.

II

Inhaltsverzeichnis

1 Einfuhrung 11.1 Zielsetzung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2 Gliederung der Arbeit . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2 Grundlagen 42.1 A12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.2 HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.2.1 HTTP/2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.2.2 Long Polling . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.3 WebSocket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.4 Message Queue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.5 Apache JMeter™ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.6 Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

3 Anforderungsanalyse 113.1 Anwendungsfalle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

3.1.1 Anfrage unabhangiger Objekte . . . . . . . . . . . . . . . . . 113.1.2 Informationsabhangigkeit . . . . . . . . . . . . . . . . . . . . . 123.1.3 Aktualisierende Daten . . . . . . . . . . . . . . . . . . . . . . 133.1.4 Mehrere Clients . . . . . . . . . . . . . . . . . . . . . . . . . . 143.1.5 Neu-Verbindung . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3.2 Nicht-funktionale Anforderungen . . . . . . . . . . . . . . . . . . . . 163.2.1 Anpassbarkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . 163.2.2 Erweiterbarkeit . . . . . . . . . . . . . . . . . . . . . . . . . . 163.2.3 Benutzerfreundlichkeit . . . . . . . . . . . . . . . . . . . . . . 163.2.4 Reproduzierbarkeit . . . . . . . . . . . . . . . . . . . . . . . . 17

4 Implementierung 184.1 Basis-Applikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

4.1.1 HTTP/2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184.1.2 WebSocket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194.1.3 RabbitMQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

4.2 Umsetzung der Anwendungsfalle . . . . . . . . . . . . . . . . . . . . . 224.2.1 Anfrage unabhangiger Objekte . . . . . . . . . . . . . . . . . 234.2.2 Informationsabhangigkeit . . . . . . . . . . . . . . . . . . . . . 234.2.3 Aktualisierende Daten . . . . . . . . . . . . . . . . . . . . . . 244.2.4 Mehrere Clients . . . . . . . . . . . . . . . . . . . . . . . . . . 254.2.5 Neu-Verbindung . . . . . . . . . . . . . . . . . . . . . . . . . . 26

III

4.3 Messung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264.3.1 Umgebung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274.3.2 Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274.3.3 Limitierungen . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

5 Auswertung 295.1 Anfrage unabhangiger Objekte . . . . . . . . . . . . . . . . . . . . . . 295.2 Informationsabhangigkeit . . . . . . . . . . . . . . . . . . . . . . . . . 315.3 Aktualisierende Daten . . . . . . . . . . . . . . . . . . . . . . . . . . 335.4 Mehrere Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355.5 Neu-Verbindung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

6 Fazit 386.1 HTTP/2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386.2 WebSocket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386.3 RabbitMQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

Quellenverzeichnis 41

A Anhang 44A.1 Testdurchfuhrung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44A.2 Messergebnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

IV

Abbildungsverzeichnis

2.1 HTTP Request/Response Muster uber TCP . . . . . . . . . . . . . . 42.2 Vergleich des HTTP Request/Response Musters ohne und mit Mul-

tiplexing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.3 HTTP Long Polling . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.4 Beispiel WebSocket Handshake eines Clients und eines Servers mit

Upgrade- und Connection-Header . . . . . . . . . . . . . . . . . . . . 72.5 RabbitMQ Pub/Sub System . . . . . . . . . . . . . . . . . . . . . . . 92.6 Simpler Beispiel-Testfall in JMeter . . . . . . . . . . . . . . . . . . . 9

3.1 Anwendungsfall 1 - Use-Case Diagramm . . . . . . . . . . . . . . . . 123.2 Anwendungsfall 2 - Use-Case Diagramm . . . . . . . . . . . . . . . . 133.3 Anwendungsfall 3 - Use-Case Diagramm . . . . . . . . . . . . . . . . 143.4 Anwendungsfall 4 - Use-Case Diagramm . . . . . . . . . . . . . . . . 153.5 Anwendungsfall 5 - Use-Case Diagramm . . . . . . . . . . . . . . . . 16

4.1 Client/Server Architektur auf deren Basis die Anwendungsfalle im-plementiert werden . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

5.1 Latenzen, abhangig von der Objektanzahl . . . . . . . . . . . . . . . 305.2 Latenzen, abhangig von der Objektgroße . . . . . . . . . . . . . . . . 315.3 Latenzen, abhangig von dem Anteil der Objekte mit Informations-

abhangigkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325.4 Latenzen, abhangig von der Große des Intervalls, in dem sich Daten

aktualisieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345.5 Latenzen, abhangig von der Anzahl der Clients . . . . . . . . . . . . . 355.6 Zeit zwischen einem Verbindungsabbruch und der erneuten Verbin-

dungsherstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

V

Tabellenverzeichnis

4.1 Spezifikation der Hardware . . . . . . . . . . . . . . . . . . . . . . . . 27

5.1 Parameter fur Anwendungsfall 2 . . . . . . . . . . . . . . . . . . . . . 325.2 Parameter fur Anwendungsfall 3 . . . . . . . . . . . . . . . . . . . . . 335.3 Parameter fur Anwendungsfall 4 . . . . . . . . . . . . . . . . . . . . . 35

A.1 Aktive Profiles nach Anwendungsfall und Technologie . . . . . . . . . 45A.2 Messergebnisse [in ms] fur Anwendungsfall 1 nach Objektanzahl -

HTTP/2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46A.3 Messergebnisse [in ms] fur Anwendungsfall 1 nach Objektanzahl -

WebSocket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46A.4 Messergebnisse [in ms] fur Anwendungsfall 1 nach Objektanzahl -

RabbitMQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47A.5 Messergebnisse [in ms] fur Anwendungsfall 1 nach Objektgroße - HTT-

P/2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47A.6 Messergebnisse [in ms] fur Anwendungsfall 1 nach Objektgroße - Web-

Socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47A.7 Messergebnisse [in ms] fur Anwendungsfall 1 nach Objektgroße - Rab-

bitMQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48A.8 Messergebnisse [in ms] fur Anwendungsfall 2 - HTTP/2 . . . . . . . 48A.9 Messergebnisse [in ms] fur Anwendungsfall 2 - WebSocket . . . . . . 48A.10 Messergebnisse [in ms] fur Anwendungsfall 2 - RabbitMQ . . . . . . 48A.11 Messergebnisse [in ms] fur Anwendungsfall 3 - HTTP Long Polling . . 48A.12 Messergebnisse [in ms] fur Anwendungsfall 3 - WebSocket . . . . . . . 49A.13 Messergebnisse [in ms] fur Anwendungsfall 3 - RabbitMQ . . . . . . . 49A.14 Messergebnisse [in ms] fur Anwendungsfall 4 - HTTP Long Polling . 49A.15 Messergebnisse [in ms] fur Anwendungsfall 4 - WebSocket . . . . . . . 50A.16 Messergebnisse [in ms] fur Anwendungsfall 4 - RabbitMQ . . . . . . 50A.17 Messergebnisse [in ms] fur Anwendungsfall 5 - WebSocket . . . . . . . 50A.18 Messergebnisse [in ms] fur Anwendungsfall 5 - RabbitMQ . . . . . . . 50

VI

Verzeichnis der Quellcodes

4.1 HTTP-Endpunkt fur Pfad /”bei Request mit GET-Methode . . . . . 194.2 Konfiguration eines WebSockets mit STOMP . . . . . . . . . . . . . . 204.3 Konfiguration einer DirectExchange und einer Queue, die uber ein

Binding mit Routing-Key verbunden sind . . . . . . . . . . . . . . . . 22A.1 docker-compose-Konfiguration fur die Spring Boot-Anwendung . . . . 45A.2 docker-compose-Konfiguration fur Apache JMeter . . . . . . . . . . . 45

VII

Einfuhrung

1998 musste die NASA den Start eines Satelliten um mehr als acht Monate ver-

schieben und damit gravierende Kosten auf sich nehmen, da die Performance einer

Einheit zur Durchfuhrung von wissenschaftlichen Experimenten nicht ausreichend

war [1]. Nur ein Jahr zuvor zahlte der Online-Broker Merrill Lynch & Co bis zu

10 Millionen US-Dollar an Investoren als Kompensation fur Verzogerungen beim

Aktienkauf. Aufgrund von Performance-Problemen wurden die aktuellsten Informa-

tionen uber Aktien nicht an die Investoren ubermittelt, was zu großen Verlusten

fuhrte [2].

Dies sind nur zwei Beispiele, die verdeutlichen, wie essenziell Performance als Quali-

tatsattribut in Software ist und welchen wirtschaftlichen Einfluss sie auf Unterneh-

men haben kann. Konsequenzen langsamer Software reichen von verlorenem Ein-

kommen und dem Scheitern gesamter Projekte, bis zu potenziell lebensbedrohlichen

Situationen, wie beispielsweise in der Luftfahrtindustrie.

Es gibt viele Grunde, warum Software schlecht performen kann: Algorithmen sind

schlecht implementiert, die Architektur wurde nicht vorteilhaft gewahlt, die Last-

ver-teilung nicht beachtet oder es existieren allgemeine Probleme beim Networ-

king.

Viele Applikationen nutzen die Client/Server-Netzwerkarchitektur, die die Kommu-

nikation zwischen einer Client-Komponente und einer Server-Komponente bedingt

[3]. Bei der Datenubertragung sind hier ublicherweise moglichst geringe Verzoger-

ungen erwunscht.

Die Datenubertragung verlauft auf Grundlage von Transportprotokollen. Oftmals ist

dieses das Transmission Control Protocol (TCP). Daruber kann in der Anwendungs-

schicht eine Hypertext Transfer Protocol (HTTP) -Verbindung liegen, die Anfragen

an den Server sendet und auf Antworten wartet. Eine Alternative ist das WebSocket-

Protokoll, welches eine asynchrone, bidirektionale Kommunikation bie-tet. Der Ser-

ver kann somit im Vergleich zu HTTP bei bestehender Verbindung unaufgefordert

Daten an den Client senden, ohne auf Antworten warten zu mussen. Es existieren

jedoch weitere Optionen wie Message Broker, die Message Queues managen und auf

Grundlage des Publish/Subscribe-Musters Asynchronitat ermoglichen oder HTTP

Long Polling, welches uber HTTP eine Client/Server-Verbindung auf-rechterhalt bis

1

1. Einfuhrung

die angeforderten Daten vom Server bereitgestellt werden [4].

Die Wahl der Technologie zum Datenaustausch ist in vielen Fallen nicht offensicht-

lich und hangt von jedem Anwendungsfall ab. Der Kooperationspartner mgm tech-

nology partners hat in der Entwicklungsplattform A12 eine real-world Anwendung

mit verschiedensten Anwendungsfallen. Da die Performance bei A12 von hoher Re-

levanz ist, sollten hier diverse Kommunikationsmoglichkeiten zwischen Clients und

Servern im Detail betrachtet und fur jeden Anwendungsfall individuell bewertet

werden.

1.1 Zielsetzung

Das Ziel dieser Arbeit ist es fur verschiedene Anwendungsfalle ausgewahlte Techno-

logien zum Datenaustausch zwischen Clients und Servern bezuglich der Performance

und Eignung zu vergleichen und zu bewerten. Der Fokus wird dabei in dieser Arbeit

auf HTTP/2, HTTP Long Polling, WebSockets und Message Queues liegen.

Um dies zu realisieren, wird eine Anwendung entwickelt, welche die Funktionalitaten

aller ausgewahlten Technologien integriert hat. Jeder Anwendungsfall soll in dem

System mit jeder ausgewahlten Technologie realisiert sein. So konnen fur individu-

elle Szenarien die Resultate aller Technologien miteinander verglichen und einzeln

bewertet werden.

Als Client soll das Test-Werkzeug Apache JMeter dienen. JMeter ist eine open source

Software, deren Zweck das Testen von funktionalem Verhalten und Performance ist

[5]. Bei der Ausfuhrung der erstellten Testszenarien findet hier das Messen von

Metriken im Hintergrund statt [6].

Diese Bachelorarbeit soll auf Grundlage der Resultate der Testszenarien beantwor-

ten, wie gut die Technologien fur bestimmte Anwendungsfalle geeignet sind, wenn

Performance ein elementarer Aspekt der Software ist. Weitere Faktoren, die bei

individuellen Anwendungsfallen eine Rolle spielen konnten, sowie der Entwicklungs-

aufwand, sollen auch in die Bewertung einfließen.

1.2 Gliederung der Arbeit

Im Kapitel Grundlagen wird in die wichtigsten Komponenten, Protokolle und Tech-

nologien eingefuhrt, die zum Verstandnis der folgenden Kapitel dieser Abschluss-

arbeit vorausgesetzt werden. Anschließend werden auf Basis der zugrundeliegenden

Anwendungsfalle, im Kapitel Anforderungsanalyse, die funktionalen Anforderungen

an das zu entwickelnde System beschrieben und durch nicht-funktionale Anforderun-

gen erganzt. Das Kapitel Implementierung wird daraufhin die Entwicklung der zuvor

beschriebenen Anforderungen erlautern und dabei auf die beiden Hauptkomponen-

ten Test-System und JMeter eingehen. Da die Tests einen elementaren Aspekt der

Implementierung verkorpern, wird in diesem Kapitel ebenfalls darauf eingegangen,

2

1. Einfuhrung

wie die Testumgebung definiert ist. Im anschließenden Kapitel Auswertung werden

die Ergebnisse der Tests vorgestellt und mogliche Erklarungen dafur gesucht. Die

Abschlussarbeit endet mit einem Fazit, in dem die Erkenntnisse fur jede Technologie

zusammengefasst werden.

3

Grundlagen

2.1 A12

Seit 2012 entwickelt das Unternehmen mgm technology partners GmbH die Ent-

wicklungsplattform A12. Sie ermoglicht es Business-Analysten, unter Nutzung von

speziellen Editoren große Teile von Geschaftsanwendungen selbststandig zu entwi-

ckeln, wodurch die Entwicklungszeit deutlich beschleunigt wird [7]. A12 ist modell-

getrieben und die damit entwickelten Business-Anwendungen sind webbasiert und

nutzen eine Client/Server-Anwendungsinfrastruktur.

2.2 HTTP

Das Hypertext Transfer Protocol (HTTP) ist ein zustandsloses Request/Response

Protokoll auf der Anwendungsschicht. Das Protokoll wird seit 1990 fur das World

Wide Web genutzt, um Daten als Nachrichten uber Netzwerke auszutauschen [8].

Beim Client/Server Messaging sind Client und Server jeweils Programme, bei de-

nen der Client eine Verbindung mit einem Server aufbaut, um HTTP-Requests zu

senden, wahrend dieser andere Verbindungen akzeptiert und auf HTTP-Requests

mit HTTP-Responses reagiert. Verbindungen bestehen in den meisten Fallen uber

das Transmission Control Protocol (TCP) in der Transportschicht [9], wie in Grafik

[2.1] dargestellt.

Abbildung 2.1: HTTP Request/Response Muster uber TCP

4

2. Grundlagen

2.2.1 HTTP/2

Seit Mai 2015 ist HTTP/2 der verbesserte Nachfolger von HTTP/1.1. Wahrend

Kern-Funktionalitaten erhalten blieben, wurde das Protokoll in vielen Bereichen

verbessert und erweitert und bietet erhohte Effizienz [10].

Zu den wichtigsten Verbesserungen gehoren:

• Server push: Der Server kann antizipieren welche Ressourcen der Client

benotigt und sendet diese ohne vorhergehende Anfrage [11].

• Header-Komprimierung: Redundante Header-Daten werden komprimiert,

sodass Requests in vielen Fallen eine geringere Große haben oder mehrere

Requests in ein Paket mit nur einem Header komprimiert werden [10].

• Multiplexing: Mehrere Requests konnen uber eine einzige TCP-Verbindung

versendet werden und Responses mussen nicht in derselben Reihenfolge an-

kommen. Der Overhead fur den TCP-Verbindungsaufbau fallt damit weg [11].

(a) HTTP Request/Response ohne Mul-tiplexing

(b) HTTP Request/Response mit Mul-tiplexing

Abbildung 2.2: Vergleich des HTTP Request/Response Musters ohne und mit Mul-tiplexing

5

2. Grundlagen

2.2.2 Long Polling

HTTP Long Polling funktioniert auf Basis von regularen HTTP-Requests. Anstatt

jedoch sofort eine Response vom Server zu erwarten, halt dieser die HTTP-Verbin-

dung offen und antwortet erst, wenn neue Ereignisse zu senden sind. Falls das im

festgelegten Timeout nicht passiert oder die neuen Daten den Client als Response

erreichen, wird unmittelbar ein neuer Request gesendet, der wieder offen bleibt, bis

neue Ereignisse verfugbar sind oder der Timeout erreicht wird [12]. Dadurch wird

der Eindruck vermittelt, der Server wurde neue Daten unaufgefordert in Echtzeit an

den Client senden.

Abbildung 2.3: HTTP Long Polling

2.3 WebSocket

2011 standardisierte die Internet Engineering Task Force (IETF) das WebSocket-

Protokoll. Die Motivation, dieses Protokoll zu kreieren, lag darin eine bidirektionale

Kommunikation zwischen Client und Server zu ermoglichen. Bis dahin konnte Bidi-

rektionalitat durch HTTP nur nachgeahmt werden, es ist jedoch nicht ausgelegt fur

diese Art der Kommunikation und stoßt deshalb an Grenzen und Probleme [siehe

[13] Kap. 1.1].

6

2. Grundlagen

Eine WebSocket-Verbindung nutzt eine einzelne TCP-Verbindung, um Nachrichten

in beide Richtungen auszutauschen. Da das Protokoll dieselben Ports wie HTTP und

HTTPS nutzt, verlauft der initiale Handshake uber HTTP. Ein Beispiel ist in Abb.

2.4 gegeben. Der Client Upgrade- und Connection-Header, zusammen mit weiteren

WebSocket spezifischen Headern an den Server. Antwortet der Server nun ebenfalls

mit einem Upgrade- und Connection-Header, konnen Daten unabhangig voneinander

und bidirektional ausgetauscht werden [13]. Dadurch konnen beispielsweise Echtzeit-

Funktionalitaten fur Anwendungen ermoglicht werden.

(a) WebSocket Handshake des Clients (b) WebSocket Handshake des Servers

Abbildung 2.4: Beispiel WebSocket Handshake eines Clients und eines Servers mitUpgrade- und Connection-Header

Als Erweiterung des WebSocket-Protokolls kann das Simple Text Oriented Messa-

ging Protocol (STOMP) genutzt werden. STOMP definiert ein textbasiertes Wire-

Protokoll fur Nachrichten, die zwischen einem Client und einem Server ausgetauscht

werden [14]. Ein Frame besitzt ein Kommando und eine Anzahl von optionalen Hea-

dern. Ein STOMP Server hat sogenannte Destinations, an die Nachrichten gesendet

werden konnen. Die Server-Implementierung routet die Nachrichten bei Erhalt an

die entsprechenden Destinations. Ein Consumer abonniert die gewunschten Destina-

tions uber ein SUBSCRIBE-Frame und erhalt Nachrichten uber MESSAGE-Frames

[14].

2.4 Message Queue

Message Queues sind Nachrichtenwarteschlangen, um die Kommunikation zwischen

Anwendungen zu erleichtern. Zu ubermittelnde Daten werden als Nachrichten von

einer Anwendung in die Queue geschrieben und verweilen dort, bis sie von einer

Anwendung konsumiert und verarbeitet werden. Die Message Queue fungiert somit

als Puffer zwischen Anwendungen [15].

Einige der Vorteile dieser Architektur sind [15]:

• Entkopplung: Applikationen konnen vollig entkoppelt voneinander sein und

trotzdem miteinander kommunizieren, da lediglich Verbindungen zur Queue

bestehen

• Asynchronitat: Producer haben nur die Aufgabe Nachrichten an die Queue

zu senden, interessieren sich jedoch nicht dafur wann die Aufgaben vom Consu-

mer ausgefuhrt werden und ob eventuell Daten zuruckgesendet werden sollen

7

2. Grundlagen

• Concurrency: Queues speichern und stellen Nachrichten nach dem First In

- First Out Prinzip bereit. Senden somit mehrere Producer gleichzeitig Nach-

richten an die Queue ist sichergestellt, dass die erste Nachricht auch zuerst

konsumiert wird

• Persistenz: Nachrichten werden erst aus der Queue geloscht, wenn ein Con-

sumer diese konsumiert hat. Falls ein Consumer nicht bereit ist die Nachricht

entgegenzunehmen, verbleibt diese einfach etwas langer in der Queue. Es wird

somit garantiert, dass der Consumer die Nachricht erhalt. Zusatzlich wird si-

chergestellt, dass die Nachricht nur einmal konsumiert wird

RabbitMQ

Viele Message Queues werden von einem Message Broker (auch Queue Manager

genannt) verwaltet. Ein Broker kann eine Anzahl von Queues hosten und Nachrich-

ten an die gewunschten Queues routen. Zusammen agieren Message Queue und

Broker dann als Vermittler zwischen Applikationen.

RabbitMQ ist einer der popularsten open source Message Broker und implemen-

tiert den offenen Standard fur Message Oriented Middleware (MOM) Kommunika-

tion, das Advanced Message Queuing Protocol (AMQP). Ein AMQP System besteht

zusatzlich zu einem Broker und einer Message Queue aus folgenden Komponenten

[16]:

Producer Ein Programm, das Nachrichten erstellt und diese an eine Exchange

eines Brokers sendet

Consumer Ein Programm, das ein oder mehrere Message Queues deklariert und

von dort Nachrichten konsumiert

Exchange Eine Routing-Engine, die Nachrichten von Producern erhalt und diese

auf keine oder mehrere Message Queues routet

Nachrichten von Producern erreichen zunachst immer eine Exchange. Die Exchange

sorgt uber einen Routing Key dafur, dass die Nachrichten die richtigen Queues er-

reichen. Queues sind mit Exchanges uber Bindings verbunden [17].

2.5 Apache JMeter™

JMeter ist ein open source Testwerkzeug von Apache Es wurde kreiert, um die

Performance und das funktionale Verhalten von Anwendungen zu testen [6]. Es

kann genutzt werden um schwere Last auf einem Server, Gruppen von Servern und

Netzwerken zu simulieren oder um die allgemeine Performance unter verschiedenen

Arten von Lasten bei diversen Testfallen zu testen [5].

JMeter bietet standardmaßig die Moglichkeit, verschiedenste Anwendungen, Server

und Protokolle zu testen. Dazu zahlen:

8

2. Grundlagen

Abbildung 2.5: RabbitMQ Pub/Sub System

• Web-Anwendungen mit HTTP/HTTPS

• REST Webservices

• Datenbanken mit Java Database Connectivity (JDBC)

• Mail mit SMTP, POP3, IMAP

Daruber hinaus gibt es Plugins fur weitere Testmoglichkeiten:

• HTTP/2

• WebSocket

• AMQP

Testplane werden direkt in JMeter erstellt, indem die gewunschten Konfigurationen,

Controller und Sampler als Baumstruktur eingefugt werden. Ein simples Beispiel

zeigt Abb. 2.6.

Abbildung 2.6: Simpler Beispiel-Testfall in JMeter

In diesem Beispiel werden zunachst alle Benutzervariablen fur jeden gestarteten

Thread initialisiert. Konfigurationen bezuglich der Threads finden im Element Thread

Group statt. Daraufhin wird in einem Loop ein HTTP GET-Request an http://lo-

calhost:8080/my-path gesendet und direkt danach der aktuelle Thread fur eine

festgelegte Zeit pausiert. Diese Konfiguration findet in Think Time statt.

9

2. Grundlagen

2.6 Docker

Docker ist eine der verbreitetsten Container-Technologien fur Anwendungen [18].

Eine containerisierte Applikation ist isoliert von anderen Prozessen und beinhal-

tet deshalb die gesamte Umgebung, die die Applikation zur Ausfuhrung benotigt,

inklusive aller Dependencies [19]. Durch die Festlegung der Umgebung haben Ent-

wickler die Konsistenz und Sicherheit, dass die Anwendung unabhangig vom System

funktioniert. Der Code ist somit portabler und Ausfuhrungen simpel reproduzierbar

[20].

Docker-Container unterscheiden sich von Virtual Machines (VM), da Container

keine Hardware simulieren oder ein eigenes Betriebssystem nutzen. Dahingegen

teilen sich Container bestimmte System-Ressourcen und sind dadurch lightweight

[21].

Die Entwicklung von Docker-Container-basierten Anwendungen verlauft in einem

definierten Workflow. Nachdem die Anwendung programmiert wurde, muss ein Docker-

file erstellt werden. Ein Dockerfile ist eine textbasierte Datei, die ein Rezept festlegt,

wie aus der Anwendung ein Docker image erstellt werden soll. Das Docker image

kann daraufhin in einem isolierten Container direkt uber einen [docker run]-Befehl

oder wahlweise durch eine docker-compose-Datei gestartet werden [21]. In letzterem

konnen auch mehrere Container gleichzeitig gestartet werden.

10

Anforderungsanalyse

Ziel dieser Anforderungsanalyse ist es, die Anforderungen an den JMeter-Client und

das Test-System zu identifizieren und zu beschreiben. Hierfur werden zunachst in

[3.1] die Anwendungsfalle einzeln vorgestellt und anschließend dessen resultierende

funktionale Anforderungen an die jeweiligen Systeme formuliert. Erganzt werden

diese in [3.2] durch nicht-funktionale Anforderungen.

3.1 Anwendungsfalle

In diesem Abschnitt werden die unterschiedlichen Anwendungsszenarien von A12

fur die Interaktion zwischen einem oder mehreren Apache JMeter-Clients und dem

Test-System vorgestellt. Zum besseren Verstandnis wird jeder Anwendungsfall durch

ein Beispiel vervollstandigt. Da A12 eine modellgetriebene Plattform ist, werden

Business-Anwendungen durch die Modelle bestimmt. Unterschiedliche Modelle konnen

somit unterschiedliche Anwendungen simulieren, weshalb es moglich ist, die gewahlten

Anwendungsfalle synthetisch zu gestalten. Die von den Anwendungsfallen abgelei-

teten Anforderungen beschreiben funktionale Anforderungen.

3.1.1 Anfrage unabhangiger Objekte

Ein Client benotigt unmittelbar Daten vom Server. Diese Daten bestehen aus einer

Anzahl von Objekten mit einer festen Große. Die Objekte sind unabhangig vonein-

ander und sollen schnellstmoglich vom Server zum Client gesendet werden, nachdem

sie von diesem angefragt wurden. Je nach Testfall variiert die Anzahl der benotigten

Objekte und die feste Große eines einzelnen Objekts.

Beispiel:

Eine Social-Media-Applikation, bei der nach Aufruf des ”FreundeMenupunkts die

Profilbilder aller Personen in der Freunde-Liste angezeigt werden sollen.

Der Client soll:

• eine Anzahl von Objekten anfragen

11

3. Anforderungsanalyse

Das System soll:

• eine Anzahl von Objekten mit fester Große an den Client senden

FrageunabhangigeObjekte an

Sende Objektean Client

Client Server

Abbildung 3.1: Anwendungsfall 1 - Use-Case Diagramm

3.1.2 Informationsabhangigkeit

Ein Client benotigt eine Anzahl von Objekten vom Server. Zwischen einem be-

stimmten Anteil der Objekte besteht eine Abhangigkeit. Der Client benotigt somit

zunachst Informationen von einem Objekt, bevor das von diesen Daten abhangige

Objekt angefragt werden kann.

In diesem Anwendungsfall variiert der Anteil von Objekten, die von anderen abhangig

sind.

Beispiel:

In einer Social Media-Anwendung sollen in einer Tabelle mit zwei Spalten Infor-

mationen angezeigt werden. Die erste Spalte zeigt die Profilbilder aller Personen

und das jeweilige Datum des Hinzufugens dieser Person zu der Freunde-Liste an. In

der anderen Spalte sind zusatzliche Informationen uber die jeweilige Person, wenn

diese in den vergangenen 7 Tagen zur Freunde-Liste hinzugefugt wurde, zu sehen.

Aufgrund potenzieller großer Mengen an Personen in der Freunde-Liste, werden die

Profilbilder, inklusive Datum, einzeln fur jede Person angefragt. Fur jede Person,

bei dem das Datum in dem genannten Zeitraum von maximal 7 vergangenen Tagen

liegt, wird eine weitere Anfrage getatigt, um die zusatzlichen Informationen in der

weiteren Tabellenspalte anzuzeigen. Hat ein Nutzer beispielsweise 100 Freunde in

der Anwendung und 50% der Freunde wurden in den letzten 7 Tagen hinzugefugt,

werden insgesamt 100 unabhangige und 50 abhangige Anfragen getatigt. Der Anteil

abhangiger Objekte liegt damit bei 1/3.

Der Client soll:

• eine Anzahl von Objekten anfragen

• bei Erhalt von bestimmten Daten davon abhangige Objekte anfragen

12

3. Anforderungsanalyse

Das System soll:

• auf Anfragen reagieren und die Objekte an den Client senden

FrageunabhangigeObjekte an

FrageabhangigeObjekte an

Sende Objektean Client

Client Server

Abbildung 3.2: Anwendungsfall 2 - Use-Case Diagramm

3.1.3 Aktualisierende Daten

Das System besitzt Daten, die sich in einem nicht-periodischen Intervall aktualisie-

ren. Die neuen Daten stammen von einem Client, der diese an den Server sendet.

Abhangig von weiteren Faktoren kann das Intervall mehrere Sekunden, oder nur

Bruchteile von Sekunden, betragen. Ein weiterer Client benotigt diese neuen Daten,

sobald sie bereitstehen.

Beispiel:

Eine Chat-Anwendung, in der man mit einzelnen Personen Nachrichten austauschen

kann. Nachdem eine Person eine Nachricht sendet, soll diese den Empfanger ange-

zeigt werden.

Client 1 soll:

• in bestimmtem Intervall Daten zur Aktualisierung an den Server senden

Client 2 soll:

• aktualisierte Daten schnellstmoglich erhalten

Das System soll:

• veraltete Daten aktualisieren, sobald neue Daten das System erreichen

• aktualisierte Daten fur Client 2 bereitstellen/weiterleiten

13

3. Anforderungsanalyse

Daten anServersenden

AktuelleDatenerhalten

AktuelleDaten

bereitstellen/ weiterleitenClient 1

Client 2

Server

Abbildung 3.3: Anwendungsfall 3 - Use-Case Diagramm

3.1.4 Mehrere Clients

Das System besitzt wie in [3.1.3] Daten, die sich in einem bestimmten Intervall ak-

tualisieren. Die neuen Daten stammen von einem Client, der diese in einem Intervall

an den Server sendet. Dieser Anwendungsfall wird getrennt von [3.1.3] betrachtet,

da hier das Test-System isoliert auf Veranderungen der Ergebnisse bei variieren-

der Anzahl von Clients getestet wird. Die Anzahl der Clients, die die aktuellen

Informationen benotigen, ist somit in diesem Anwendungsfall die Variable, wahrend

es immer nur einen Client gibt, der die Daten zur Aktualisierung an den Server

ubermittelt.

Beispiel:

Eine Anwendung, um Verlaufe des Aktienmarkts zu beobachten. Alle Nutzer, die

in dem Moment online sind, sollen bei Anderungen im Verlauf, die Aktualisierung

erhalten und damit wieder auf dem aktuellsten Stand sein.

Client 1 soll:

• in bestimmtem Intervall Daten zur Aktualisierung an den Server senden

Weitere Clients sollen:

• aktualisierte Daten schnellstmoglich erhalten

Das System soll:

• Daten aktualisieren, sobald es moglich ist

• aktualisierte Daten fur alle Clients bereitstellen/weiterleiten

14

3. Anforderungsanalyse

Daten anServersenden

AktuelleDatenerhalten

AktuelleDaten

bereitstellen/ weiterleitenClient 1

Weitere Clients

Server

Abbildung 3.4: Anwendungsfall 4 - Use-Case Diagramm

3.1.5 Neu-Verbindung

Ein Client benotigt Objekte vom Server. Bei der Ubertragung der Daten kommt es zu

einem Verbindungsabbruch, was die sofortige Neu-Verbindung des Clients erfordert.

Sobald die Verbindung wieder besteht, soll der Client die Objekte schnellst-moglich

erhalten. Dieser Anwendungsfall spielt bei allen vorangegangenen Anwendungsfallen

eine Rolle, soll hier nun aber isoliert getestet werden.

Beispiel:

Eine Anwendung, um Verlaufe des Aktienmarkts zu beobachten. Unerwartet konnen

die aktuellen Daten nicht an den Client gelangen, da die Verbindung abgebrochen

ist. Der Client versucht nun schnellstmoglich neu zu verbinden und die Verzogerung

so gering wie moglich zu halten, sodass veraltete Informationen nicht zu Fehlern

fuhren.

Der Client soll:

• nach Verbindungsabbruch unmittelbar eine neue Verbindung aufbauen

• Daten vom Server erhalten

Das System soll:

• Objekte an den Client senden

15

3. Anforderungsanalyse

FrageObjekte an

Stelle neueVerbin-dung her

Sende Objektean Client

Client Server

Abbildung 3.5: Anwendungsfall 5 - Use-Case Diagramm

3.2 Nicht-funktionale Anforderungen

Die nicht-funktionalen Anforderungen definieren globale Anforderungen, die es an

die Test-Applikation gibt. Sie spielen wahrend der Anwendungsentwicklung eine

kritische Rolle und haben großen Einfluss auf die Wahl des Designs und der gesamten

Architektur der Implementierung [22].

3.2.1 Anpassbarkeit

Eine Voraussetzung bei der Entwicklung des Systems ist die leichte Anpassbarkeit.

Diese bezieht sich hierbei auf eine einfache Anpassbarkeit von Testfallen, welche

mehrmals mit nur leicht abgeanderten Parametern ausgefuhrt werden mussen, um

das Verhalten der Metriken zu betrachten. Fur diese geringen Anpassungen sollte

kein bedeutender Aufwand betrieben werden mussen, um die Entwicklungszeit ge-

ring zu halten.

3.2.2 Erweiterbarkeit

Der Anwender muss die Moglichkeit haben, die Anwendungs- und Testfalle zu erwei-

tern. Dabei ist von Bedeutung, dass nur geringe Anpassungen in der Implementation

vorgenommen werden mussen und die Struktur des Systems von Erweiterungen der

Testfalle nicht beeinflusst wird.

3.2.3 Benutzerfreundlichkeit

Zur Ausfuhrung eines Testfalls sollen vom Anwender nur minimale Konfigurationen

notig sein, beispielsweise die Auswahl des Testfalls. Anpassungen an der Implemen-

tierung sollen nicht benotigt werden, da dies nur auf Kosten der Nutzerfreundlichkeit

moglich ist. Wahrend der Ausfuhrung des Tests soll eine Interaktion zwischen dem

Anwender und dem System ebenfalls nicht notig sein; der Test soll nach Start selbst-

standig ausgefuhrt werden und schließlich terminieren.

16

3. Anforderungsanalyse

3.2.4 Reproduzierbarkeit

Um die Tests von mehreren Anwendern auf unterschiedlichen Geraten und ge-

gebenenfalls Betriebssystemen lokal auszufuhren, ist es wichtig, dass das System

unabhangig von Gerat, Betriebssystem und Konfigurationen auf dem Gerat ist.

Die Testfalle sollen jederzeit und auf unterschiedlichen Geraten ausgefuhrt werden

konnen.

17

Implementierung

In diesem Kapitel wird beschrieben, wie die in [1.1] erwahnte Anwendung imple-

mentiert wird. Zunachst soll hierfur eine Basis-Applikation erstellt werden, die die

Grundfunktionalitaten der Kommunikation mit HTTP/2, WebSockets und Rab-

bitMQ aufweist. Diese Applikation bildet die Basis, auf derer die individuellen An-

wendungsfalle implementiert werden. Die Implementierungen der Anwendungsfalle

im Test-System und die erstellten Testszenarien in JMeter mussen hierfur einander

angepasst werden. Nachdem das Test-System vollstandig ist, werden Docker Images

erstellt und diese in Containern gestartet. Die Ausfuhrung der Messungen wird in

der letzten Sektion dieses Kapitels erlautert.

4.1 Basis-Applikation

Dieser Teil der Anwendung bietet die Grundstruktur mit den technologieabhangigen

Grundfunktionalitaten zur Kommunikation mit HTTP/2, WebSockets und des Mes-

sage Brokers RabbitMQ. In den folgenden Unterkapiteln wird erklart, aus wel-

chen Grunden die genannten Technologien ausgewahlt wurden, welche Funktiona-

litaten in der Basis-Applikation implementiert werden sollen und wie dies umgesetzt

wird.

Die Basis-Server-Applikation wird in Java mit dem Framework Spring und der Er-

weiterung Spring Boot in Release 2.3.4 programmiert. Das Java Framework wird

bei mgm technology partners serverseitig standardmaßig genutzt und ist damit fur

diese Abschlussarbeit im Unternehmenskontext die logische Wahl.

4.1.1 HTTP/2

HTTP wird seit 1990 nach wie vor im World Wide Web als Protokoll zum Da-

tenaustausch zwischen Client und Server genutzt [8]. Nahezu jede Website nutzt

das Request/Response-Protokoll, was die Relevanz fur einen Vergleich mit anderen

Technologien oder Protokollen unterstreicht.

Es wurde entschieden, lediglich HTTP/2 und nicht HTTP/1.1 in den Vergleich

aufzunehmen. HTTP/1.1 wird zunehmend durch HTTP/2 ersetzt [23].

18

4. Implementierung

Anforderungen

Die Anwendung soll uber HTTP-Endpunkte HTTP/2 Requests erhalten und uber

die HTTP/2-Verbindung unmittelbar auf den Request antworten.

Entwicklung

HTTP/2 wurde zur Nutzung fur HTTP und HTTP Secure (HTTPS) definiert. Die

zu den popularsten zahlenden Browserimplementierungen, wie beispielsweise Chro-

me, Firefox und Edge, unterstutzen HTTP/2 jedoch nur, wenn die Verbindung uber

Transport Layer Security (TLS) stattfindet. Aufgrund dessen muss zunachst HTTPS

konfiguriert werden.

Nach Generierung eines SSL Zertifikats werden folgende Attribute in der Datei

application.yml konfiguriert:

• server.http2.enabled=true

• server.ssl.key-alias=[key-alias]

• server.ssl.key-store=[key-store]

• server.ssl.key-store-type=[key-store-type]

• server.ssl.key-password=[key-password]

Jetzt konnen in @Controller-Klassen Endpunkte erstellt werden, die auf Requests

zu den spezifizierten Pfaden antworten.

1 @Contro l ler

2 pub l i c c l a s s HTTP2Controller {3

4 @GetMapping ( value = ”/” )

5 @ResponseBody

6 pub l i c S t r ing ge tS impleSt r ing ( ) {7 return ”Das i s t d i e Antwort a l s S t r ing ” ;

8 }9 }

Quellcode 4.1: HTTP-Endpunkt fur Pfad /”bei Request mit GET-Methode

4.1.2 WebSocket

Nach der Standardisierung des WebSocket-Protokolls im Jahre 2011 wurden Web-

Sockets schnell von jedem modernen Browser unterstutzt und haben sich bei Echtzeit-

Anwendungen fur viele als erste Wahl durchgesetzt. Da der Request/Response Over-

head wegfallt, sollte dieses Protokoll effizienter als HTTP/2 sein. Die vermeintlich

gute Performance von WebSockets wird deshalb fur diverse Anwendungsfalle mit

den anderen Technologien verglichen.

19

4. Implementierung

Anforderungen

Die Anwendung soll WebSocket-Verbindungen mit Clients annehmen konnen und

imstande sein, Nachrichten uber die WebSocket-Verbindung zu erhalten und zu ver-

senden. Das Erhalten von Nachrichten soll uber STOMP-Destinations in einem Con-

troller geschehen.

Entwicklung

Da eine WebSocket-Verbindung uber eine HTTP/HTTPS-Verbindung mit einem

Upgrade-Header etabliert wird und die Anwendung fur HTTPS konfiguriert wurde,

nutzt der WebSocket in der Implementierung WebSocket Secure (wss).

Als Erweiterung zum WebSocket-Protokoll wird das Simple Text Oriented Messa-

ging Protocol (STOMP) genutzt, bei dem bestimmte Destinations abonniert werden.

Hierfur muss in der WebSocket @Configuration-Klasse, wie in [4.2] der Message

Broker konfiguriert und ein STOMP-Endpunkt registriert werden.

1 @Configuration

2 @EnableWebSocketMessageBroker

3 pub l i c c l a s s WebSocketConfig extends . . . implements . . . {4

5 @Override

6 pub l i c void reg i s terStompEndpoints ( StompEndpointRegistry r e g i s t r y )

{7 r e g i s t r y . addEndpoint ( ”/mySocket” ) . s e tAl lowedOr ig ins ( ”∗” ) ;8 }9

10 @Override

11 pub l i c void conf igureMessageBroker ( MessageBrokerRegistry c on f i g ) {12 c on f i g . enableSimpleBroker ( ”/ top i c /” ) ;

13 c on f i g . s e tApp l i c a t i o nDe s t i n a t i onP r e f i x e s ( ”/app” ) ;

14 }15 }

Quellcode 4.2: Konfiguration eines WebSockets mit STOMP

In einem Controller werden Nachrichten - ahnlich zum HTTP/2-Controller - uber

Destinations, spezifiziert in @MessageMapping(/..."), entgegengenommen und ver-

arbeitet. Uber die Annotation @SendTo(/topic/...") oder mit einer Instanz der

SimpMessageSendingOperations werden Nachrichten an Clients gesendet.

Die Frame-Size des WebSockets wird nicht verandert und hat einen Wert von 8196

Bytes.

4.1.3 RabbitMQ

Message Queues bieten eine asynchrone Kommunikation und die Option zur Umset-

zung von Echtzeit-Anwendungen. Damit bieten sie eine Alternative zu WebSockets,

konnen aber auch das Request/Response Muster simulieren und anstelle von HTT-

P/2 implementiert werden. Weiterhin bieten Message Queues gegenuber den beiden

20

4. Implementierung

Alternativen Vorteile [siehe 2.4], die jedoch moglicherweise auch negative Einflusse

auf die Performance haben konnen. Ein Vergleich mit HTTP/2 und WebSockets soll

zeigen, ob eine Message Queue eine gute Option ist, wenn Performance von hoher

Relevanz ist.

RabbitMQ dient stellvertretend fur Message Broker, die das AMQP-Protokoll imple-

mentieren. Darunter zahlen auch StormMQ und Apache ActiveMQ. RabbitMQ zahlt

unter open source Message Brokern zu den popularsten und ist auch im Technologie-

Stack von namhaften Unternehmen, wie der Deutschen Borse, und Goldman Sachs

[24], zu finden. RabbitMQ stellt damit einen guten Stellvertreter fur Message Broker

mit AMQP Implementierung dar.

Anforderungen

Die Anwendung soll notwendige User, Exchanges, Queues und Bindings definieren

und Nachrichten mit einem Producer uber eine Exchange an bestimmte Queues

senden. Ein Consumer soll sich mit einer definierten Queue verbinden und dort

eingehende Nachrichten konsumieren.

Entwicklung

Zunachst mussen die gewunschten User, Exchanges, Queues und Bindings definiert

werden. In einer Datei namens definitions.json werden diese Konfigurationen im

JSON-Format durchgefuhrt. Bei Start der Applikation werden die Definitionen in

RabbitMQ importiert.

Um die definierten Objekte in der Spring Boot Anwendung zu nutzen, werden die

benotigten Exchanges, Queues und Bindings in einer @Configuration Klasse fur

den Message Broker definiert und als @Beans annotiert.

Zur Authentifizierung eines Producers/Consumers bei RabbitMQ und zur Kommu-

nikation zum gewunschten Port werden diese Attribute in der application.yml-

Datei konfiguriert.

In [4.3] wird eine Direct-Exchange namens myExchangeName konfiguriert, die die

Parameter durable und autoDelete mit false deklariert. Es wird ebenfalls eine

Queue namens myQueueName konfiguriert, die den Wert false fur den Parameter

durable ubergibt. Die beiden Komponenten werden uber die Konfiguration eines

Bindings mit einem Routing-Key verbunden.

Uber die Bean der Exchange, eines Routing-Keys und der Instanz einer RabbitTem-

plate sendet ein Producer Nachrichten an die gewunschte Exchange.

Eine mit @RabbitListener(queues=[queueName]) annotierte Methode eines Con-

sumers erstellt die Verbindung mit der genannten Queue, um dort verfugbare Nach-

richten zu konsumieren.

21

4. Implementierung

1 @Bean2 pub l i c DirectExchange exchange ( ) {3 return new DirectExchange ( ”myExchangeName” , f a l s e , f a l s e ) ;4 }5 @Bean6 pub l i c Queue queue ( ) {7 return new Queue ( ”myQueueName” , f a l s e ) ;8 }9 @Bean

10 pub l i c Binding bindQueueToExchange ( @Qua l i f i e r ( ”queue” ) Queue queue ,DirectExchange exchange ) {

11 returnBindingBui lder . bind ( queue ) . to ( exchange ) . with ( ”myRoutingKey” ) ;

12 }

Quellcode 4.3: Konfiguration einer DirectExchange und einer Queue, die uber einBinding mit Routing-Key verbunden sind

4.2 Umsetzung der Anwendungsfalle

In den folgenden Unterkapiteln [4.2.1 - 4.2.5] wird beschrieben, wie die individuellen

Anwendungsfalle mit der Spring Boot-Anwendung und Apache JMeter umgesetzt

werden. Hierbei geht es darum, nachzuvollziehen, wie die Tests ablaufen und die

Testergebnisse zustande kommen. Die individuelle Umsetzung der Anwendungsfalle

basiert auf der entwickelten Basis-Applikation. Die entsprechende Client/Server Ar-

chitektur mit den Komponenten des Clients, des Servers und des Message Brokers

ist in Grafik [4.1] dargestellt. Diese Architektur bildet die Basis zur folgenden Um-

setzung.

Abbildung 4.1: Client/Server Architektur auf deren Basis die Anwendungsfalle im-plementiert werden

22

4. Implementierung

4.2.1 Anfrage unabhangiger Objekte

[Anforderungen siehe 3.1.1]

HTTP/2

In diesem Anwendungsfall sendet der JMeter-Client GET-Requests, gemaß dem Re-

quest/Response Muster, an den Server. Die Anzahl der Requests entspricht der An-

zahl der benotigten Objekte. Da die Objekte unabhangig voneinander sind, konnen

alle Requests Multiplexing verwenden.

Der Java-Server besitzt den entsprechenden HTTP-Endpunkt und antwortet unmit-

telbar mit einem String der gewunschten Große.

WebSocket

Der Anwendungsfall entspricht zwar prinzipiell dem Request/Response-Muster, der

WebSocket kann aber trotzdem von der Eigenschaft der Asynchronitat Gebrauch

machen. Es wird nicht jedes Objekt einzeln angefragt, sondern uber eine bestehende

WebSocket-Verbindung vom Client eine Nachricht gesendet, die uber die entspre-

chenden STOMP-Destinations das Versenden aller benotigten Objekte vom Server

an den Client veranlasst. Der Client liest somit nach Senden der Initialnachricht

lediglich alle ankommenden Objekte ein.

Der Server besitzt die genannte STOMP-Destination und sendet bei Eingang einer

Nachricht sofort die gewunschten Objekte uber die WebSocket-Verbindung an einen

anderen Endpunkt, der vom Client abonniert wird.

RabbitMQ

Die Message Queue verfahrt nach einem ahnlichen Prinzip wie der WebSocket. Der

JMeter-Client sendet durch einen Producer eine Nachricht uber eine Exchange an

eine Queue. Der Server besitzt einen Consumer, der auf Nachrichten in dieser Queue

wartet. Bei Erhalt der Nachricht wird sofort die gewunschte Anzahl an Objekten in

eine weitere Queue gesendet. Diese Queue wird wiederum von einem Consumer des

Clients abonniert, welcher die Objekte in Reihenfolge verarbeitet.

4.2.2 Informationsabhangigkeit

[Anforderungen siehe 3.1.2]

HTTP/2

Die Umsetzung dieses Anwendungsfalls ist analog zu dem Vorangegangenen, mit

dem Unterschied, dass Multiplexing nur bei einem Anteil der Requests stattfin-

den darf. Bei Anfragen an Objekte, die eine Abhangigkeit anderer Objekte sind,

muss vollstandig auf die Response gewartet werden, bevor das abhangige Objekt

angefragt wird. Somit gibt es einen hoheren Grad an Synchronitat in dem Anwen-

dungsfall.

23

4. Implementierung

WebSocket

Der Client sendet zunachst uber die WebSocket-Verbindung eine Nachricht an den

Server. Der Server sendet daraufhin alle Objekte an den Client, welche von keinem

anderen Objekt abhangig sind. Bei Eingang dieser Objekte am Client wird fur je-

des Objekt, das eine Abhangigkeit fur ein anderes Objekt besitzt, dieses uber eine

weitere Nachricht an den Server angefragt.

Der Server benotigt hierfur lediglich die entsprechenden STOMP-Destinations und

sendet die gewunschten Daten uber eine WebSocket-Verbindung an den Client.

RabbitMQ

Bei RabbitMQ wird wie beim WebSocket agiert. Die Nachrichten werden jedoch

nicht direkt zwischen Client und Server ausgetauscht, sondern dazwischen in der

Message Queue abgelegt. Da der Server nur einen Consumer besitzt, wird bei Erhalt

der Nachricht auf Grundlage des Nachrichten-Bodys entschieden, welche Objekte

versandt werden.

4.2.3 Aktualisierende Daten

[Anforderungen siehe 3.1.3]

HTTP/2

Da dieser Anwendungsfall nicht dem Request/Response-Muster entspricht, wird

hierfur HTTP/2 Long Polling verwendet. Der JMeter-Client sendet einen Long Pol-

ling Request mit großem Timeout an den Server. Der Server halt an dem Request

fest, bis die gewunschte Information verfugbar ist.

Ein weiterer, unabhangiger JMeter-Client sendet in einem festgelegten Intervall die

Informationen uber einen HTTP POST-Request an den Server. Sobald der Request

den Server erreicht, gibt dieser dem Long Polling Request das Signal, dass die Infor-

mation verfugbar ist. Der Long Polling JMeter-Client erhalt nun die Response auf

den Request.

WebSocket

Der JMeter Client erstellt eine WebSocket-Verbindung mit dem Server, abonniert

eine STOMP-Destination und wartet auf ankommende Nachrichten.

Ein weiterer JMeter-Client sendet in einem festgelegten Intervall die Informationen

uber einen HTTP POST-Request an den Server. Sobald der Request den Server

erreicht, leitet dieser die Informationen unmittelbar an den WebSocket-Client uber

die STOMP-Destination weiter.

RabbitMQ

Analog zur Umsetzung des WebSockets wird der Anwendungsfall mit RabbitMQ um-

gesetzt. Der JMeter-Client besitzt einen Consumer, der eine Message Queue abon-

niert hat und auf verfugbare Nachrichten wartet.

24

4. Implementierung

Parallel sendet ein weiterer JMeter-Client in einem festgelegten Intervall die Infor-

mationen uber einen HTTP POST-Request an den Server. Sobald der Request den

Server erreicht, leitet dieser die Informationen unmittelbar uber eine Exchange an

die Queue weiter, die vom JMeter-Client abonniert ist.

4.2.4 Mehrere Clients

[Anforderungen siehe 3.1.4]

HTTP/2

Dieser Anwendungsfall ist eine Erweiterung des Vorangegangenen und verhalt sich

demnach sehr ahnlich. Es gibt einen JMeter-Client, der in einem festgelegten Inter-

vall die zu verbreitenden Informationen uber einen HTTP POST-Request an den

Server sendet. Parallel gibt es weitere JMeter-Clients, die mit dem Server uber Long

Polling Requests verbunden sind. Bei Eingang der Informationen am Server erken-

nen die Long Polling Requests die Verfugbarkeit der Daten und die Clients erhalten

die Informationen als Response.

WebSocket

Fur den WebSocket wurde die Umsetzung dieses Anwendungsfalls ebenfalls ahnlich

zum Vorangegangenen gestaltet. Der POST-Request stellende Client und das Ver-

halten des Servers sind gleich. Nun gibt es jedoch eine Anzahl von JMeter-Clients,

die uber WebSocket-Verbindungen mit dem Server verbunden sind und die STOMP-

Destination fur den Broadcast abonniert haben. Somit erhalten alle diese Clients die

Daten.

RabbitMQ

Wieder gibt es einen Client, der in einem festgelegten Intervall die zu verbreitenden

Daten uber einen HTTP POST-Request an den Server sendet. Zudem gibt es eine

Anzahl weiterer JMeter-Clients, die die Daten erhalten sollen. Um zu ermoglichen,

dass der Consumer in jedem dieser Clients die Informationen erhalt, ist es notwendig,

dass jeder Client eine eigene Message Queue im Message Broker hat, welche von dem

entsprechenden Consumer abonniert ist. In den bisherigen Anwendungsfallen wur-

den stets Direct Exchanges verwendet. Nun wird eine Fanout Exchange verwendet,

die unabhangig von Routing-Keys die Nachrichten an alle Queues weiterleitet, die

uber ein Binding verbunden sind. Der Server leitet bei Eingang des HTTP POST-

Requests die Informationen unmittelbar an die Fanout Exchange weiter.

25

4. Implementierung

4.2.5 Neu-Verbindung

[Anforderungen siehe 3.1.5]

HTTP/2

Dieser Anwendungsfall kann mit HTTP/2 nicht umgesetzt werden, da HTTP ein

zustandsloses Protokoll ist. Daher konnen Verbindungen von anderen Clients oder

dem Server nicht einfach abgebrochen werden.

WebSocket

Ein JMeter-Client stellt eine WebSocket-Verbindung mit dem Server her und abon-

niert eine STOMP-Destination. Falls die Verbindung abbricht, wird unmittelbar eine

neue WebSocket-Verbindung hergestellt und die Destination abonniert.

Der Java-Server registriert jede neue WebSocket-Verbindung in einem Session Hand-

ler. In einem festgelegten Intervall bricht der Session Handler alle bekannten WebSocket-

Verbindungen ab. Der betroffene Client erhalt daraufhin die Benachrichtigung, dass

die Verbindung abgebrochen ist und stellt eine neue Verbindung her.

RabbitMQ

Ein JMeter-Client besitzt einen RabbitMQ Consumer, der mit einer Message Queue

verbunden ist und bei Abbruch der Verbindung sofort eine neue Verbindung zu

dieser Message Queue aufbaut.

Die Verbindung des Clients zur Message Queue kann extern abgebrochen werden,

indem ein HTTP DELETE-Request mit dem Verbindungsnamen der abzubrechen-

den Verbindung an die RabbitMQ API getatigt wird. Hierfur muss zunachst der

zufallig generierte Verbindungsname herausgefunden werden. Dies ist durch einen

weiteren API Aufruf an RabbitMQ moglich. Nach Verbindungsabbruch erhalt der

betroffene Client eine Benachrichtigung uber den Verbindungsabbruch.

Die Operationen zum Herausfinden der Verbindungsnamen und zum Abbrechen der

Verbindungen werden in einem festgelegten, periodischen Intervall durchgefuhrt.

4.3 Messung

Dieser Abschnitt diskutiert die Testumgebung sowie die Rolle von Docker und Li-

mitierungen. Zunachst wird beschrieben wie in den einzelnen Bereichen entschieden

wurde und argumentiert, aus welchen Grunden die Entscheidungen getroffen wur-

den. Limitierungen beschreiben potenzielle Probleme und Fehlerquellen in der Te-

stumgebung. Informationen zur Durchfuhrung der Tests sind in [A.1] zu finden.

26

4. Implementierung

4.3.1 Umgebung

Bei der Durchfuhrung der Tests gibt es funf Moglichkeiten die Hardware der Te-

stumgebung zu gestalten:

1. Clients, Server und RabbitMQ laufen auf derselben Hardware ohne Isolierung

2. Clients, Server und RabbitMQ laufen als isolierte Prozesse auf derselben Hard-

ware

3. Clients, Server und RabbitMQ laufen als isolierte virtuelle Maschinen auf der-

selben Hardware

4. Clients, Server und RabbitMQ laufen auf eigenen physischen Maschinen in

demselben Netzwerk

5. Clients, Server und RabbitMQ laufen auf eigenen, isolierten Online Servern

eines Cloud-Anbieters

Fur Performance Tests ist es wichtig, dass die Komponenten isoliert voneinander

sind, nicht von anderen Prozessen wissen und diese vor allem nicht beeintrachtigen.

Damit bleiben Option 2 bis Option 5 ubrig. In der Anforderungsanalyse lautete eine

der nicht-funktionalen Anforderungen [siehe 3.2] Reproduzierbarkeit. Eine einfache

Reproduzierbarkeit ist nur gegeben, wenn die Tests auf einer einzigen Hardware

durchgefuhrt werden konnen, Option 4 und 5 scheiden daher aus. Fur Option 5

ist ebenfalls anzumerken, dass viele online Server-Instanzen physische Hardware-

ressourcen untereinander teilen. Von den beiden verbleibenden Optionen 2 und 3

fallt die Entscheidung auf Option 2, da bei der Virtualisierung ein gewisser Over-

head anfallt, der die CPU verlangsamt. Das leichtgewichtige Containerisieren zur

Prozessisolierung bei Option 2 ist daher die bessere Wahl.

Potenzielle Limitierungen durch die Wahl von Option 2 werden in [4.3.3] disku-

tiert.

Die verwendete Hardware hat folgende Spezifikation:

Element Wert

Modell Lenovo Thinkpad T470sBetriebssystem Microsoft Windows 10 Enterprise 10.0.18362Prozessor Dual Core Intel Core i7-7500U 2.70 GHzRAM 24.0 GB

Tabelle 4.1: Spezifikation der Hardware

4.3.2 Docker

Fur die Containerisierung und damit die Isolierung der Prozesse wird Docker ge-

nutzt. Ein weiterer wichtiger Grund fur die Nutzung von Docker ist die Reprodu-

zierbarkeit, die dadurch gegeben ist, dass die Anwendungen unabhangig vom System

gestartet werden konnen.

27

4. Implementierung

Die Spring Boot-Serveranwendung, die JMeter-Clients und RabbitMQ sollen in

Docker-Containern uber eine docker-compose.yml Datei gestartet werden. Hierfur

werden die Docker Images fur diese drei Komponenten benotigt.

Die Spring Boot-Anwendung wird auf Basis des offiziellen Images openjdk:11 er-

stellt. Fur RabbitMQ wird das offizielle Image rabbitmq:3-management-alpine

verwendet. Das Docker Image von JMeter benotigt vier Plugins. Es konnte kein

offentliches Docker Image mit allen benotigten Plugins gefunden werden, weshalb

auf Grundlage des JMeter-Images von egaillardon [25] ein eigenes Dockerfile erstellt

wurde.

Die Images werden in einer erstellten docker-compose Datei referenziert. Zusatzlich

werden fur jede der drei Komponenten die benotigten Konfigurationen getroffen.

Genauere Angaben zur Konfiguration in docker-compose.yml sind in [A.1] zu fin-

den.

4.3.3 Limitierungen

Die getroffenen Entscheidungen bezuglich der Testumgebung sind nicht fehlerfrei

und bringen gewisse Einschrankungen mit sich. Die Limitierungen werden in diesem

Unterkapitel diskutiert.

Geteilte Ressourcen

In [4.3.1] wurde entschieden, die Tests lokal auf einer einzigen Hardware auszufuhren.

Da somit Clients und Server parallel die Systemressourcen nutzen mussen, ist es nur

schwer abzuschatzen, wie viele Ressourcen von welcher Komponente beansprucht

werden. Das kann bei Performance-Tests zu Messungenauigkeiten fuhren.

Virtualisierung

Die Tests werden mit Docker auf einem Windows-Betriebssystem durchgefuhrt,

wofur das Werkzeug Docker Desktop for Windows genutzt wird. Ein Grund zur

Nutzung von Docker ist die Leichtgewichtigkeit gegenuber virtuellen Maschinen, die

einen Virtualisierungsoverhead haben. Docker Desktop for Windows nutzt jedoch

die Technologie der Engine Hyper-V. Hyper-V ist eine Virtualisierungssoftware, die

benotigt wird, um einen Linux Kernel zu simulieren. Dies lasst vermuten, dass trotz

des angestrebten Vermeidens einer virtuellen Maschine durch Docker ein Overhead

existiert und die Performance beeintrachtigt werden kann.

Nur eine Softwareplattform

Sowohl der Server als auch JMeter sind Java-Anwendungen. Alles Tests werden

ausschließlich in dieser Kombination durchgefuhrt und Resultate konnen auf anderen

Plattformen wie beispielsweise node.js potenziell abweichen.

28

Auswertung

In diesem Kapitel werden die Testergebnisse ausgewertet. Jeder Anwendungsfall

wird individuell betrachtet und die wichtigsten Eigenschaften beschrieben. Dazu

gehort die Definition der Metrik, die fur den Vergleich herangezogen wird und die

Benennung aller Parameter, die fur den Test elementar sind. Jeder einzelne Test wird

dreimal ausgefuhrt. Aus den Messergebnissen der drei Durchlaufe wird das arith-

metische Mittel berechnet. Fur die Anwendungsfalle [3.1.1] bis [3.1.4] fließen die

anfanglichen Verbindungszeiten der jeweiligen Technologie nicht in die Berechnung

mit ein. Fur jeden Anwendungsfall werden die Resultate prasentiert und beschrie-

ben.

5.1 Anfrage unabhangiger Objekte

Die Vergleichsmetrik dieses Anwendungsfalls ist die Zeit vom Senden des ersten

Requests, bis zum vollstandigen Erhalt des letzten Objekts.

Fur diesen Anwendungsfall wird die Vergleichsmetrik fur zwei unterschiedliche Pa-

rameter berechnet. Zunachst ist die Anzahl der benotigten Objekte der variierende

Parameter. In den zweiten Tests wird die Zielmetrik in Abhangigkeit von der Große

eines einzelnen Objekts berechnet.

In den ersten Tests ist die Objektgroße auf 1 KB festgelegt. Die Objektanzahl hat

einen minimalen Wert von 1 und einen maximalen Wert von 1000. In diesem Be-

reich werden 12 Tests ausgefuhrt. Fur jeden Testdurchlauf wird die Vergleichsmetrik

berechnet, indem der Zeitpunkt des Eingangs des letzten Objekts beim Client von

dem Zeitpunkt des Sendens der ersten Anfrage subtrahiert wird.

29

5. Auswertung

1 100 200 300 400 500 600 700 800 900 1,0000

200

400

600

800

1,000

1,200

1,400

1,600

1,800

2,000

Anzahl der benotigten Objekte

Lat

enz

[in

ms]

HTTP/2WebSocketRabbitMQ

Abbildung 5.1: Latenzen, abhangig von der Objektanzahl

In Abbildung [5.1] kann man erkennen, dass die Verzogerung bei allen drei Technolo-

gien bei unter 50 ms fur das Anfragen und Erhalten eines einzigen Objekts liegt. Die

Verzogerung bei HTTP/2 steigt bis zu einer Anzahl von 100 benotigten Objekten

schnell an und wachst von dort relativ gleichmaßig mit einer Steigung von 100 ms

bis 150 ms pro 100 zusatzlicher Objekte. Die maximale Verzogerung liegt bei 900

Objekten und 1589 ms.

Beim WebSocket ist ein gleichmaßigerer Verlauf zu erkennen. Im Vergleich zu HTT-

P/2 gibt es anfangs keine starken Schwankungen und Verzogerungen bleiben kon-

stant bei Werten, die weniger als die Halfte der Vergleichswerte von HTTP/2 betra-

gen. Die viel kleinere Latenz ist unter anderem damit zu erklaren, dass der Server

nach der ersten Anfrage vom Client alle Objekte ohne weitere Anfragen, entge-

gen des Request/Response Musters, an den Client senden kann. Ab einer Anzahl

von mehr als 500 Objekten, die vom Client verarbeitet werden mussen, bricht die

WebSocket-Verbindung ab und zukunftige Daten gehen verloren.

RabbitMQ hat ahnlich zum WebSocket einen gleichmaßigen, aber flachen, Anstieg

von durchschnittlich ungefahr 75 ms pro 100 zusatzlicher Objekte. Die Verzogerung

liegt knapp uber der des WebSockets, jedoch deutlich unter der von HTTP/2. Die

maximale Verzogerung liegt bei 1000 Objekten und 772 ms. Im Gegensatz zum

WebSocket gehen keine Informationen verloren.

In den zweiten Tests ist die Anzahl der Objekte auf 10 festgelegt. Die Große eines

einzelnen Objekts variiert von minimal 1 KB bis zu maximal 50 KB. In diesem

Bereich werden 6 Tests durchgefuhrt. Die Berechnung der Vergleichsmetrik verlauft

30

5. Auswertung

analog zu den ersten Tests.

1 5 10 15 20 25 30 35 40 45 500

20

40

60

80

100

120

140

160

180

200

Große eines einzelnen Objekts [in KB]

Lat

enz

[in

ms]

HTTP/2WebSocketRabbitMQ

Abbildung 5.2: Latenzen, abhangig von der Objektgroße

In Abbildung [5.2] ist festzustellen, dass sich die Technologien im Bereich 1 KB bis

50 KB sehr ahnlich zueinander verhalten. HTTP/2 hat die besten Ergebnisse mit

einer maximalen Verzogerung von 113 ms.

Beim WebSocket sind die großten Verzogerungen zu erkennen. Trotz der hoheren

Latenz weist die Steigung einen gleichmaßigen Verlauf von 63 ms zu 163 ms auf. Die

erhohte Latenz kann mit der definierten Frame Size zusammenhangen. Diese betragt

in der vorliegenden Implementierung standardmaßig 8196 Bytes. Wird ein Objekt

versendet, welches diesen Wert uberschreitet, mussen die Daten auf mehrere Nach-

richten aufgeteilt und somit insgesamt mehr Nachrichten gesendet werden.

Der Verlauf von RabbitMQ liegt ungefahr in der Mitte zwischen HTTP/2 und dem

WebSocket. Die maximale Verzogerung in dem getesteten Bereich ist bei 50 KB

und 139 ms. Damit liegt dieser Hochstwert zwischen dem des WebSockets und von

HTTP/2.

5.2 Informationsabhangigkeit

Die Vergleichsmetrik dieses Anwendungsfalls ist die Zeit vom Senden des ersten

Requests, bis zum vollstandigen Erhalt der letzten Daten beim Client.

31

5. Auswertung

Die zugrundeliegenden Parameter werden in Tabelle [5.1] genannt.

Parameter Wert

Objektanzahl 100Objektgroße 1 KBAnteil der Objekte, die von einem anderen abhangig sind variiert

Tabelle 5.1: Parameter fur Anwendungsfall 2

Der Anteil der Objekte, die von einem anderen abhangig sind, hat in den ersten Tests

einen Wert von 25 %. In den darauffolgenden Tests wird dieser Wert auf 50 % erhoht

und in letzten Tests ist jedes Objekt von dem zuvor angefragten Objekt abhangig.

Lediglich das erste Objekt hat keine Abhangigkeit, somit betragt der Prozentwert

99 %. Wie in Anwendungsfall 1, wird fur jeden Testdurchlauf die Vergleichsmetrik

berechnet, in dem der Zeitpunkt des Eingangs des letzten Objekts beim Client, von

dem Zeitpunkt des Sendens der ersten Anfrage subtrahiert wird.

0 25 50 75 990

100

200

300

400

500

600

700

800

900

1,000

Anteil der Objekte mit Abhangigkeit [in %]

Lat

enz

[in

ms]

HTTP/2WebSocketRabbitMQ

Abbildung 5.3: Latenzen, abhangig von dem Anteil der Objekte mit Informations-abhangigkeit

In Abbildung [5.3] ist zu erkennen, dass HTTP/2 nicht bedeutend von dem va-

riierenden Anteil abhangiger Objekte beeinflusst wurde. Erwartet wurde, dass ei-

ne Erhohung des Anteils mit einer Erhohung der Latenz einhergeht, da HTTP/2

aufgrund von Multiplexing asynchrone Requests stellen kann. Die Erhohung der

Abhang-igkeit erhoht den Anteil der Requests, die synchronisiert sein mussen. Die-

se Tatsache scheint bei den festgelegten Parametern keinen großen Einfluss auf die

Resultate zu haben.

32

5. Auswertung

Der Verlauf des WebSockets zeigt eine stetig positive Steigung. Besonders auffallig

ist, dass ich die Latenz zwischen 0 % und 25 % mehr als verdoppelt, da nun

zusatzliche Anfragen getatigt werden mussen. Die maximale Verzogerung liegt mit

644 ms bei 99 % deutlich hoher als HTTP/2 und RabbitMQ.

RabbitMQ hat anfangs einen ahnlich starken Anstieg der Latenz wie der WebSocket,

was auch auf die Notwendigkeit zusatzlicher Anfragen zuruckzufuhren ist. Nach Er-

reichen der 25 %, flacht die Kurve jedoch stark ab und hat, wie HTTP/2, kaum

noch Schwankungen. Mit einer maximalen Verzogerung von 432 ms bei 99 % An-

teil von Objekten mit Abhangigkeit auf andere Objekte hat RabbitMQ die besten

Ergebnisse.

5.3 Aktualisierende Daten

Die Vergleichsmetrik dieses Anwendungsfalls ist die Latenz zwischen dem Senden

der Daten vom Client zum Server und dem vollstandigen Erhalt der Daten

bei dem anderen Client.

Die zugrundeliegenden Parameter werden in Tabelle [5.2] genannt.

Parameter Wert

Datengroße 1 KBIntervall, in dem die Daten an den Server gesendet werden variiert

Tabelle 5.2: Parameter fur Anwendungsfall 3

Das Intervall, in dem die Daten an den Server gesendet werden, hat anfangs einen

Wert von 10 Sekunden. Dieses Intervall wird stetig kleiner und hat schließlich einen

minimalen Wert von 0,05 Sekunden. Fur jeden Testdurchlauf wird ein Durchschnitts-

wert berechnet. Dieser setzt sich aus den ersten 18 Werten zusammen, die berechnet

werden, in dem der Zeitpunkt des Eingangs der Daten beim Client von dem Zeit-

punkt des Sendens des entsprechenden POST-Requests subtrahiert wird. Der ers-

te Wert wird von der Durchschnittswertberechnung ausgenommen, da dieser große

Schwankungen aufweist.

33

5. Auswertung

10 5 2.5 1.25 0.62 0.31 0.15 0.07 0.04

5

10

15

20

25

30

35

40

45

50

Intervall [logarithmisch in Sekunden]

Lat

enz

[in

ms]

Long PollingWebSocketRabbitMQ

Abbildung 5.4: Latenzen, abhangig von der Große des Intervalls, in dem sich Datenaktualisieren

Die Abbildung [5.4] zeigt fur den WebSocket und RabbitMQ einen sehr ahnlichen

Verlauf, bei Long Polling weicht dieser ab. Sowohl bei RabbitMQ, als auch dem

WebSocket ist die Latenz durch die Große des Intervalls nicht bedeutend beein-

flusst.

HTTP Long Polling hat bei jedem Intervall im Vergleich die großten Verzogerungen.

Auffallig ist die abrupte Steigung vom Intervall 0,5 Sekunden zu 0,1 Sekunden.

Ab dem Intervall von 0,1 Sekunden, erreichen zudem nicht mehr alle Daten den

Client. Bei 0,1 Sekunden konnten 45 % der HTTP/2 POST-Requests nicht am Server

verarbeitet werden. Bei einem Intervall von 0,05 Sekunden lag der Wert bei 52 %. Es

ist ebenfalls zu beachten, dass es nach Erhalt der Informationen beim Client einen

gewissen Zeitraum gibt, bis ein neuer Long Polling Request den Server erreicht. In

diesem Zeitraum kann ein Client potenzielle neue Daten nicht erhalten.

Die Latenz des WebSockets und von RabbitMQ unterscheiden sich in diesem An-

wendungsfall kaum. Aufgrund des Pub/Sub Systems gibt es bei diesen Technologien

keinen Zeitraum, in dem der Client nicht verfugbar ist. Fur diesen Anwendungsfall

sind die beiden Technologien gut ausgelegt und ermoglichen eine sehr gute Perfor-

mance.

34

5. Auswertung

5.4 Mehrere Clients

Die Vergleichsmetrik dieses Anwendungsfalls ist die Latenz zwischen dem Senden

der Daten vom Client zum Server und dem Moment, in dem der letzte

Client diese Daten vollstandig erhalten hat.

Die zugrundeliegenden Parameter werden in Tabelle [5.3] genannt.

Parameter Wert

Datengroße 1 KBIntervall der HTTP POST-Requests 5 SekundenAnzahl weiterer Clients variiert

Tabelle 5.3: Parameter fur Anwendungsfall 4

Die Anzahl der weiteren Clients betragt anfangs 1 und steigert sich uber insgesamt

11 Tests zu einem Wert von 100. Fur jeden Testdurchlauf wird ein Durchschnittswert

berechnet. Dieser setzt sich aus 12 Werten zusammen, die berechnet werden, indem

der Zeitpunkt des Eingangs der Daten beim letzten Client von dem Zeitpunkt des

Sendens des entsprechenden POST-Requests subtrahiert wird.

1 10 20 30 40 50 60 70 80 90 1000

50

100

150

200

250

300

Anzahl der Clients

Lat

enz

[in

ms]

Long PollingWebSocketRabbitMQ

Abbildung 5.5: Latenzen, abhangig von der Anzahl der Clients

In Abbildung [5.5] ist zu erkennen, dass alle Technologien mit dem Anstieg an Clients

auch einen Anstieg an Latenz aufweisen. HTTP/2 hat gesamtheitlich die großte

Steigung und ebenfalls den Verlauf mit den meisten Schwankungen. Die maximale

Latenz wird in dem gewahlten Bereich bei einer Anzahl von 100 Clients erreicht und

betragt 252 ms.

35

5. Auswertung

Der Verlauf der WebSockets ist im Vergleich flach und steigt nur leicht. Die anfang-

liche Latenz von 17 ms erreicht einen maximalen Wert von 40 ms. Damit weist der

WebSocket die mit Abstand besten Resultate auf und liegt im maximalen Wert 84

% unter dem von Long Polling.

Die Latenz bei RabbitMQ steigt gleichmaßig mit einer durchschnittlichen Steigung

von weniger als 8 ms pro 10 zusatzlicher Clients. Der Verlauf von RabbitMQ befindet

sich damit im Bereich von 1 bis 100 Clients stets zwischen Long Polling und dem

WebSocket. Der Hochstwert ist dabei aber noch deutlich unter dem von Long Polling

und betragt weniger als 50 % des Vergleichswerts.

5.5 Neu-Verbindung

Die Vergleichsmetrik dieses Anwendungsfalls ist die Zeit zwischen Verbindungs-

abbruch und vollstandiger Neu-Verbindung.

Die Verbindungsabbruche finden in einem Intervall von 10 Sekunden statt. Dieser

Abstand soll sicherstellen, dass es keinen Einfluss auf die Neu-Verbindungszeit gibt.

Fur jeden Testdurchlauf wird ein Durchschnittswert berechnet. Dieser setzt sich

aus 6 Werten zusammen, die jeweils berechnet werden, indem der Zeitpunkt des

erneuten Wartens auf verfugbare Nachrichten von dem Zeitpunkt des Eingangs der

Benachrichtigung eines Verbindungsabbruchs subtrahiert wird.

0 10 20 30 40 50 60 70 80 90 100 110

92

51

Zeit [in ms]

WebSocketRabbitMQ

Abbildung 5.6: Zeit zwischen einem Verbindungsabbruch und der erneuten Verbin-dungsherstellung

Mit 92 ms ist die Neu-Verbindungszeit des WebSockets deutlich hoher als die der

Message Queue. Der WebSocket nutzt das STOMP-Protokoll und muss daher nach

erfolgreicher Verbindung auch den gewunschten Endpunkt abonnieren, um in der

36

5. Auswertung

Lage zu sein, Nachrichten zu empfangen. Zusatzlich zu einer hoheren Zeit sind zudem

alle Nachrichten verloren, die in diesem Zeitraum den Client erreichen sollten.

Der Consumer fur RabbitMQ benotigt durchschnittlich nur 51 ms, um wieder mit

der Message Queue verbunden zu sein. Nachrichten, die wahrend der Abwesenheit an

diese Queue gesendet wurden, sind dort verblieben und konnen direkt vom Consumer

konsumiert werden.

37

Fazit

In diesem Kapitel wird auf Grundlage der Resultate zusammengefasst, wie gut die

Technologien im Vergleich, fur welche A12 Business-Anwendungen geeignet sind. Der

Aspekt der Performance ist hierbei elementar, weitere Faktoren die bei individuellen

Anwendungsfallen eine Rolle spielen, sowie der Entwicklungsaufwand, fließen jedoch

auch in die Bewertung ein.

6.1 HTTP/2

Der Entwicklungsaufwand zur Implementierung von HTTP/2 in einer Applikation

ist vergleichsweise gering. Es muss jedoch darauf geachtet werden, dass in moder-

nen Browsern eine Unterstutzung nur gegeben ist, wenn eine HTTPS-Verbindung

besteht. Insgesamt muss somit lediglich TLS eingerichtet und beliebige Endpunkte

erstellt werden. Zur Implementierung von Long Polling sind keine weiteren Konfi-

gurationen notig.

Die Verwendung von HTTP/2 ist eine gute Option, wenn Daten nach dem Re-

quest/Response Muster einzeln angefragt werden sollen. Insbesondere, wenn weni-

ge, große Objekte transferiert werden, performed HTTP/2 sehr gut und bietet im

Bereich von einer Objektgroße von 10 KB bis 50 KB eine durchschnittlich 22,4% ge-

ringere Ubertragungszeit als RabbitMQ. Im Vergleich mit dem WebSocket betragt

der Wert 32,2%.

Wenn viele Daten kleiner Große ubermittelt werden, oder sich Live-Daten in Inter-

vallen aktualisieren, uberzeugt HTTP/2 und Long Polling nicht. Hier gibt es durch

WebSockets und Message Queues deutlich bessere Alternativen.

6.2 WebSocket

Die Implementierung eines WebSockets mit STOMP ist fur einen Entwickler nur in

geringem Maße aufwendiger als HTTP/2. Da die Verbindung uber HTTP/HTTPS

initialisiert wird, ist diese Konfiguration notwendig. Die weitere benotigte Konfi-

guration, die sich auf die Registrierung der gewunschten STOMP-Endpunkte be-

schrankt, stellt kaum Mehraufwand dar. Bei WebSockets hat der Entwickler auf-

38

6. Fazit

grund der Eigenschaft der Zustandsbehaftung die Moglichkeit, Sessions zu verwal-

ten und damit Kontrolle uber die WebSocket-Verbindungen mit Clients zu erhalten.

Eine aufwendigere Implementierung ist somit moglich, aber nicht notig.

Der WebSocket bietet sehr gute Ergebnisse bezuglich der Performance bei der Uber-

mittlung von konstant aktualisierenden Daten. Das WebSocket-Protokoll hat hier

die geringste Latenz, die insbesondere bei A12 Business-Anwendungen mit einer

hoheren Anzahl von Clients im getesteten Bereich uberzeugt. Bei 100 Clients spart

der WebSocket durchschnittlich 63% Verzogerungszeit im Vergleich zu der Message

Queue. Im Vergleich zu HTTP Long Polling betragt der Wert sogar 84%. WebSockets

bieten im Vergleich eine besonders gute Performance, wenn die Nachrichtengroße

nicht die Frame-Size ubersteigt.

Das WebSocket Protokoll ist nicht dafur ausgelegt nach dem Request/Response

Muster Nachrichten zu ubermitteln, was sich auch in der Performance widerspiegelt.

Wenn es von großer Relevanz ist, dass Nachrichten niemals verloren gehen, sollten

WebSockets ohne Queue ebenfalls nicht verwendet werden. Nachrichten sind nicht

persistent und die Zeit zur Neu-Verbindung eines WebSockets mit STOMP ist fast

doppelt so groß wie die benotigte Zeit der Message Queue.

6.3 RabbitMQ

Die Implementierung des Message Brokers RabbitMQ ist deutlich aufwendiger als

die der WebSockets oder HTTP/2. Durch RabbitMQ wird eine gesamte, zusatzliche

Anwendung Teil der Verwaltung fur den Entwickler. Teil der Entwicklung ist das

Definieren aller gewunschten Komponenten, wie User, Exchanges, Queues und Bin-

dings, welche jeweils eigene Konfigurationen benotigen. Im Gegensatz zu HTTP/2

und WebSockets haben die meisten Message Broker jedoch den Vorteil, dass die

Lastverteilung nicht aufwendig implementiert werden muss, sondern bereits inte-

griert ist.

Fur das Senden vieler, unabhangiger Informationen, im getesteten Bereich von bis

zu 1000 Objekten, bietet RabbitMQ eine sehr gute Performance. Bei 1000 Objekten

benotigt die Message Queue weniger als 50% der Zeit von HTTP/2. Auch bei A12

Business-Anwendungen, die das Request/Response Muster bedingen, performed die

AMQP-Implementierung gut. Hierfur kann der einfach zu implementierende Remo-

te procedure call (RPC) genutzt werden [26]. Fur standig aktua-lisierende Daten ist

RabbitMQ ebenfalls sehr gut geeignet und bietet eine Latenz, die fur einen Client mit

dem WebSocket zu vergleichen ist. Mit einer steigenden Anzahl von Clients, steigt

jedoch auch die Abweichung zum WebSocket, liegt aber bei 100 Clients mehr als

50% unter den Resultaten von Long Polling und ist deshalb akzeptabel. Zusatzlich

sind Nachrichten persistent in der Queue und daher vor potenziellen Verbindungs-

abbruchen oder Uberlastungen geschutzt.

Die Message Queue liefert die besten Resultate bezuglich der Performance wenn die

Nachrichtengroße gering ist. In dem Bereich von 10 KB bis zu 50 KB kann RabbitMQ

39

6. Fazit

damit nicht mit den Resultaten von HTTP/2 mithalten und hat durchschnittlich

28% großere Verzogerungen. Fur diese A12 Business-Abwendungen gibt es somit

eine bessere Alternative fur moglichst geringe Latenzen.

40

Quellenverzeichnis

[1] David E. Steitz und Allen Kenitzer. NASA FINDS PROBLEMS IN EOS-

DIS FLIGHT OPERATIONS SOFTWARE DEVELOPMENT. 10. Apr. 1998.

url: https://www.nasa.gov/home/hqnews/1998/98-060.txt (besucht am

27. 09. 2020).

[2] Trade Delays Lead To Compensation — The Spokesman-Review. 31. Okt.

1997. url: https://www.spokesman.com/stories/1997/oct/31/trade-

delays-lead-to-compensation/ (besucht am 27. 09. 2020).

[3] “Client-Server Model”. In: 16 (2014), S. 57–71. issn: 22788727, 22780661. doi:

10.9790/0661- 16195771. url: http://www.iosrjournals.org/iosr-

jce/papers/Vol16-issue1/Version-9/J016195771.pdf.

[4] Øyvind Raasholm Tangen. “Real-Time Web with WebSocket”. In: (Mai 2015).

url: https://www.duo.uio.no/bitstream/handle/10852/44808/7/

tangen-master.pdf.

[5] Apache JMeter - Apache JMeter™. url: https://jmeter.apache.org/

index.html (besucht am 03. 09. 2020).

[6] Sai Matam und Jagdeep Jain. Pro Apache JMeter: Web Application Perfor-

mance Testing. Google-Books-ID: YJ4xDwAAQBAJ. Apress, Aug. 2017. isbn:

978-1-4842-2961-3.

[7] mgm: A 12. url: https://www.mgm-tp.com/produkte/a12/ (besucht am

17. 09. 2020).

[8] Jeffrey C. Mogul u. a. Hypertext Transfer Protocol – HTTP/1.1. url: https:

//tools.ietf.org/html/rfc2068 (besucht am 17. 09. 2020).

[9] Roy Fielding und Julian Reschke. Hypertext Transfer Protocol (HTTP/1.1):

Message Syntax and Routing. url: https://tools.ietf.org/html/rfc7230

(besucht am 17. 09. 2020).

[10] Mike Belshe, Martin Thomson und Roberto Peon. Hypertext Transfer Protocol

Version 2 (HTTP/2). url: https://tools.ietf.org/html/rfc7540#page-

4 (besucht am 17. 09. 2020).

41

6. QUELLENVERZEICHNIS

[11] Nagy Ramadan und Ihab Mohamed. “Impact of Implementing HTTP/2 in

Web Services”. In: International Journal of Computer Applications 147.9 (Aug.

2016), S. 27–32. issn: 09758887. doi: 10.5120/ijca2016911182. url: http:

//www.ijcaonline.org/archives/volume147/number9/darwish-2016-

ijca-911182.pdf (besucht am 17. 09. 2020).

[12] hjp: doc: RFC 6202: Known Issues and Best Practices for the Use of Long

Polling and Streaming in Bidirectional HTTP. url: https://www.hjp.at/

doc/rfc/rfc6202.html#sec_1 (besucht am 18. 09. 2020).

[13] hjp: doc: RFC 6455: The WebSocket Protocol. url: https://www.hjp.at/

doc/rfc/rfc6455.html#sec_1 (besucht am 21. 09. 2020).

[14] STOMP. url: https://stomp.github.io/stomp-specification-1.2.

html (besucht am 23. 10. 2020).

[15] Sanika Raje. “Performance Comparison of Message Queue Methods”. In: (Aug.

2019), S. 69. url: https://digitalscholarship.unlv.edu/cgi/viewcontent.

cgi?article=4749&context=thesesdissertations.

[16] Gregory Marsh u. a. “Scaling Advanced Message Queuing Protocol (AMQP)

Architecture with Broker Federation and InfiniBand”. In: (2008). url: ftp:

//ftp.cse.ohio-state.edu/pub/tech-report/2009/TR17.pdf.

[17] Andre Laszlo. “A Distributed Publish/Subscribe System built on a DHT Sub-

strate”. In: (2016), S. 86. url: https://odr.chalmers.se/bitstream/20.

500.12380/232548/1/232548.pdf.

[18] Andrew Silver. “Software simplified”. In: Nature News 546.7656 (Juni 2017).

Section: Toolbox, S. 173. doi: 10.1038/546173a. url: http://www.nature.

com/news/software-simplified-1.22059 (besucht am 19. 10. 2020).

[19] Babak Bashari Rad, Harrison Bhatti und Mohammad Ahmadi. “An Intro-

duction to Docker and Analysis of its Performance”. In: IJCSNS Interna-

tional Journal of Computer Science and Network Security 173 (Marz 2017),

S. 8. url: https://www.researchgate.net/publication/318816158_An_

Introduction_to_Docker_and_Analysis_of_its_Performance.

[20] James Turnbull. The Docker Book: Containerization Is the New Virtualization.

Google-Books-ID: 4xQKBAAAQBAJ. James Turnbull, Juli 2014. isbn: 978-

0-9888202-0-3.

[21] Daniel Nust u. a. “Ten Simple Rules for Writing Dockerfiles for Reproducible

Data Science”. In: (Apr. 2020). Publisher: OSF Preprints. doi: 10.31219/

osf.io/fsd7t. url: https://osf.io/fsd7t/ (besucht am 24. 09. 2020).

[22] Lawrence Chung u. a. Non-Functional Requirements in Software Engineering.

Google-Books-ID: MNrcBwAAQBAJ. Springer Science & Business Media, Dez.

2012. isbn: 978-1-4615-5269-7.

[23] Usage Statistics of HTTP/2 for Websites, October 2020. url: https : / /

w3techs.com/technologies/details/ce-http2 (besucht am 05. 10. 2020).

42

. QUELLENVERZEICHNIS

[24] RabbitMQ Summit talk recap: Scaling RabbitMQ at Goldman Sachs - Jonathan

Skrzypek - CloudAMQP. 10. Dez. 2018. url: https://www.cloudamqp.com/

blog/2018-12-10-keynote-scaling-rabbitmq-at-goldman-sachs.html

(besucht am 06. 10. 2020).

[25] egaillardon/jmeter-plugins - Docker Hub. url: https://hub.docker.com/r/

egaillardon/jmeter-plugins (besucht am 08. 10. 2020).

[26] RabbitMQ tutorial - Remote procedure call (RPC) — RabbitMQ. url: https:

//www.rabbitmq.com/tutorials/tutorial-six-python.html (besucht am

14. 10. 2020).

43

Anhang

A.1 Testdurchfuhrung

Die docker-compose Datei ist so konfiguriert, dass die drei Komponenten RabbitMQ,

die Spring Boot Serveranwendung und JMeter in eigenen Containern gestartet wer-

den. Der Container fur RabbitMQ bedarf keiner individuellen Konfiguration.

Die Container werden stets nacheinander gestartet und nicht alle auf einmal. Es

wird gewartet, bis der Container den Start vollstandig abgeschlossen hat, erst dann

wird der nachste Container initialisiert. Allgemein gilt die folgende Reihenfolge bei

der Initialisierung der Container:

1. docker-compose up -d rabbitmq

2. docker-compose up -d mvp

3. docker-compose up -d jmeter

Fur die Durchfuhrung der Tests mit HTTP/2 oder WebSockets werden nur die

Schritte 2 und 3 ausgefuhrt.

Bei den Containern der Spring Boot Anwendung und von JMeter bedarf es vor

Durchfuhrung eines Tests der individuellen Konfiguration. In der Serveranwendung

werden @Profiles genutzt, um storende Hintergrundoperationen zu vermeiden. Die

entsprechenden Profiles mussen vor Durchfuhrung eines Tests in Zeile 8 in [A.1]

ausgewahlt werden. Welche Profiles fur welchen Anwendungsfall benotigt werden

ist in Tabelle [A.1] beschrieben.

Fur den JMeter-Container muss der command spezifiziert werden. Hierbei wird in

Zeile 9 von [A.2] die mit JMeter erstellte Testdatei ausgewahlt und in Zeile 10 die

Resultat-Datei festgelegt. JMeter erstellt nach Ausfuhrung des Tests eine csv-Datei

mit den Ergebnismetriken.

44

A. Anhang

Anwendungsfall Technologie aktive Profiles

1 HTTP/2 -1 WebSocket -1 RabbitMQ messageQueues,receiver2 HTTP/2 -2 WebSocket -2 RabbitMQ messageQueues,receiver3 HTTP/2 -3 WebSocket -3 RabbitMQ messageQueues4 HTTP/2 -4 WebSocket -4 RabbitMQ messageQueues5 HTTP/2 -5 WebSocket wsDisconnect5 RabbitMQ messageQueues,mqDisconnect

Tabelle A.1: Aktive Profiles nach Anwendungsfall und Technologie

1 mvp :2 image : b t r e i t z /mvp : l a t e s t3 container name : mvp4 hostname : mvp5 por t s :6 − 8081:80817 environment :8 SPRING PROFILES ACTIVE :

#messageQueues , r e c e i v e r , mqDisconnect , wsDisconnect9 SPRING RABBITMQ HOST: rabbitmq

Quellcode A.1: docker-compose-Konfiguration fur die Spring Boot-Anwendung

1 jmeter :2 image : b t r e i t z / jmeter−p lug in s3 container name : jmeter4 hostname : jmeter5 t ty : t rue6 volumes :7 − . / s r c / [ . . . ] / Scenar i o s / : / jmeter8 command : −−nongui −Jjmetereng ine . f o r c e . system . e x i t=true9 −− t e s t f i l e / [ . . . ] / [ t e s t− f i l e −name ] . jmx10 −− l o g f i l e [ r e su l t− f i l e −name ] . csv

Quellcode A.2: docker-compose-Konfiguration fur Apache JMeter

45

A. Anhang

A.2 Messergebnisse

HTTP/2Szenario Durchl. 1 Durchl. 2 Durchl. 3 Arithm. Mittel Standardabw.

1 25 16 25 22 5,202 95 89 87 90,3 4,163 440 560 414 471,3 77,884 515 571 514 533,3 32,625 838 686 684 736 88,346 874 698 865 812,3 99,127 949 1067 759 925 155,408 1111 991 1206 1102,6 107,749 1192 1083 1125 1133,3 54,98

10 1599 1378 1559 1512 117,7611 1789 1544 1435 1589,3 181,3012 1571 1493 1497 1520,3 43,92

Tabelle A.2: Messergebnisse [in ms] fur Anwendungsfall 1 nach Objektanzahl - HTT-P/2

WebSocketSzenario Durchl. 1 Durchl. 2 Durchl. 3 Arithm. Mittel Standardabw.

1 21 38 39 32,6 10,122 84 49 65 66 17,523 230 155 151 178,6 44,504 187 176 264 209 47,955 294 282 238 271,3 29,486 366 287 329 327,3 39,537 392 514 345 417 87,238 - - - - -9 - - - - -

10 - - - - -11 - - - - -12 - - - - -

Tabelle A.3: Messergebnisse [in ms] fur Anwendungsfall 1 nach Objektanzahl - Web-Socket

46

A. Anhang

RabbitMQSzenario Durchl. 1 Durchl. 2 Durchl. 3 Arithm. Mittel Standardabw.

1 55 32 35 40,6 12,502 56 40 54 50 8,723 137 165 197 166,3 30,024 258 303 295 285,3 24,015 348 337 352 345,6 7,776 465 419 405 429,6 31,397 477 435 513 475 39,048 545 565 549 553 10,589 676 950 681 769 156,77

10 708 809 685 734 65,9611 713 773 785 757 38,5712 807 771 738 772 34,51

Tabelle A.4: Messergebnisse [in ms] fur Anwendungsfall 1 nach Objektanzahl - Rab-bitMQ

HTTP/2Szenario Durchl. 1 Durchl. 2 Durchl. 3 Arithm. Mittel Standardabw.

1 43 60 33 45,3 13,652 90 60 62 70,6 16,773 85 65 60 70 13,234 83 83 77 81 3,465 91 85 80 85,3 5,516 107 119 152 126 23,30

Tabelle A.5: Messergebnisse [in ms] fur Anwendungsfall 1 nach Objektgroße - HTT-P/2

WebSocketSzenario Durchl. 1 Durchl. 2 Durchl. 3 Arithm. Mittel Standardabw.

1 37 89 64 63,3 26,012 101 109 65 91,6 23,443 125 117 126 122,6 4,934 113 112 139 121,3 15,315 168 108 126 134 30,796 173 187 128 162,6 30,83

Tabelle A.6: Messergebnisse [in ms] fur Anwendungsfall 1 nach Objektgroße - Web-Socket

47

A. Anhang

RabbitMQSzenario Durchl. 1 Durchl. 2 Durchl. 3 Arithm. Mittel Standardabw.

1 41 40 57 46 9,542 69 71 135 91,6 37,543 88 99 93 93,3 5,514 109 100 89 99,3 10,025 100 159 126 128,3 29,576 117 129 172 139,3 28,92

Tabelle A.7: Messergebnisse [in ms] fur Anwendungsfall 1 nach Objektgroße - Rab-bitMQ

HTTP/2Szenario Durchl. 1 Durchl. 2 Durchl. 3 Arithm. Mittel Standardabw.

1 572 425 420 472,3 86,352 429 425 624 492,6 113,763 460 421 552 477,6 67,26

Tabelle A.8: Messergebnisse [in ms] fur Anwendungsfall 2 - HTTP/2

WebSocketSzenario Durchl. 1 Durchl. 2 Durchl. 3 Arithm. Mittel Standardabw.

1 521 425 415 453,6 58,532 575 508 553 545,3 34,153 690 592 650 644 49,27

Tabelle A.9: Messergebnisse [in ms] fur Anwendungsfall 2 - WebSocket

RabbitMQSzenario Durchl. 1 Durchl. 2 Durchl. 3 Arithm. Mittel Standardabw.

1 467 306 455 409,3 89,692 357 431 366 384,6 40,383 431 448 416 431,6 16,01

Tabelle A.10: Messergebnisse [in ms] fur Anwendungsfall 2 - RabbitMQ

HTTP Long PollingSzenario Durchl. 1 Durchl. 2 Durchl. 3 Arithm. Mittel Standardabw.

1 21,8 27,4 20,1 23,1 3,822 24,7 18,8 24,8 22,7 3,443 26,3 25,3 19,6 23,7 3,614 21,9 19 14,9 18,6 3,525 10,3 13,8 10,4 11,5 1,996 36,1 33 12,5 27,2 12,827 33,6 23,8 28,5 28,6 4,90

Tabelle A.11: Messergebnisse [in ms] fur Anwendungsfall 3 - HTTP Long Polling

48

A. Anhang

WebSocketSzenario Durchl. 1 Durchl. 2 Durchl. 3 Arithm. Mittel Standardabw.

1 14,7 10,4 10,4 11,8 2,482 7,5 8,4 7,7 7,8 0,473 10,8 13 7,6 10,4 2,724 17,1 8 6,2 10,4 5,845 7,5 4,8 8,1 6,8 1,766 5,4 7,8 7,2 6,8 1,257 5,3 6,5 8 6,6 1,35

Tabelle A.12: Messergebnisse [in ms] fur Anwendungsfall 3 - WebSocket

RabbitMQSzenario Durchl. 1 Durchl. 2 Durchl. 3 Arithm. Mittel Standardabw.

1 14,1 13,1 10,9 12,7 1,642 11,2 12,2 13,3 12,2 1,053 11,5 14,8 11,7 12,6 1,854 15,1 9,2 11,4 11,9 2,985 11,6 10,8 9 10,4 1,336 9,3 5,4 4,4 6,3 2,577 5,4 7,3 9,7 7,4 2,15

Tabelle A.13: Messergebnisse [in ms] fur Anwendungsfall 3 - RabbitMQ

HTTP Long PollingSzenario Durchl. 1 Durchl. 2 Durchl. 3 Arithm. Mittel Standardabw.

1 32,5 33,9 32,7 30,0 5,502 67,7 69,3 49,5 62,2 10,973 80,2 47,6 69,7 65,8 16,634 89,8 71,2 78,5 79,8 9,345 84,4 87,4 99,1 90,3 7,806 134,4 95,7 106,4 112,1 19,967 200,6 253,9 177,7 210,7 39,088 169,2 135,9 150,4 151,8 16,729 180 148,2 216,5 181,5 34,15

10 160,3 170,6 135,7 155,5 17,9311 269,5 220,8 268,5 252,9 27,83

Tabelle A.14: Messergebnisse [in ms] fur Anwendungsfall 4 - HTTP Long Polling

49

A. Anhang

WebSocketSzenario Durchl. 1 Durchl. 2 Durchl. 3 Arithm. Mittel Standardabw.

1 22,8 15,5 14 17,4 4,712 23,8 28,5 21,5 24,6 3,553 32,6 27,1 25,9 28,5 3,574 26,7 25,0 23,7 25,1 1,505 20,7 22,0 29,8 24,2 4,906 23,6 32,0 33,2 29,6 5,267 33,7 25,9 23,6 27,7 5,298 27,3 37,9 28,1 31,1 5,869 28,9 35 34,2 32,7 3,33

10 33 21,1 36 30,0 7,8811 25,9 38,4 58,6 40,9 16,50

Tabelle A.15: Messergebnisse [in ms] fur Anwendungsfall 4 - WebSocket

RabbitMQSzenario Durchl. 1 Durchl. 2 Durchl. 3 Arithm. Mittel Standardabw.

1 61,6 12,1 11,5 28,4 28,742 26,6 33 25,2 28,2 4,143 33,4 33,5 42,5 36,4 5,274 48,1 61,2 38,1 49,1 11,585 56,4 46,2 47 49,8 5,666 59 64 72,6 65,2 6,887 70 76,9 79,5 75,4 4,918 103,9 65 70 79,6 21,169 92,1 99 101,6 97,5 4,88

10 112,2 98,6 92 100,9 10,3011 115,3 121,6 82 106,3 21,28

Tabelle A.16: Messergebnisse [in ms] fur Anwendungsfall 4 - RabbitMQ

WebSocketSzenario Durchl. 1 Durchl. 2 Durchl. 3 Arithm. Mittel Standardabw.

1 98,3 86,3 90,8 91,8 6,06

Tabelle A.17: Messergebnisse [in ms] fur Anwendungsfall 5 - WebSocket

RabbitMQSzenario Durchl. 1 Durchl. 2 Durchl. 3 Arithm. Mittel Standardabw.

1 57,3 50,6 46 51,3 5,70

Tabelle A.18: Messergebnisse [in ms] fur Anwendungsfall 5 - RabbitMQ

50