Slide 1

Slide 1 text

Caching Hintergründe, Patterns
 &" Best Practices" für Business Anwendungen

Slide 2

Slide 2 text

Michael Plöd" Senacor Technologies AG @bitboss

Slide 3

Slide 3 text

Business-Anwendung != 
 Twitter / Facebook & co.

Slide 4

Slide 4 text

Cache" / kæʃ /" 
 
 bezeichnet in der EDV einen schnellen Puffer-Speicher, der (erneute) Zugriffe auf ein langsames Hintergrundmedium oder aufwändige Neuberechnungen zu vermeiden hilft. Inhalte/Daten, die bereits einmal beschafft/berechnet wurden, verbleiben im Cache, sodass sie bei späterem Bedarf schneller zur Verfügung stehen. Auch können Daten, die vermutlich bald benötigt werden, vorab vom Hintergrundmedium abgerufen und vorerst im Cache bereitgestellt werden." " Caches können als Hardware- oder Softwarestruktur ausgebildet sein. In ihnen werden Kopien zwischengespeichert. Quelle: http://de.wikipedia.org/wiki/Cache

Slide 5

Slide 5 text

Caches everywhere!!! NO WAY

Slide 6

Slide 6 text

Viele Enterprise Projekte haben Angst vor Caching……

Slide 7

Slide 7 text

" …….. und setzen Caching 
 deshalb insuffizient ein.

Slide 8

Slide 8 text

Mit dem richtigen Einsatz von Caching können Business-Anwendungen skalierbarer, performanter und günstiger im Betrieb werden.

Slide 9

Slide 9 text

Aufbau und Laufzeit- Verhalten einer typischen Business-Anwendung

Slide 10

Slide 10 text

Web Host System X .. Y .. Z DB Anwendungsfall

Slide 11

Slide 11 text

Host System X .. Y .. Z DB Host-Services werden in der Regel pro Aufruf abgerechnet Aufrufe von Umsystemen benötigen in der Regel viel Zeit Datenbanken werden häufig aufgerufen Geld Zeit Ressourcen

Slide 12

Slide 12 text

Zu teuer! Zu langsam! Schlechter Service! IT-Chef Betreuer Kunde

Slide 13

Slide 13 text

CACHES Arten von 
 Orte für Local Cache, Data Grid, Document Store, JPA First Level Cache, JPA Second Level Cache, Hybrid Cache Datenbank, Heap, HTTP Proxy, Browser, Prozessor, Disk, Off Heap, Persistenz- Framework, Anwendung

Slide 14

Slide 14 text

Wir betrachten primär lokales und verteiltes Caching auf Anwendungs- Ebene mit einem Exkurs in Richtung JPA

Slide 15

Slide 15 text

Was soll ich cachen? Wo soll ich cachen? Welchen Cache soll ich nutzen? Welchen Einfluss hat das auf meine Infrastruktur? Was muss ich in Bezug auf Datenkonsistenz beachten? Wie führe ich Caching ein?

Slide 16

Slide 16 text

Was soll ich cachen? Wo soll ich cachen? Welchen Cache soll ich nutzen? Welchen Einfluss hat das auf meine Infrastruktur? Was muss ich in Bezug auf Datenkonsistenz beachten? Wie führe ich Caching ein?

Slide 17

Slide 17 text

1 Identifiziere geeignete Ebenen für Caching

Slide 18

Slide 18 text

BeschwerdeManagementRestController BeschwerdeManagementBusinessService DatenBeschaffungsManager Host! Commands Umsystem! Commands JPA! DAO HTTP Caching Lese Operationen Lese Operationen Lese Operationen Lese Operationen Lese- und Schreib- Operationen Cache Ebenen

Slide 19

Slide 19 text

2 Bleibe so lange lokal wie möglich

Slide 20

Slide 20 text

Lokal In-Memory JVM Cache

Slide 21

Slide 21 text

Clustered JVM Cache JVM Cache JVM Cache JVM Cache

Slide 22

Slide 22 text

Demo Hazelcast lokal vs verteilt

Slide 23

Slide 23 text

Was soll ich cachen? Wo soll ich cachen? Welchen Cache soll ich nutzen? Welchen Einfluss hat das auf meine Infrastruktur? Was muss ich in Bezug auf Datenkonsistenz beachten? Wie führe ich Caching ein?

Slide 24

Slide 24 text

Ein transaktionaler Cache kostet Performance!

Slide 25

Slide 25 text

JVM JVM JVM JVM Clustered - with sync Cache Cache Cache Cache Invalidation Replication

Slide 26

Slide 26 text

3 Ziehe Invalidation, Replication vor

Slide 27

Slide 27 text

Cache Cache Cache Cache Invalidation

Slide 28

Slide 28 text

Cache Cache Cache Cache Invalidation #1 PUT (Insert) PUT (Insert) #1 #1 PUT (Insert) PUT (Insert) #1

