22
Reaktive Architekturen Neue Ansätze für komplexe Datenflüsse Leonard Thiele 18. Dezember 2018 Master Grundseminar, HAW Hamburg, 18.12.2018

Reaktive Architekturen - Neue Ansätze für komplexe Datenflüsseubicomp/... · 2019-01-06 · ReaktiveSystemesind… • responsive:AntwortenkommenaufjedenFallinnerhalb festgelegterZeiträume

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Reaktive Architekturen - Neue Ansätze für komplexe Datenflüsseubicomp/... · 2019-01-06 · ReaktiveSystemesind… • responsive:AntwortenkommenaufjedenFallinnerhalb festgelegterZeiträume

Reaktive ArchitekturenNeue Ansätze für komplexe Datenflüsse

Leonard Thiele18. Dezember 2018

Master Grundseminar, HAW Hamburg, 18.12.2018

Page 2: Reaktive Architekturen - Neue Ansätze für komplexe Datenflüsseubicomp/... · 2019-01-06 · ReaktiveSystemesind… • responsive:AntwortenkommenaufjedenFallinnerhalb festgelegterZeiträume

1. Motivation

2. Reaktiver Ansatz

3. Reaktive Architekturen in der Praxis

1

Page 3: Reaktive Architekturen - Neue Ansätze für komplexe Datenflüsseubicomp/... · 2019-01-06 · ReaktiveSystemesind… • responsive:AntwortenkommenaufjedenFallinnerhalb festgelegterZeiträume

Motivation

Page 4: Reaktive Architekturen - Neue Ansätze für komplexe Datenflüsseubicomp/... · 2019-01-06 · ReaktiveSystemesind… • responsive:AntwortenkommenaufjedenFallinnerhalb festgelegterZeiträume

Anforderungen an moderne So tware

• konstante Verfügbarkeit• hohe Reaktionsfähigkeit• gute Skalierbarkeit

2

Page 5: Reaktive Architekturen - Neue Ansätze für komplexe Datenflüsseubicomp/... · 2019-01-06 · ReaktiveSystemesind… • responsive:AntwortenkommenaufjedenFallinnerhalb festgelegterZeiträume

Synchroner Ansatz

• direkte,blockierendeAufrufe

• Thread-basierteVerarbeitung

3https://blog.senacor.com/content/images/2018/04/ServletModel700.png

Page 6: Reaktive Architekturen - Neue Ansätze für komplexe Datenflüsseubicomp/... · 2019-01-06 · ReaktiveSystemesind… • responsive:AntwortenkommenaufjedenFallinnerhalb festgelegterZeiträume

Probleme bei synchroner Architektur

• jeder Request bekommt eigenen Thread/State↪→ Overhead

• Threadpools können das Problem lösen…• …skalieren aber nicht gut

Was tun wir, wenn 10 000 Nachrichten gleichzeitig verarbeitetwerden sollen?

4

Page 7: Reaktive Architekturen - Neue Ansätze für komplexe Datenflüsseubicomp/... · 2019-01-06 · ReaktiveSystemesind… • responsive:AntwortenkommenaufjedenFallinnerhalb festgelegterZeiträume

Reaktiver Ansatz

Page 8: Reaktive Architekturen - Neue Ansätze für komplexe Datenflüsseubicomp/... · 2019-01-06 · ReaktiveSystemesind… • responsive:AntwortenkommenaufjedenFallinnerhalb festgelegterZeiträume

Das Reaktive Manifest

5https://www.reactivemanifesto.org/images/reactive-traits.svg

Page 9: Reaktive Architekturen - Neue Ansätze für komplexe Datenflüsseubicomp/... · 2019-01-06 · ReaktiveSystemesind… • responsive:AntwortenkommenaufjedenFallinnerhalb festgelegterZeiträume

Reaktive Systeme sind…

• responsive: Antworten kommen auf jeden Fall innerhalbfestgelegter Zeiträume

• resilient: Stabilität auch bei Ausfall• elastic: Anpassung an die aktuelle Last• message driven: Effiziente, asynchroneNachrichtenübermittlung zwischen Komponenten

6

Page 10: Reaktive Architekturen - Neue Ansätze für komplexe Datenflüsseubicomp/... · 2019-01-06 · ReaktiveSystemesind… • responsive:AntwortenkommenaufjedenFallinnerhalb festgelegterZeiträume

Ist “reaktiv” wirklich neu?

7https://gregheo.com/images/blog/rx-venn.png

Page 11: Reaktive Architekturen - Neue Ansätze für komplexe Datenflüsseubicomp/... · 2019-01-06 · ReaktiveSystemesind… • responsive:AntwortenkommenaufjedenFallinnerhalb festgelegterZeiträume

Synchroner Ansatz

• direkte,blockierendeAufrufe

• zustandsbeha tet• Thread-basierteVerarbeitung

8https://blog.senacor.com/content/images/2018/04/ServletModel700.png

Page 12: Reaktive Architekturen - Neue Ansätze für komplexe Datenflüsseubicomp/... · 2019-01-06 · ReaktiveSystemesind… • responsive:AntwortenkommenaufjedenFallinnerhalb festgelegterZeiträume

Reaktiver Ansatz

• indirekte,asynchrone Aufrufe

• zustandslos• Event-basierteVerarbeitung

9https://blog.senacor.com/content/images/2018/04/EventLoop700.png

Page 13: Reaktive Architekturen - Neue Ansätze für komplexe Datenflüsseubicomp/... · 2019-01-06 · ReaktiveSystemesind… • responsive:AntwortenkommenaufjedenFallinnerhalb festgelegterZeiträume

