Von "Enterprise" zu "Reactive" (JAX 2015)
-
Upload
lutz-huehnken -
Category
Technology
-
view
283 -
download
2
Transcript of Von "Enterprise" zu "Reactive" (JAX 2015)
Von Enterprise zu Reactive@lutzhuehnken
Reactive „for the rest of us“..
Big DataWeb Scale
HFT
TomcatWeb MVCRDBMS
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
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
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
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 „Worker Verticle“ 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
Vermeiden
this.entityManager.persist(greeting); this.jmsTemplate.convertAndSend("greetings", greeting); …
Warum nicht separater Abgleich (Reconciliation)?
In unserem kleinen Beispiel:
Von Enterprise zu Reactive@lutzhuehnken
TrennenJeder 2 PC kann durch asynchrones Messaging
ausgedrückt werden!
Von Enterprise zu Reactive@lutzhuehnken
2PC => MessagingKleine Einschränkung - Voraussetzungen:
•tentative operations•at-least-once delivery•idempotent messages
Item-B Cancellation Tentative Op
Item-A
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
• 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
Twitter: @lutzhuehnken
Kommt zum Typesafe-Stand!(In der Nähe der Garderobe)
Geht zu den anderen „Reactive“ Vorträgen!