Slide 29

Slide 29 text

Cache Cache Cache Cache Invalidation #1 #1 #1 #1

Slide 30

Slide 30 text

Cache Cache Cache Cache Invalidation #1 #1 PUT (Update) #1 #1

Slide 31

Slide 31 text

Cache Cache Cache Cache Invalidation PUT (Update) #1

Slide 32

Slide 32 text

Cache Cache Cache Cache Replication

Slide 33

Slide 33 text

Cache Cache Cache Cache #1 #1 #1 Replication #1 PUT (Insert)

Slide 34

Slide 34 text

Cache Cache Cache Cache #1 #1 #1 Replication #1

Slide 35

Slide 35 text

Cache Cache Cache Cache #1 #1 #1 Replication #1 PUT (Update)

Slide 36

Slide 36 text

Bisher hält jeder Cache potentiell alle Daten und belegt Platz im Heap

Slide 37

Slide 37 text

Big Heap ?

Slide 38

Slide 38 text

Was soll ich cachen? Wo soll ich cachen? Welchen Cache soll ich nutzen? Welchen Einfluss hat das auf meine Infrastruktur? Was muss ich in Bezug auf Datenkonsistenz beachten? Wie führe ich Caching ein?

Slide 39

Slide 39 text

4 Vermeide große Heap-Sizes nur für Caching.

Slide 40

Slide 40 text

Grosser Heap führt zu langen major GCs Application Data Cache 32 GB

Slide 41

Slide 41 text

Lange GCs können Cluster destabilisieren JVM Cache JVM Cache JVM Cache JVM Cache

Slide 42

Slide 42 text

Lange GCs können Cluster destabilisieren JVM Cache JVM Cache JVM Cache JVM Cache

Slide 43

Slide 43 text

Lösung: Kleine Caches? " Viele Evictions, wenige Hits, „hot data“ kann nicht entstehen

Slide 44

Slide 44 text

5 Sehr grosse Datenmenge? Distributed Cache!

Slide 45

Slide 45 text

Distributed Caches JVM JVM JVM JVM Cache Node 1 Cache Node 2 Cache Node 3

Slide 46

Slide 46 text

1

Slide 47

Slide 47 text

1 Kunde #23 Kunde #30 Kunde #27 Kunde #32

Slide 48

Slide 48 text

1 Kunde #23 Kunde #30 Kunde #27 Kunde #32 2

Slide 49

Slide 49 text

1 2 Kunde #23 Kunde #30 Kunde #27 Kunde #32 Die Daten werden verteilt und Backups gesichert

Slide 50

Slide 50 text

1 2 Kunde #23 Kunde #30 Kunde #27 Kunde #32 BACKUP #27 BACKUP #32 BACKUP #23 BACKUP #30 Die Daten werden verteilt und Backups gesichert

Slide 51

Slide 51 text

3 1 2 Kunde #23 Kunde #30 Kunde #27 Kunde #32 BACKUP #27 BACKUP #32 BACKUP #23 BACKUP #30

Slide 52

Slide 52 text

4 3 1 2 Kunde #23 Kunde #30 Kunde #27 Kunde #32 BACKUP #27 BACKUP #32 BACKUP #23 BACKUP #30

Slide 53

Slide 53 text

DEMO Hazelcast
 on Raspberry Pi in Lego

Slide 54

Slide 54 text

8 Raspberry Pis mit je einer Hazelcast Instanz ! 1 MacBook Pro mit zwei Hazelcast Instanzen

Slide 55

Slide 55 text

Test Programme Raspberry Hazelcast Raspberry Hazelcast Raspberry Hazelcast Raspberry Hazelcast Raspberry Hazelcast Raspberry Hazelcast Raspberry Hazelcast Raspberry Hazelcast Hazelcast Hazelcast MacBook Pro Lego Cloud Hazelcast Cluster mit beliebig skalierbarer Anzahl an Instanzen

Slide 56

Slide 56 text

Ein verteilter Cache führt zu kleinen Heaps, mehr Kapazität und lässt sich einfach skalieren Application Data Cache 2 - 4 GB … Cache

Slide 57

Slide 57 text

6 Der Operations-Mitarbeiter ist Dein bester Freund!

Slide 58

Slide 58 text

Caches im Cluster
 sind komplex

Slide 59

Slide 59 text

Betrieb mit an Board holen!

Slide 60

Slide 60 text

Was soll ich cachen? Wo soll ich cachen? Welchen Cache soll ich nutzen? Welchen Einfluss hat das auf meine Infrastruktur? Was muss ich in Bezug auf Datenkonsistenz beachten? Wie führe ich Caching ein?

Slide 61

Slide 61 text

7 Cache nur geeignete Daten

Slide 62

Slide 62 text

