Von "Enterprise" zu "Reactive" (JAX 2015)

Lutz Hühnken
Lutz HühnkenHead of Engineering at Upvest
Lutz Hühnken | @lutzhuehnken | Typesafe
Von „Enterprise“ zu „Reactive“
Von Enterprise zu Reactive
@lutzhuehnken
Reactive „for the rest of us“..
Big Data
Web Scale
HFT
Tomcat
Web MVC
RDBMS
Von Enterprise zu Reactive
@lutzhuehnken
Was ist Enterprise?
Im Sinne diesesVortrags:
• Alles, was auf Java EE basiert
• Insbesondere Servlet API basierte Webapps,
z.B. auf Tomcat
Von Enterprise zu Reactive
@lutzhuehnken
Was ist Reactive?
Von Enterprise zu Reactive
@lutzhuehnken
Was ist Reactive?
Behauptet doch jeder von sich…
Von Enterprise zu Reactive
@lutzhuehnken
Was ist Reactive?
Alles Akka, oder was?
Von Enterprise zu Reactive
@lutzhuehnken
Mal anders: Fragen, die
wir immer wieder
hören
Von Enterprise zu Reactive
@lutzhuehnken
WAR?
Servlet Container?
Web Layer
Library X
(nutzt ThreadLocal)
?
Von Enterprise zu Reactive
@lutzhuehnken
Kann ich das
nutzen mit RDBMS/
JDBC?
Backend
Wie mache ich 2PC?
Von Enterprise zu Reactive
@lutzhuehnken
Thread per Request
Von Enterprise zu Reactive
@lutzhuehnken
n Threads per m Requests
Von Enterprise zu Reactive
@lutzhuehnken
n Threads per m Requests
Effekt: Kleinere Einheit der Nebenläufigkeit (Task level
concurrency)
Von Enterprise zu Reactive
@lutzhuehnken
Kleiner Exkurs: Gilt auch für Aktoren
(Überhaupt: Gemeinsamkeit (einiger) reaktiver Systeme)
Von Enterprise zu Reactive
@lutzhuehnken
n Threads per m Requests
Was heißt das für ThreadLocal?
Von Enterprise zu Reactive
@lutzhuehnken
n Threads per m Requests
Was heißt das für I/O?
Von Enterprise zu Reactive
@lutzhuehnken
n Threads per m Requests
In Tomcat / Servlet Container?
Von Enterprise zu Reactive
@lutzhuehnken
Konsequenzen (alpha)
• Servlet Container
• ThreadLocal
• Blocking I/O
werden zu Anti-Pattern.Vermeiden!
Von Enterprise zu Reactive
@lutzhuehnken
Jetzt habe ich aber so etwas..
try {
stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
String coffeeName = rs.getString("COF_NAME");
int supplierID = rs.getInt("SUP_ID");
float price = rs.getFloat("PRICE");
int sales = rs.getInt("SALES");
int total = rs.getInt("TOTAL");
System.out.println(coffeeName + "t" + supplierID +
"t" + price + "t" + sales +
Blocking I/O, Sorgenkind JDBC
Von Enterprise zu Reactive
@lutzhuehnken
Isolieren!
Bei vert.x „WorkerVerticle“
Bei Play/Akka: Volle Kontrolle über Dispatcher
Nicht nur für JDBC, generell für „blocking“ code
Von Enterprise zu Reactive
@lutzhuehnken
Konsequenzen (beta)
• auf Servlet Container und ThreadLocal
verzichten
• Blocking I/O vermeiden. Im Notfall:
Isolieren.
Von Enterprise zu Reactive
@lutzhuehnken
Jetzt habe ich aber so etwas..
@Transactional
public static class GreetingService {
@Inject
private JmsTemplate jmsTemplate;
@PersistenceContext
private EntityManager entityManager;
public void createGreeting(String name) {
Greeting greeting = new Greeting(name);
this.entityManager.persist(greeting);
this.jmsTemplate.convertAndSend("greetings", greeting);
…
Verteilte Transaktion
Von Enterprise zu Reactive
@lutzhuehnken
Von Enterprise zu Reactive
@lutzhuehnken
Vermeiden
this.entityManager.persist(greeting);
this.jmsTemplate.convertAndSend("greetings", greeting);
…
Warum nicht separater Abgleich (Reconciliation)?
In unserem kleinen Beispiel:
Von Enterprise zu Reactive
@lutzhuehnken
Trennen
Jeder 2 PC kann durch asynchrones Messaging
ausgedrückt werden!
Von Enterprise zu Reactive
@lutzhuehnken
2PC => Messaging
Kleine Einschränkung -Voraussetzungen:
•tentative operations
•at-least-once delivery
•idempotent messages
Item-BCancellation Tentative
Op
Item-A
Von Enterprise zu Reactive
@lutzhuehnken
Verwerten
Service A
(Reactive)
Service B
(Legacy)
Von Enterprise zu Reactive
@lutzhuehnken
Konsequenzen (1.0)
• auf Servlet Container und ThreadLocal
verzichten
• Blocking I/O vermeiden. Im Notfall:
Isolieren.
• Distributed Tx: Vermeiden, trennen,
verwerten
Von Enterprise zu Reactive
@lutzhuehnken
Warum das Ganze?
• Wir haben gesehen: Ich kann auch meine
„normale“ Geschäftsanwendung reactive
machen, und dabei Kompromisse
eingehen.
• Was bringt mir das?
Von Enterprise zu Reactive
@lutzhuehnken
• Heißt nicht nur „web scale“.
• Effizient sein. Moderne Hardware nutzen
(Many Core, NUMA)
• Von Innovation profitieren (s. Brian
Goetz gestern)
Von Enterprise zu Reactive
@lutzhuehnken
Nicht von mir! Sondern von John Rose, Java VM Architect, JFokus, Stockholm, February 2015
Von Enterprise zu Reactive
@lutzhuehnken
• Prinzipien der Supervision & Isolation
• Let it crash!
Von Enterprise zu Reactive
@lutzhuehnken
• Spaß!!
• Ernsthaft. All das ist nicht entwickelt
worden, um unser Leben komplizierter
zu machen. Sondern einfacher!
• Wie würdest du es mit Menschen lösen..?
Von Enterprise zu Reactive
@lutzhuehnken
Vielen Dank
lutz.huehnken@typesafe.com
Twitter: @lutzhuehnken
Kommt zum Typesafe-Stand!

(In der Nähe der Garderobe)
Geht zu den anderen „Reactive“Vorträgen!
1 of 33

Recommended

Complex Event Processing in Practice at jDays 2012 by
Complex Event Processing in Practice at jDays 2012Complex Event Processing in Practice at jDays 2012
Complex Event Processing in Practice at jDays 2012Peter Norrhall
5.4K views73 slides
Mythbusters: Event Stream Processing v. Complex Event Processing by
Mythbusters: Event Stream Processing v. Complex Event ProcessingMythbusters: Event Stream Processing v. Complex Event Processing
Mythbusters: Event Stream Processing v. Complex Event ProcessingTim Bass
8.6K views39 slides
Semantic Complex Event Processing by
Semantic Complex Event ProcessingSemantic Complex Event Processing
Semantic Complex Event ProcessingAdrian Paschke
10.5K views253 slides
Testen im EE-Umfeld – Seien Sie feige! by
Testen im EE-Umfeld – Seien Sie feige!Testen im EE-Umfeld – Seien Sie feige!
Testen im EE-Umfeld – Seien Sie feige!gedoplan
597 views31 slides
Speeding up Java Persistence by
Speeding up Java PersistenceSpeeding up Java Persistence
Speeding up Java Persistencegedoplan
299 views51 slides
Workshop zu Hibernate 3.2.2 GA by
Workshop zu Hibernate 3.2.2 GAWorkshop zu Hibernate 3.2.2 GA
Workshop zu Hibernate 3.2.2 GAOliver Belikan
815 views37 slides

More Related Content

Similar to Von "Enterprise" zu "Reactive" (JAX 2015)

Reaktive Programmierung in verständlichen Worten by
Reaktive Programmierung in verständlichen WortenReaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen WortenQAware GmbH
163 views34 slides
Reaktive Programmierung in verständlichen Worten by
Reaktive Programmierung in verständlichen WortenReaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen WortenQAware GmbH
331 views32 slides
Reaktive Programmierung in verständlichen Worten by
Reaktive Programmierung in verständlichen WortenReaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen WortenQAware GmbH
341 views34 slides
Reaktive Programmierung in verständlichen Worten by
Reaktive Programmierung in verständlichen WortenReaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen WortenQAware GmbH
261 views33 slides
Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12 by
Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12
Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12Stephan Hochdörfer
1.1K views80 slides
Eclipse Magazin 12 - Security does matter by
Eclipse Magazin 12 - Security does matterEclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matterHeiko Seeberger
527 views4 slides

Similar to Von "Enterprise" zu "Reactive" (JAX 2015)(20)

Reaktive Programmierung in verständlichen Worten by QAware GmbH
Reaktive Programmierung in verständlichen WortenReaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen Worten
QAware GmbH163 views
Reaktive Programmierung in verständlichen Worten by QAware GmbH
Reaktive Programmierung in verständlichen WortenReaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen Worten
QAware GmbH331 views
Reaktive Programmierung in verständlichen Worten by QAware GmbH
Reaktive Programmierung in verständlichen WortenReaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen Worten
QAware GmbH341 views
Reaktive Programmierung in verständlichen Worten by QAware GmbH
Reaktive Programmierung in verständlichen WortenReaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen Worten
QAware GmbH261 views
Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12 by Stephan Hochdörfer
Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12
Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12
Stephan Hochdörfer1.1K views
Eclipse Magazin 12 - Security does matter by Heiko Seeberger
Eclipse Magazin 12 - Security does matterEclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matter
Heiko Seeberger527 views
Speeding up Java Persistence by gedoplan
Speeding up Java PersistenceSpeeding up Java Persistence
Speeding up Java Persistence
gedoplan237 views
Einführung in Puppet und Vagrant by s0enke
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
s0enke6.6K views
Feige sein! Testen im Java-EE-Umfeld by gedoplan
Feige sein! Testen im Java-EE-UmfeldFeige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-Umfeld
gedoplan266 views
Funktionale Reaktive Programmierung mit Sodium by Torsten Fink
Funktionale Reaktive Programmierung mit SodiumFunktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit Sodium
Torsten Fink558 views
Java FX8 JumpStart - JUG ch - zürich by Sven Ruppert
Java FX8   JumpStart - JUG ch - zürichJava FX8   JumpStart - JUG ch - zürich
Java FX8 JumpStart - JUG ch - zürich
Sven Ruppert278 views
Enterprise Java Batch mit Spring by denschu
Enterprise Java Batch mit SpringEnterprise Java Batch mit Spring
Enterprise Java Batch mit Spring
denschu995 views

More from Lutz Hühnken

Lagom at Java Forum Nord, October 20, 2016 by
Lagom at Java Forum Nord, October 20, 2016Lagom at Java Forum Nord, October 20, 2016
Lagom at Java Forum Nord, October 20, 2016Lutz Hühnken
614 views63 slides
Lagom at hybris Reactive Software Munich Meetup, April 13, 2016 by
Lagom at hybris Reactive Software Munich Meetup, April 13, 2016Lagom at hybris Reactive Software Munich Meetup, April 13, 2016
Lagom at hybris Reactive Software Munich Meetup, April 13, 2016Lutz Hühnken
957 views47 slides
JVM Concurrency auf der JavaLand am 8. März 2016 by
JVM Concurrency auf der JavaLand am 8. März 2016JVM Concurrency auf der JavaLand am 8. März 2016
JVM Concurrency auf der JavaLand am 8. März 2016Lutz Hühnken
988 views63 slides
Building Applications with the Typesafe Reactive Platform at Skills Matter, L... by
Building Applications with the Typesafe Reactive Platform at Skills Matter, L...Building Applications with the Typesafe Reactive Platform at Skills Matter, L...
Building Applications with the Typesafe Reactive Platform at Skills Matter, L...Lutz Hühnken
479 views37 slides
JVM Concurrency on Devoxx at Nov 12 2015 by
JVM Concurrency on Devoxx at Nov 12 2015JVM Concurrency on Devoxx at Nov 12 2015
JVM Concurrency on Devoxx at Nov 12 2015Lutz Hühnken
1.4K views64 slides
Concurrency-Modelle auf der JVM auf der w-jax 3.11.2015 by
Concurrency-Modelle auf der JVM auf der w-jax 3.11.2015Concurrency-Modelle auf der JVM auf der w-jax 3.11.2015
Concurrency-Modelle auf der JVM auf der w-jax 3.11.2015Lutz Hühnken
1.4K views48 slides

More from Lutz Hühnken(11)

Lagom at Java Forum Nord, October 20, 2016 by Lutz Hühnken
Lagom at Java Forum Nord, October 20, 2016Lagom at Java Forum Nord, October 20, 2016
Lagom at Java Forum Nord, October 20, 2016
Lutz Hühnken614 views
Lagom at hybris Reactive Software Munich Meetup, April 13, 2016 by Lutz Hühnken
Lagom at hybris Reactive Software Munich Meetup, April 13, 2016Lagom at hybris Reactive Software Munich Meetup, April 13, 2016
Lagom at hybris Reactive Software Munich Meetup, April 13, 2016
Lutz Hühnken957 views
JVM Concurrency auf der JavaLand am 8. März 2016 by Lutz Hühnken
JVM Concurrency auf der JavaLand am 8. März 2016JVM Concurrency auf der JavaLand am 8. März 2016
JVM Concurrency auf der JavaLand am 8. März 2016
Lutz Hühnken988 views
Building Applications with the Typesafe Reactive Platform at Skills Matter, L... by Lutz Hühnken
Building Applications with the Typesafe Reactive Platform at Skills Matter, L...Building Applications with the Typesafe Reactive Platform at Skills Matter, L...
Building Applications with the Typesafe Reactive Platform at Skills Matter, L...
Lutz Hühnken479 views
JVM Concurrency on Devoxx at Nov 12 2015 by Lutz Hühnken
JVM Concurrency on Devoxx at Nov 12 2015JVM Concurrency on Devoxx at Nov 12 2015
JVM Concurrency on Devoxx at Nov 12 2015
Lutz Hühnken1.4K views
Concurrency-Modelle auf der JVM auf der w-jax 3.11.2015 by Lutz Hühnken
Concurrency-Modelle auf der JVM auf der w-jax 3.11.2015Concurrency-Modelle auf der JVM auf der w-jax 3.11.2015
Concurrency-Modelle auf der JVM auf der w-jax 3.11.2015
Lutz Hühnken1.4K views
Scala in Practice at Jazoon Tech Day, Oct 23 2015, Zurich by Lutz Hühnken
Scala in Practice at Jazoon Tech Day, Oct 23 2015, ZurichScala in Practice at Jazoon Tech Day, Oct 23 2015, Zurich
Scala in Practice at Jazoon Tech Day, Oct 23 2015, Zurich
Lutz Hühnken530 views
JVM Concurreny Models at code.talks, Hamburg, 30.9.2015 by Lutz Hühnken
JVM Concurreny Models at code.talks, Hamburg, 30.9.2015JVM Concurreny Models at code.talks, Hamburg, 30.9.2015
JVM Concurreny Models at code.talks, Hamburg, 30.9.2015
Lutz Hühnken1.5K views
Scala.js at code.talks 2014, Hamburg by Lutz Hühnken
Scala.js at code.talks 2014, HamburgScala.js at code.talks 2014, Hamburg
Scala.js at code.talks 2014, Hamburg
Lutz Hühnken1K views
A Pragmatic View of Reactive by Lutz Hühnken
A Pragmatic View of ReactiveA Pragmatic View of Reactive
A Pragmatic View of Reactive
Lutz Hühnken8.9K views
Reactive Slick at Scala User Group Vienna May 20 2015 by Lutz Hühnken
Reactive Slick at Scala User Group Vienna May 20 2015Reactive Slick at Scala User Group Vienna May 20 2015
Reactive Slick at Scala User Group Vienna May 20 2015
Lutz Hühnken1.1K views

Von "Enterprise" zu "Reactive" (JAX 2015)

  • 1. Lutz Hühnken | @lutzhuehnken | Typesafe Von „Enterprise“ zu „Reactive“
  • 2. Von Enterprise zu Reactive @lutzhuehnken Reactive „for the rest of us“.. Big Data Web Scale HFT Tomcat Web MVC RDBMS
  • 3. Von Enterprise zu Reactive @lutzhuehnken Was ist Enterprise? Im Sinne diesesVortrags: • Alles, was auf Java EE basiert • Insbesondere Servlet API basierte Webapps, z.B. auf Tomcat
  • 4. Von Enterprise zu Reactive @lutzhuehnken Was ist Reactive?
  • 5. Von Enterprise zu Reactive @lutzhuehnken Was ist Reactive? Behauptet doch jeder von sich…
  • 6. Von Enterprise zu Reactive @lutzhuehnken Was ist Reactive? Alles Akka, oder was?
  • 7. Von Enterprise zu Reactive @lutzhuehnken Mal anders: Fragen, die wir immer wieder hören
  • 8. Von Enterprise zu Reactive @lutzhuehnken WAR? Servlet Container? Web Layer Library X (nutzt ThreadLocal) ?
  • 9. Von Enterprise zu Reactive @lutzhuehnken Kann ich das nutzen mit RDBMS/ JDBC? Backend Wie mache ich 2PC?
  • 10. Von Enterprise zu Reactive @lutzhuehnken Thread per Request
  • 11. Von Enterprise zu Reactive @lutzhuehnken n Threads per m Requests
  • 12. Von Enterprise zu Reactive @lutzhuehnken n Threads per m Requests Effekt: Kleinere Einheit der Nebenläufigkeit (Task level concurrency)
  • 13. Von Enterprise zu Reactive @lutzhuehnken Kleiner Exkurs: Gilt auch für Aktoren (Überhaupt: Gemeinsamkeit (einiger) reaktiver Systeme)
  • 14. Von Enterprise zu Reactive @lutzhuehnken n Threads per m Requests Was heißt das für ThreadLocal?
  • 15. Von Enterprise zu Reactive @lutzhuehnken n Threads per m Requests Was heißt das für I/O?
  • 16. Von Enterprise zu Reactive @lutzhuehnken n Threads per m Requests In Tomcat / Servlet Container?
  • 17. Von Enterprise zu Reactive @lutzhuehnken Konsequenzen (alpha) • Servlet Container • ThreadLocal • Blocking I/O werden zu Anti-Pattern.Vermeiden!
  • 18. Von Enterprise zu Reactive @lutzhuehnken Jetzt habe ich aber so etwas.. try { stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(query); while (rs.next()) { String coffeeName = rs.getString("COF_NAME"); int supplierID = rs.getInt("SUP_ID"); float price = rs.getFloat("PRICE"); int sales = rs.getInt("SALES"); int total = rs.getInt("TOTAL"); System.out.println(coffeeName + "t" + supplierID + "t" + price + "t" + sales + Blocking I/O, Sorgenkind JDBC
  • 19. Von Enterprise zu Reactive @lutzhuehnken Isolieren! Bei vert.x „WorkerVerticle“ Bei Play/Akka: Volle Kontrolle über Dispatcher Nicht nur für JDBC, generell für „blocking“ code
  • 20. Von Enterprise zu Reactive @lutzhuehnken Konsequenzen (beta) • auf Servlet Container und ThreadLocal verzichten • Blocking I/O vermeiden. Im Notfall: Isolieren.
  • 21. Von Enterprise zu Reactive @lutzhuehnken Jetzt habe ich aber so etwas.. @Transactional public static class GreetingService { @Inject private JmsTemplate jmsTemplate; @PersistenceContext private EntityManager entityManager; public void createGreeting(String name) { Greeting greeting = new Greeting(name); this.entityManager.persist(greeting); this.jmsTemplate.convertAndSend("greetings", greeting); … Verteilte Transaktion
  • 22. Von Enterprise zu Reactive @lutzhuehnken
  • 23. Von Enterprise zu Reactive @lutzhuehnken Vermeiden this.entityManager.persist(greeting); this.jmsTemplate.convertAndSend("greetings", greeting); … Warum nicht separater Abgleich (Reconciliation)? In unserem kleinen Beispiel:
  • 24. Von Enterprise zu Reactive @lutzhuehnken Trennen Jeder 2 PC kann durch asynchrones Messaging ausgedrückt werden!
  • 25. Von Enterprise zu Reactive @lutzhuehnken 2PC => Messaging Kleine Einschränkung -Voraussetzungen: •tentative operations •at-least-once delivery •idempotent messages Item-BCancellation Tentative Op Item-A
  • 26. Von Enterprise zu Reactive @lutzhuehnken Verwerten Service A (Reactive) Service B (Legacy)
  • 27. Von Enterprise zu Reactive @lutzhuehnken Konsequenzen (1.0) • auf Servlet Container und ThreadLocal verzichten • Blocking I/O vermeiden. Im Notfall: Isolieren. • Distributed Tx: Vermeiden, trennen, verwerten
  • 28. Von Enterprise zu Reactive @lutzhuehnken Warum das Ganze? • Wir haben gesehen: Ich kann auch meine „normale“ Geschäftsanwendung reactive machen, und dabei Kompromisse eingehen. • Was bringt mir das?
  • 29. Von Enterprise zu Reactive @lutzhuehnken • Heißt nicht nur „web scale“. • Effizient sein. Moderne Hardware nutzen (Many Core, NUMA) • Von Innovation profitieren (s. Brian Goetz gestern)
  • 30. Von Enterprise zu Reactive @lutzhuehnken Nicht von mir! Sondern von John Rose, Java VM Architect, JFokus, Stockholm, February 2015
  • 31. Von Enterprise zu Reactive @lutzhuehnken • Prinzipien der Supervision & Isolation • Let it crash!
  • 32. Von Enterprise zu Reactive @lutzhuehnken • Spaß!! • Ernsthaft. All das ist nicht entwickelt worden, um unser Leben komplizierter zu machen. Sondern einfacher! • Wie würdest du es mit Menschen lösen..?
  • 33. Von Enterprise zu Reactive @lutzhuehnken Vielen Dank lutz.huehnken@typesafe.com Twitter: @lutzhuehnken Kommt zum Typesafe-Stand!
 (In der Nähe der Garderobe) Geht zu den anderen „Reactive“Vorträgen!