Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

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

Lutz Hühnken

April 22, 2015
Tweet

More Decks by Lutz Hühnken

Other Decks in Programming

Transcript

  1. Von Enterprise zu Reactive @lutzhuehnken Reactive „for the rest of

    us“.. Big Data Web Scale HFT Tomcat Web MVC RDBMS
  2. Von Enterprise zu Reactive @lutzhuehnken Was ist Enterprise? Im Sinne

    dieses Vortrags: • Alles, was auf Java EE basiert • Insbesondere Servlet API basierte Webapps, z.B. auf Tomcat
  3. Von Enterprise zu Reactive @lutzhuehnken n Threads per m Requests

    Effekt: Kleinere Einheit der Nebenläufigkeit (Task level concurrency)
  4. Von Enterprise zu Reactive @lutzhuehnken Kleiner Exkurs: Gilt auch für

    Aktoren (Überhaupt: Gemeinsamkeit (einiger) reaktiver Systeme)
  5. Von Enterprise zu Reactive @lutzhuehnken Konsequenzen (alpha) • Servlet Container

    • ThreadLocal • Blocking I/O werden zu Anti-Pattern. Vermeiden!
  6. 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
  7. Von Enterprise zu Reactive @lutzhuehnken Isolieren! Bei vert.x „Worker Verticle“

    Bei Play/Akka: Volle Kontrolle über Dispatcher Nicht nur für JDBC, generell für „blocking“ code
  8. Von Enterprise zu Reactive @lutzhuehnken Konsequenzen (beta) • auf Servlet

    Container und ThreadLocal verzichten • Blocking I/O vermeiden. Im Notfall: Isolieren.
  9. 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
  10. Von Enterprise zu Reactive @lutzhuehnken Trennen Jeder 2 PC kann

    durch asynchrones Messaging ausgedrückt werden!
  11. Von Enterprise zu Reactive @lutzhuehnken 2PC => Messaging Kleine Einschränkung

    - Voraussetzungen: •tentative operations •at-least-once delivery •idempotent messages Item-B Cancellation Tentative Op Item-A
  12. 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
  13. 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?
  14. 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)
  15. Von Enterprise zu Reactive @lutzhuehnken Nicht von mir! Sondern von

    John Rose, Java VM Architect, JFokus, Stockholm, February 2015
  16. 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..?
  17. Von Enterprise zu Reactive @lutzhuehnken Vielen Dank [email protected] Twitter: @lutzhuehnken

    Kommt zum Typesafe-Stand!
 (In der Nähe der Garderobe) Geht zu den anderen „Reactive“ Vorträgen!