Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

Vortrag "Von Enterprise zu Reactive" von der JAX 2015.

  • Be the first to comment

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

  1. 1. Lutz Hühnken | @lutzhuehnken | Typesafe Von „Enterprise“ zu „Reactive“
  2. 2. Von Enterprise zu Reactive @lutzhuehnken Reactive „for the rest of us“.. Big Data Web Scale HFT Tomcat Web MVC RDBMS
  3. 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. 4. Von Enterprise zu Reactive @lutzhuehnken Was ist Reactive?
  5. 5. Von Enterprise zu Reactive @lutzhuehnken Was ist Reactive? Behauptet doch jeder von sich…
  6. 6. Von Enterprise zu Reactive @lutzhuehnken Was ist Reactive? Alles Akka, oder was?
  7. 7. Von Enterprise zu Reactive @lutzhuehnken Mal anders: Fragen, die wir immer wieder hören
  8. 8. Von Enterprise zu Reactive @lutzhuehnken WAR? Servlet Container? Web Layer Library X (nutzt ThreadLocal) ?
  9. 9. Von Enterprise zu Reactive @lutzhuehnken Kann ich das nutzen mit RDBMS/ JDBC? Backend Wie mache ich 2PC?
  10. 10. Von Enterprise zu Reactive @lutzhuehnken Thread per Request
  11. 11. Von Enterprise zu Reactive @lutzhuehnken n Threads per m Requests
  12. 12. Von Enterprise zu Reactive @lutzhuehnken n Threads per m Requests Effekt: Kleinere Einheit der Nebenläufigkeit (Task level concurrency)
  13. 13. Von Enterprise zu Reactive @lutzhuehnken Kleiner Exkurs: Gilt auch für Aktoren (Überhaupt: Gemeinsamkeit (einiger) reaktiver Systeme)
  14. 14. Von Enterprise zu Reactive @lutzhuehnken n Threads per m Requests Was heißt das für ThreadLocal?
  15. 15. Von Enterprise zu Reactive @lutzhuehnken n Threads per m Requests Was heißt das für I/O?
  16. 16. Von Enterprise zu Reactive @lutzhuehnken n Threads per m Requests In Tomcat / Servlet Container?
  17. 17. Von Enterprise zu Reactive @lutzhuehnken Konsequenzen (alpha) • Servlet Container • ThreadLocal • Blocking I/O werden zu Anti-Pattern.Vermeiden!
  18. 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. 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. 20. Von Enterprise zu Reactive @lutzhuehnken Konsequenzen (beta) • auf Servlet Container und ThreadLocal verzichten • Blocking I/O vermeiden. Im Notfall: Isolieren.
  21. 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. 22. Von Enterprise zu Reactive @lutzhuehnken
  23. 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. 24. Von Enterprise zu Reactive @lutzhuehnken Trennen Jeder 2 PC kann durch asynchrones Messaging ausgedrückt werden!
  25. 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. 26. Von Enterprise zu Reactive @lutzhuehnken Verwerten Service A (Reactive) Service B (Legacy)
  27. 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. 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. 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. 30. Von Enterprise zu Reactive @lutzhuehnken Nicht von mir! Sondern von John Rose, Java VM Architect, JFokus, Stockholm, February 2015
  31. 31. Von Enterprise zu Reactive @lutzhuehnken • Prinzipien der Supervision & Isolation • Let it crash!
  32. 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. 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!

×