Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende...

34
Senacor Technologies AG Reaktive Anwendungen mit RxJava Dr. Michael Menzel JUG Saxony Day, 02. Oktober 2015

Transcript of Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende...

Page 1: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

Senacor Technologies AG

Reaktive Anwendungen mit RxJava Dr. Michael Menzel

JUG Saxony Day, 02. Oktober 2015

Page 2: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

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

Page 3: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

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

Page 4: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

Senacor Technologies AG Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015

Wie sollte eine

Anwendung nicht

entworfen werden?

4

Page 5: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

Senacor Technologies AG

REAKTIVE ANWENDUNGEN - NEGATIVBEISPIEL

Negativbeispiel: Berater-Frontend

Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015

Keine Fehlertoleranz

Keine Fehlertoleranz

5

Page 6: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

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

Page 7: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

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

Page 8: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

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

Page 9: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

Senacor Technologies AG

Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015

Mehr Hardware ???

9

Page 10: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

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

Page 11: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

Senacor Technologies AG

Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015 11

Wie können Mobile- Clients effizient

unterstützt werden?

Page 12: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

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

Page 13: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

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

Page 14: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

Senacor Technologies AG Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015

Nachteil: Serverseitige

Dienstkompositionen führen zu

Abhängigkeiten

14

Page 15: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

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

Page 16: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

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

Page 17: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

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

Page 18: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

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

Page 19: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

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

Page 20: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

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

Page 21: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

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

Page 22: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

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

Page 23: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

Senacor Technologies AG

Synchrone Berechnung

REAKTIVE ANWENDUNGEN - UMSETZUNG

Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015 23

Page 24: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

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

Page 25: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

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

Page 26: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

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

Page 27: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

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

Page 28: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

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

Page 29: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

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

Page 30: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

Senacor Technologies AG

Erzeugung eines Observables aus einem Array

REAKTIVE ANWENDUNGEN - RXJAVA

Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015 30

Page 31: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

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

Page 32: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

Senacor Technologies AG

Streams können kombiniert werden

REAKTIVE ANWENDUNGEN - RXJAVA

Reaktive Anwendungen mit RxJava, JUG Saxony Day, 02. Oktober 2015 32

Page 33: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

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

Page 34: Reaktive Anwendungen mit RxJava - JUG Saxony Day · Asynchrone, nicht-blockierende Datenverarbeitung Customer Service Account Service Transaction Service Legacy User Service API Gateway

Senacor Technologies AG

Reaktive Anwendungen mit RxJava Dr. Michael Menzel

JUG Saxony Day, 02. Oktober 2015