Senacor Technologies AG
Reaktive Anwendungen mit RxJava Dr. Michael Menzel
JUG Saxony Day, 02. Oktober 2015
Senacor Technologies AG
Worum soll es gehen?
Reaktive Architekturen
Wie können skalierbare und hoch-interaktive Systeme
gebaut werden, die unter hoher Last und
hohem Datenvolumen operieren?
REAKTIVE ANWENDUNGEN - ÜBERSICHT
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015 2
Senacor Technologies AG
Worum soll es gehen?
REAKTIVE ANWENDUNGEN - ÜBERSICHT
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015
Bibliothek zur Verarbeitung
asynchroner Events als Streams
Nicht-blockierende API
Asynchronität
Message-driven
Technologien?
3
Senacor Technologies AG Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015
Wie sollte eine
Anwendung nicht
entworfen werden?
4
Senacor Technologies AG
REAKTIVE ANWENDUNGEN - NEGATIVBEISPIEL
Negativbeispiel: Berater-Frontend
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015
Keine Fehlertoleranz
Keine Fehlertoleranz
5
Senacor Technologies AG
REAKTIVE ANWENDUNGEN - NEGATIVBEISPIEL
Datenaktualisierungen müssen sich im Frontend reflektieren
1 weiterer Benutzer bearbeitet aktuellen Kunden
autoupdate
autoupdate
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015
Streaming
autoupdate
6
Senacor Technologies AG
REAKTIVE ANWENDUNGEN - NEGATIVBEISPIEL
Performanceprobleme durch Service-Schnitt
Service
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015
Service Service
Service Service
7
Senacor Technologies AG
Clientseitige Servicekompositionen führen zu Kommunikationsoverhead
REAKTIVE ANWENDUNGEN - NEGATIVBEISPIEL
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015
100 ms
Browser
200 ms 300 ms 400 ms 500 ms 600 ms
Services
8
Senacor Technologies AG
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015
Mehr Hardware ???
9
Senacor Technologies AG
REAKTIVE ANWENDUNGEN - ARCHITEKTURBETRACHTUNG
Kein Problem für unternehmensinterne Applikationen ?!?
Customer Service
Account Service
Transaction Service
Legacy User Service
Browser
Services Clients
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015 10
Senacor Technologies AG
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015 11
Wie können Mobile- Clients effizient
unterstützt werden?
Senacor Technologies AG
REAKTIVE ANWENDUNGEN - ARCHITEKTURBETRACHTUNG
Clientseitige Dienstkomposition:
Schlechtes Pattern für Mobile-Devices
Customer Service
Account Service
Transaction Service
Legacy User Service
Browser
Services Clients
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015 12
Senacor Technologies AG
REAKTIVE ANWENDUNGEN - ARCHITEKTURBETRACHTUNG
Besser: Serverseitige Dienstkomposition für Mobile-Devices
Customer Service
Account Service
Transaction Service
Legacy User Service
Browser
Services Clients
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015 13
Senacor Technologies AG Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015
Nachteil: Serverseitige
Dienstkompositionen führen zu
Abhängigkeiten
14
Senacor Technologies AG
REAKTIVE ANWENDUNGEN - ARCHITEKTURBETRACHTUNG
Bereitstellung client-spezifischer Dienstkompositionen
über API-Gateway
Customer Service
Account Service
Transaction Service
Legacy User Service
Browser
Services Clients
API
Gateway
PUSH
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015 15
Senacor Technologies AG
REAKTIVE ANWENDUNGEN - ARCHITEKTURBETRACHTUNG
Reactive Manifesto definiert Grundprinzipien …
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015
Responsivness
Elasticity Resilience
Transparente Skalierung
Dynamische Bereitstellung von Ressourcen
Retry & Failover Replikation Isolation & Error
Propagation
Direktes Feedback Push von Model-
aktualisierungen
16
Senacor Technologies AG
REAKTIVE ANWENDUNGEN - ARCHITEKTURBETRACHTUNG
Differenzierendes Merkmal im Manifest: Message-driven
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015
Responsivness
Elasticity Resilience
Transparente Skalierung
Dynamische Bereitstellung von Ressourcen
Retry & Failover Replikation Isolation & Error
Propagation
Direktes Feedback Push von Model-
aktualisierungen
Message-driven
17
Senacor Technologies AG
REAKTIVE ANWENDUNGEN - ARCHITEKTURBETRACHTUNG
Grundlage für ein schnelles Nutzerfeedback:
Asynchrone, nicht-blockierende Datenverarbeitung
Customer Service
Account Service
Transaction Service
Legacy User Service
API
Gateway
Asynchrone, nicht-blockierende Verarbeitung
Nachrichten-Bus
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015
Responsivness
18
Senacor Technologies AG
REAKTIVE ANWENDUNGEN - UMSETZUNG
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015
Polyglot
Sehr einfaches
Nebenläufigkeitsmodell
Eventbus-basierte Kommunikation
Modulsystem mit öffentlichen
Repository
Framework für Serverapplikationen
Einsatz im Projekt: VERT.X
19
Senacor Technologies AG
Services
REAKTIVE ANWENDUNGEN - UMSETZUNG
Herausforderung: API zur asynchronen Servicekomposition
Customer Service
Account Service
Transaction Service
Legacy User Service
API
Gateway
API ???
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015 20
Senacor Technologies AG
Wie lässt sich die API gestallten?
REAKTIVE ANWENDUNGEN - UMSETZUNG
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015
Einzelner Datensatz
Mehrfache Datensätze
Synchron Objekt Iterable
Stream
Asynchron
Callback
Future
CompletableFuture
Observable
21
Senacor Technologies AG
REAKTIVE ANWENDUNGEN - UMSETZUNG
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015 22
Beispiel Sortenbestellung
1. Wechselkurse abfragen
2. Auftrag laden
3. Auftrag mit aktuellem
Wechselkurs aktualisieren
4. Auftragssumme berechnen
Senacor Technologies AG
Synchrone Berechnung
REAKTIVE ANWENDUNGEN - UMSETZUNG
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015 23
Senacor Technologies AG
Callback-Hell …
REAKTIVE ANWENDUNGEN - UMSETZUNG
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015
Kombinierbarkeit sequentieller Aufrufe erfordert Schachtelung
Kombination paralleler Aufrufe erfordert Datensynchronisation
24
Senacor Technologies AG
Promises/Futures erleichtern die asynchrone Datenverarbeitung,
die Datenabfrage von Java 1.5 Futures ist blockierend
REAKTIVE ANWENDUNGEN - UMSETZUNG
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015 25
Senacor Technologies AG
Wie lässt sich die API gestallten?
REAKTIVE ANWENDUNGEN - UMSETZUNG
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015
Einzelner Datensatz
Mehrfache Datensätze
Synchron Objekt Iterable
Stream
Asynchron
Callback
Future
CompletableFuture
Observable
26
Senacor Technologies AG
REAKTIVE ANWENDUNGEN - RXJAVA
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015
The Reactive Extensions (Rx) is a library
for composing asynchronous and event-
based programs using observable
sequences and LINQ-style query
operators https://rx.codeplex.com
27
Senacor Technologies AG
ReactiveX basiert auf dem Observable-Pattern
REAKTIVE ANWENDUNGEN - RXJAVA
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015
Observable Observer register
onNext(T) onError(Throwable t) onCompleted()
28
Senacor Technologies AG
RxJava ist eine Umsetzung von Rx.Net auf Basis der JVM
REAKTIVE ANWENDUNGEN - RXJAVA
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015
LINQ, .NET Framework 3.5
Spracherweiterung zur Abfrage und
Transformation von Daten
19.11.2007
RxJS, Rx for JavaScript
17.03.2010
Rx.NET, .NET Framework 3.5 / 4
Rx = Observables + LINQ + Schedulers
Asynchrone, Push-basierte
Datenverarbeitung
17.11.2009
RxJava,
Reactive Extensions for
the JVM, started by Netflix
02.2013
29
Senacor Technologies AG
Erzeugung eines Observables aus einem Array
REAKTIVE ANWENDUNGEN - RXJAVA
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015 30
Senacor Technologies AG
Events in Streams können gefiltert und transformiert werden
REAKTIVE ANWENDUNGEN - RXJAVA
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015 31
Senacor Technologies AG
Streams können kombiniert werden
REAKTIVE ANWENDUNGEN - RXJAVA
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015 32
Senacor Technologies AG
FAZIT
Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015
asynchrone / parallele /
nicht-blockierende
Serviceaufrufe
Stream-Support:
Server zu Client Push,
Modellaktualisierung und
partielle Ergebnisse
Funktionen zur Datenfilterung,
Transformation und
Fehlerbehandlung
Fluent API/
Kombinierbarkeit von
asynchronen Aufrufen
33
Senacor Technologies AG
Reaktive Anwendungen mit RxJava Dr. Michael Menzel
JUG Saxony Day, 02. Oktober 2015