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
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
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!