Slide 1

Slide 1 text

Lutz Hühnken | @lutzhuehnken | Typesafe Von „Enterprise“ zu „Reactive“

Slide 2

Slide 2 text

Von Enterprise zu Reactive @lutzhuehnken Reactive „for the rest of us“.. Big Data Web Scale HFT Tomcat Web MVC RDBMS

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

Von Enterprise zu Reactive @lutzhuehnken Was ist Reactive?

Slide 5

Slide 5 text

Von Enterprise zu Reactive @lutzhuehnken Was ist Reactive? Behauptet doch jeder von sich…

Slide 6

Slide 6 text

Von Enterprise zu Reactive @lutzhuehnken Was ist Reactive? Alles Akka, oder was?

Slide 7

Slide 7 text

Von Enterprise zu Reactive @lutzhuehnken Mal anders: Fragen, die wir immer wieder hören

Slide 8

Slide 8 text

Von Enterprise zu Reactive @lutzhuehnken WAR? Servlet Container? Web Layer Library X (nutzt ThreadLocal) ?

Slide 9

Slide 9 text

Von Enterprise zu Reactive @lutzhuehnken Kann ich das nutzen mit RDBMS/ JDBC? Backend Wie mache ich 2PC?

Slide 10

Slide 10 text

Von Enterprise zu Reactive @lutzhuehnken Thread per Request

Slide 11

Slide 11 text

Von Enterprise zu Reactive @lutzhuehnken n Threads per m Requests

Slide 12

Slide 12 text

Von Enterprise zu Reactive @lutzhuehnken n Threads per m Requests Effekt: Kleinere Einheit der Nebenläufigkeit (Task level concurrency)

Slide 13

Slide 13 text

Von Enterprise zu Reactive @lutzhuehnken Kleiner Exkurs: Gilt auch für Aktoren (Überhaupt: Gemeinsamkeit (einiger) reaktiver Systeme)

Slide 14

Slide 14 text

Von Enterprise zu Reactive @lutzhuehnken n Threads per m Requests Was heißt das für ThreadLocal?

Slide 15

Slide 15 text

Von Enterprise zu Reactive @lutzhuehnken n Threads per m Requests Was heißt das für I/O?

Slide 16

Slide 16 text

Von Enterprise zu Reactive @lutzhuehnken n Threads per m Requests In Tomcat / Servlet Container?

Slide 17

Slide 17 text

Von Enterprise zu Reactive @lutzhuehnken Konsequenzen (alpha) • Servlet Container • ThreadLocal • Blocking I/O werden zu Anti-Pattern. Vermeiden!

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

Von Enterprise zu Reactive @lutzhuehnken Konsequenzen (beta) • auf Servlet Container und ThreadLocal verzichten • Blocking I/O vermeiden. Im Notfall: Isolieren.

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

Von Enterprise zu Reactive @lutzhuehnken

Slide 23

Slide 23 text

Von Enterprise zu Reactive @lutzhuehnken Vermeiden this.entityManager.persist(greeting); this.jmsTemplate.convertAndSend("greetings", greeting); … Warum nicht separater Abgleich (Reconciliation)? In unserem kleinen Beispiel:

Slide 24

Slide 24 text

Von Enterprise zu Reactive @lutzhuehnken Trennen Jeder 2 PC kann durch asynchrones Messaging ausgedrückt werden!

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

Von Enterprise zu Reactive @lutzhuehnken Verwerten Service A (Reactive) Service B (Legacy)

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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?

Slide 29

Slide 29 text

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)

Slide 30

Slide 30 text

Von Enterprise zu Reactive @lutzhuehnken Nicht von mir! Sondern von John Rose, Java VM Architect, JFokus, Stockholm, February 2015

Slide 31

Slide 31 text

Von Enterprise zu Reactive @lutzhuehnken • Prinzipien der Supervision & Isolation • Let it crash!

Slide 32

Slide 32 text

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..?

Slide 33

Slide 33 text

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!