Frameworks

• Eclipse Vert.x• ReactiveX (RxJava, RxJS…)• Spring Reactor (seit Spring 5)• Akka

10

Page 14: Reaktive Architekturen - Neue Ansätze für komplexe Datenflüsseubicomp/... · 2019-01-06 · ReaktiveSystemesind… • responsive:AntwortenkommenaufjedenFallinnerhalb festgelegterZeiträume

Reaktive Architekturen in der Praxis

Page 15: Reaktive Architekturen - Neue Ansätze für komplexe Datenflüsseubicomp/... · 2019-01-06 · ReaktiveSystemesind… • responsive:AntwortenkommenaufjedenFallinnerhalb festgelegterZeiträume

Synchrone Verarbeitung

t r y {// lade KundendatenCustomer customer = customerService . f indBy Id ( customerId ) ;// ak tua l i se re Kundendatencustomer . setAddress ( . . . ) ;// speichere KundendatencustomerService . update ( customer ) ;

}catch ( RuntimeException ex ) {

// ve ra rbe i t e Feh ler}

11

Page 16: Reaktive Architekturen - Neue Ansätze für komplexe Datenflüsseubicomp/... · 2019-01-06 · ReaktiveSystemesind… • responsive:AntwortenkommenaufjedenFallinnerhalb festgelegterZeiträume

Asynchrone Verarbeitung mit Callbacks

// lade KundendateneventBus . send (” CustomerService . f indBy Id ” , customerId , rep ly ⇒ {//prüfe auf Feh leri f ( rep ly . succeeded ( ) ) {

//Customer aus der Antwort holenCustomer customer = ( Customer ) rep ly . r e su l t ( ) . body ( ) ;// ak tua l i se re Kundendatencustomer . setAddress ( . . . ) ;// Speichere KundendateneventBus . send (” CustomerService . update ” , customer , rep ly ⇒ {// Fehlerprüfung und Ergebnisverarbei tung

} ) ;} else {// Verarbe i te Feh ler

} } ) ;12

Page 17: Reaktive Architekturen - Neue Ansätze für komplexe Datenflüsseubicomp/... · 2019-01-06 · ReaktiveSystemesind… • responsive:AntwortenkommenaufjedenFallinnerhalb festgelegterZeiträume

Asynchrone Verarbeitung mit Streams

//asynchrone Methode l i e f e r t e in Observable zurückObservable <Customer > obs = customerService . f indBy Id ( id ) ;

//Anmeldung durch den Observerobs . subscr ibe (customer ⇒ System . out . p r i n t l n ( customer ) ,e r ro r ⇒ System . out . p r i n t l n ( e r ro r ) ,( ) ⇒ System . out . p r i n t l n ( ” completed ” )

) ;

13

Page 18: Reaktive Architekturen - Neue Ansätze für komplexe Datenflüsseubicomp/... · 2019-01-06 · ReaktiveSystemesind… • responsive:AntwortenkommenaufjedenFallinnerhalb festgelegterZeiträume

Ausrichtung im Master

• HAWAI-Projekt• Flutter• Microservices

14

Page 19: Reaktive Architekturen - Neue Ansätze für komplexe Datenflüsseubicomp/... · 2019-01-06 · ReaktiveSystemesind… • responsive:AntwortenkommenaufjedenFallinnerhalb festgelegterZeiträume

Literatur

Uwe Friedrichsen, Stefan Toth und Eberhard Wolff. Resilience - Wie Netflix seinSystem schützt. 2015.

Debasish Ghosh. Functional and Reactive Domain Modeling. 2016.

Roland Kuhn, Brian Hanafee und Jamie Allen. Reactive Design Patterns. 2016.

Michael Menzel. Reaktive Architekturen mit RxJava. 18. Dez. 2018. url: https://blog.senacor.com/reaktive-architekturen-mit-rxjava/.

reactive-streams.org. The introduction to Reactive Programming you’ve beenmissing. 18. Dez. 2018. url: http://www.reactive-streams.org/.

15

Page 20: Reaktive Architekturen - Neue Ansätze für komplexe Datenflüsseubicomp/... · 2019-01-06 · ReaktiveSystemesind… • responsive:AntwortenkommenaufjedenFallinnerhalb festgelegterZeiträume

16https://www.reactivemanifesto.org/images/reactive-traits.svg

Page 21: Reaktive Architekturen - Neue Ansätze für komplexe Datenflüsseubicomp/... · 2019-01-06 · ReaktiveSystemesind… • responsive:AntwortenkommenaufjedenFallinnerhalb festgelegterZeiträume

Asynchrone Verarbeitung mit Streams — II

eventBus . sendObservable (” CustomerService . f indBy Id ” , customerId )//Customer aus der Antwort holen.map( asyncResult ⇒ ( Customer ) asyncResult . body ( ) )// ak tua l i se re Kundendaten.map( customer ⇒ . . . )// Speichere Kundendaten. f latMap ( customer ⇒ eventBus . sendObservable (” CustomerService . update ” , customer ) )

//Konsumiere Ergebnis und Fehler. subscr ibe ( customer ⇒ . . . , e r ro r ⇒ . . . ) ;

Page 22: Reaktive Architekturen - Neue Ansätze für komplexe Datenflüsseubicomp/... · 2019-01-06 · ReaktiveSystemesind… • responsive:AntwortenkommenaufjedenFallinnerhalb festgelegterZeiträume

Das BLoC-Pattern