Die besten Cache Kandidaten sind read- mostly Daten, die teuer in der Beschaffung sind

Slide 63

Slide 63 text

Will man dennoch schreib- intensive Daten im Cluster cachen, dann nur mit dem Modus „distributed cache“

Slide 64

Slide 64 text

Was soll ich cachen? Wo soll ich cachen? Welchen Cache soll ich nutzen? Welchen Einfluss hat das auf meine Infrastruktur? Was muss ich in Bezug auf Datenkonsistenz beachten? Wie führe ich Caching ein?

Slide 65

Slide 65 text

8 Nutze erprobte Cache- Implementierungen

Slide 66

Slide 66 text

NIEMALS eine eigene Cache Implementierung entwickeln

Slide 67

Slide 67 text

CACHE
 Implementierungen Infinispan, EHCache, Hazelcast, Couchbase, Memcache, OSCache, SwarmCache, Xtreme Cache, Apache DirectMemory Terracotta, Coherence, Gemfire, Cacheonix, WebSphere eXtreme Scale, Oracle 12c In Memory Database

Slide 68

Slide 68 text

Was soll ich cachen? Wo soll ich cachen? Welchen Cache soll ich nutzen? Welchen Einfluss hat das auf meine Infrastruktur? Was muss ich in Bezug auf Datenkonsistenz beachten? Wie führe ich Caching ein?

Slide 69

Slide 69 text

9 Führe Caching in drei Schritten ein

Slide 70

Slide 70 text

Anwendungs- Optimierung Lokaler Cache Verteilter Cache Performance Boost Performance Slowdown

Slide 71

Slide 71 text

10 Optimiere die Serialisierung von Objekten

Slide 72

Slide 72 text

Demo Proprietäre
 Serialisierungs-Möglichkeiten

Slide 73

Slide 73 text

Beispiel: Hazelcast
 10.000 Objekte lokal schreiben und lesen GET Time PUT Time Payload Size Serializable 1287 ms 1220 ms 1164 byte Data
 Serializable 443 ms 408 ms 916 byte Identifier
 Data
 Serializable 264 ms 207 ms 882 byte

Slide 74

Slide 74 text

JAVA SERIALIZATION
 SUCKS for Caching if alternatives are present

Slide 75

Slide 75 text

11 Abstrahiere Deinen Cache Provider

Slide 76

Slide 76 text

! ! ! ! ! ! Beispiel: Spring @Cacheable("CrmIntegrationService#retrieveCustomer")! public Customer retrieveCustomer(Long customerNumber) {! ! …! }

Slide 77

Slide 77 text

Demo Kundensuche in Call-Center

Slide 78

Slide 78 text

User Interface „CRM“ 
 Kundendaten „Host“ ! Konten
 Transaktionen DB Spring + Wicket Spring Boot Java EE 7 H2 Server Netzwerk

Slide 79

Slide 79 text

12 Lagere „heisse Daten“ möglichst nah an der Anwendung

Slide 80

Slide 80 text

Beispiel: Near Cache JVM Cache Node 1 Cache Node 2 Cache Node 3 Cache Node 4 Cache Node 5 Cache Node 6

Slide 81

Slide 81 text

Beispiel: Near Cache JVM Cache Node 1 Cache Node 2 Cache Node 3 Cache Node 4 Cache Node 5 Cache Node 6 Cache Node

Slide 82

Slide 82 text

13 Verwende Off-Heap Storage für Cache Instanzen mit mehr wie 4 GB Heap Size

Slide 83

Slide 83 text

THINK BIG

Slide 84

Slide 84 text

Off Heap 30 GB RAM JVM Cache Runtime Cache Data 2 GB HEAP Keine Garbage Collection Sehr kurze Garbage Collections

Slide 85

Slide 85 text

14 JPA: Flush vor Cache Put

Slide 86

Slide 86 text

IMMER entityManager.flush() VOR Cache Put

Slide 87

Slide 87 text

14 JPA: Flush vor Cache Put 13 12 11 10 9 8 7 6 5 4 3 2 1 Off-Heap Storage für Cache Instanzen mit mehr wie 4 GB Heap Size Lagere „heisse Daten“ möglichst nah an der Anwendung Abstrahiere Deinen Cache Provider Optimiere die Serialisierung von Objekten Führe Caching in drei Schritten ein Nutze erprobte Cache-Implementierungen Cache nur geeignete Daten Der Operations-Mitarbeiter ist Dein bester Freund! Sehr grosse Datenmenge? Distributed Cache! Vermeide große Heap-Sizes nur für Caching. Ziehe Invalidation, Replication vor Bleibe so lange lokal wie möglich Identifiziere geeignete Ebenen für Caching

Slide 88

Slide 88 text

Fragen? Michael Plöd" Senacor Technologies AG" @bitboss" http://slideshare.net/mploed" michael.ploed@senacor.com"