caching - hintergründe, patterns und best practices

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

Upload: michael-ploed

Post on 14-Dec-2014

2.791 views

Category:

Documents


5 download

DESCRIPTION

Das Thema Caching ist für zahlreiche Business Anwendungen relevant und der Markt für Caching-Lösungen reicht von einfachen lokalen Caches bis hin zu mächtigen und komplexen Data Grids. Ein weiteres Differenzierungsmerkmal ist die Konsistenzgarantie beziehungsweise die transaktionale Integrität, welche die unterschiedlichen Lösungen bieten. Allerdings unterscheiden sich Anwendungen, welche Geschäftsprozesse in gewachsenen Unternehmenslandschaften umsetzen stark von sozialen Netzwerken oder Internetdiensten, welche aus dem Startup-Umfeld kommen. Der Vortrag adressiert in erster Linie das erste Szenario: Caching in Unternehmensanwendungen, welche auf Basis einer bereits bestehenden Infrastruktur umgesetzt werden. Hierbei werden zuerst die Herausforderungen, die diese Anwendungen an das Thema Caching stellen, vorgestellt. Aspekte die hierbei betrachtet werden sind: Security, Monitoring, Audit-Compliance, Art der Daten sowie Geschäftsprozesse. Im zweiten Teil werden unterschiedliche Arten des Cachings vorgestellt und im Hinblick auf die eben erwähnten Herausforderungen bewertet. Abschließend geht der Vortrag darauf ein, welche Patterns und Best Practices sich in der Praxis bewährt haben und wie das Thema Caching möglichst transparent und deterministisch in Business-Anwendungen integriert werden kann.

TRANSCRIPT

Page 1: Caching - Hintergründe, Patterns und Best Practices

CachingHintergründe, Patterns

&" Best Practices"für Business Anwendungen

Page 2: Caching - Hintergründe, Patterns und Best Practices

Michael Plöd"Senacor Technologies AG

@bitboss

Page 3: Caching - Hintergründe, Patterns und Best Practices

Business-Anwendung

!= Twitter / Facebook & co.

Page 4: Caching - Hintergründe, Patterns und Best Practices

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

Page 5: Caching - Hintergründe, Patterns und Best Practices

Caches everywhere!!!

NO WAY

Page 6: Caching - Hintergründe, Patterns und Best Practices

Viele Enterprise Projekte haben Angst vor Caching……

Page 7: Caching - Hintergründe, Patterns und Best Practices

"

…….. und setzen Caching deshalb insuffizient ein.

Page 8: Caching - Hintergründe, Patterns und Best Practices

Mit dem richtigen Einsatz von Caching können

Business-Anwendungen skalierbarer, performanter und günstiger im Betrieb

werden.

Page 9: Caching - Hintergründe, Patterns und Best Practices

Aufbau und Laufzeit-Verhalten einer typischen

Business-Anwendung

Page 10: Caching - Hintergründe, Patterns und Best Practices

Web

HostSystem

X .. Y .. ZDB

Anwendungsfall

Page 11: Caching - Hintergründe, Patterns und Best Practices

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

Page 12: Caching - Hintergründe, Patterns und Best Practices

Zu teuer! Zu langsam!Schlechter

Service!

IT-Chef Betreuer Kunde

Page 13: Caching - Hintergründe, Patterns und Best Practices

CACHESArten 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

Page 14: Caching - Hintergründe, Patterns und Best Practices

Wir betrachten primär lokales und verteiltes

Caching auf Anwendungs-Ebene mit einem Exkurs in

Richtung JPA

Page 15: Caching - Hintergründe, Patterns und Best Practices

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?

Page 16: Caching - Hintergründe, Patterns und Best Practices

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?

Page 17: Caching - Hintergründe, Patterns und Best Practices

1 Identifiziere geeignete Ebenen für Caching

Page 18: Caching - Hintergründe, Patterns und Best Practices

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

Page 19: Caching - Hintergründe, Patterns und Best Practices

2 Bleibe so lange lokal wie möglich

Page 20: Caching - Hintergründe, Patterns und Best Practices

Lokal In-Memory

JVM

Cache

Page 21: Caching - Hintergründe, Patterns und Best Practices

ClusteredJVM

Cache

JVM

Cache

JVM

Cache

JVM

Cache

Page 22: Caching - Hintergründe, Patterns und Best Practices

Demo Hazelcast lokal vs verteilt

Page 23: Caching - Hintergründe, Patterns und Best Practices

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?

Page 24: Caching - Hintergründe, Patterns und Best Practices

Ein transaktionaler Cache kostet Performance!

Page 25: Caching - Hintergründe, Patterns und Best Practices

JVM

JVM

JVM

JVM

Clustered - with sync

Cache

Cache

Cache

Cache

Invalidation

Replication

Page 26: Caching - Hintergründe, Patterns und Best Practices

3 Ziehe Invalidation, Replication vor

Page 27: Caching - Hintergründe, Patterns und Best Practices

Cache

Cache

Cache

Cache

Invalidation

Page 28: Caching - Hintergründe, Patterns und Best Practices

Cache

Cache

Cache

Cache

Invalidation

#1PUT (Insert)

PUT (Insert)

#1

#1PUT (Insert)

PUT (Insert)

#1

Page 29: Caching - Hintergründe, Patterns und Best Practices

Cache

Cache

Cache

Cache

Invalidation

#1 #1

#1#1

Page 30: Caching - Hintergründe, Patterns und Best Practices

Cache

Cache

Cache

Cache

Invalidation

#1 #1

PUT (Update)

#1#1

Page 31: Caching - Hintergründe, Patterns und Best Practices

Cache

Cache

Cache

Cache

Invalidation

PUT (Update)

#1

Page 32: Caching - Hintergründe, Patterns und Best Practices

Cache

Cache

Cache

Cache

Replication

Page 33: Caching - Hintergründe, Patterns und Best Practices

Cache

Cache

Cache

Cache

#1

#1 #1

Replication

#1PUT (Insert)

Page 34: Caching - Hintergründe, Patterns und Best Practices

Cache

Cache

Cache

Cache

#1

#1 #1

Replication

#1

Page 35: Caching - Hintergründe, Patterns und Best Practices

Cache

Cache

Cache

Cache

#1

#1 #1

Replication

#1 PUT (Update)

Page 36: Caching - Hintergründe, Patterns und Best Practices

Bisher hält jeder Cache potentiell alle Daten

und belegt Platz im Heap

Page 37: Caching - Hintergründe, Patterns und Best Practices

Big Heap

?

Page 38: Caching - Hintergründe, Patterns und Best Practices

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?

Page 39: Caching - Hintergründe, Patterns und Best Practices

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

Page 40: Caching - Hintergründe, Patterns und Best Practices

Grosser Heap führt zu langen

major GCs

Application Data

Cache

32 G

B

Page 41: Caching - Hintergründe, Patterns und Best Practices

Lange GCs können Cluster destabilisieren

JVM

Cache

JVM

Cache

JVM

Cache

JVM

Cache

Page 42: Caching - Hintergründe, Patterns und Best Practices

Lange GCs können Cluster destabilisieren

JVM

Cache

JVM

Cache

JVM

Cache

JVM

Cache

Page 43: Caching - Hintergründe, Patterns und Best Practices

Lösung: Kleine Caches?

"

Viele Evictions, wenige Hits,

„hot data“ kann nicht entstehen

Page 44: Caching - Hintergründe, Patterns und Best Practices

5 Sehr grosse Datenmenge? Distributed Cache!

Page 45: Caching - Hintergründe, Patterns und Best Practices

Distributed CachesJVM

JVM JVM

JVM

Cache Node

1

Cache Node

2

Cache Node

3

Page 46: Caching - Hintergründe, Patterns und Best Practices

Cache

1

Page 47: Caching - Hintergründe, Patterns und Best Practices

Cache

1Kunde

#23Kunde

#30

Kunde #27

Kunde #32

Page 48: Caching - Hintergründe, Patterns und Best Practices

Cache

1Kunde

#23Kunde

#30

Kunde #27

Kunde #32

2

Page 49: Caching - Hintergründe, Patterns und Best Practices

1 2Kunde

#23Kunde

#30Kunde

#27Kunde

#32

Die Daten werden verteilt und Backups

gesichert

Page 50: Caching - Hintergründe, Patterns und Best Practices

1 2Kunde

#23Kunde

#30Kunde

#27Kunde

#32

BACKUP #27

BACKUP #32

BACKUP #23

BACKUP #30

Die Daten werden verteilt und Backups

gesichert

Page 51: Caching - Hintergründe, Patterns und Best Practices

3

1 2Kunde

#23

Kunde #30

Kunde #27

Kunde #32

BACKUP #27

BACKUP #32

BACKUP #23

BACKUP #30

Page 52: Caching - Hintergründe, Patterns und Best Practices

43

1 2Kunde

#23

Kunde #30

Kunde #27

Kunde #32

BACKUP #27

BACKUP #32

BACKUP #23

BACKUP #30

Page 53: Caching - Hintergründe, Patterns und Best Practices

DEMOHazelcast

on Raspberry Pi

in Lego

Page 54: Caching - Hintergründe, Patterns und Best Practices

8 Raspberry Pis mit je einer

Hazelcast Instanz !

1 MacBook Pro mit zwei

Hazelcast Instanzen

Page 55: Caching - Hintergründe, Patterns und Best Practices

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

Page 56: Caching - Hintergründe, Patterns und Best Practices

Ein verteilter Cache führt zu kleinen Heaps, mehr Kapazität und lässt sich einfach skalieren

Application Data

Cache

2 - 4

GB

… Cache

Page 57: Caching - Hintergründe, Patterns und Best Practices

6 Der Operations-Mitarbeiter ist Dein bester Freund!

Page 58: Caching - Hintergründe, Patterns und Best Practices

Caches im Cluster sind komplex

Page 59: Caching - Hintergründe, Patterns und Best Practices

Betrieb mit an Board holen!

Page 60: Caching - Hintergründe, Patterns und Best Practices

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?

Page 61: Caching - Hintergründe, Patterns und Best Practices

7 Cache nur geeignete Daten

Page 62: Caching - Hintergründe, Patterns und Best Practices

Die besten Cache Kandidaten sind read-

mostly Daten, die teuer in der Beschaffung sind

Page 63: Caching - Hintergründe, Patterns und Best Practices

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

Page 64: Caching - Hintergründe, Patterns und Best Practices

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?

Page 65: Caching - Hintergründe, Patterns und Best Practices

8 Nutze erprobte Cache-Implementierungen

Page 66: Caching - Hintergründe, Patterns und Best Practices

NIEMALS eine eigene Cache Implementierung

entwickeln

Page 67: Caching - Hintergründe, Patterns und Best Practices

CACHEImplementierungen

Infinispan, EHCache, Hazelcast, Couchbase, Memcache, OSCache, SwarmCache, Xtreme

Cache, Apache DirectMemory

Terracotta, Coherence, Gemfire, Cacheonix, WebSphere eXtreme Scale, Oracle 12c In

Memory Database

Page 68: Caching - Hintergründe, Patterns und Best Practices

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?

Page 69: Caching - Hintergründe, Patterns und Best Practices

9 Führe Caching in drei Schritten ein

Page 70: Caching - Hintergründe, Patterns und Best Practices

Anwendungs- Optimierung

Lokaler Cache Verteilter Cache

Performance Boost

Performance Slowdown

Page 71: Caching - Hintergründe, Patterns und Best Practices

10 Optimiere die Serialisierung von Objekten

Page 72: Caching - Hintergründe, Patterns und Best Practices

Demo Proprietäre

Serialisierungs-Möglichkeiten

Page 73: Caching - Hintergründe, Patterns und Best Practices

Beispiel: Hazelcast 10.000 Objekte lokal schreiben und lesen

GET Time PUT Time Payload Size

Serializable 1287 ms 1220 ms 1164 byte

DataSerializable 443 ms 408 ms 916 byte

IdentifierData

Serializable264 ms 207 ms 882 byte

Page 74: Caching - Hintergründe, Patterns und Best Practices

JAVA SERIALIZATIONSUCKS

for Caching if alternatives are present

Page 75: Caching - Hintergründe, Patterns und Best Practices

11 Abstrahiere Deinen Cache Provider

Page 76: Caching - Hintergründe, Patterns und Best Practices

<cache:annotation-driven cache-manager="ehCacheManager"/>!!<!-- EH Cache local -->!<bean id="ehCacheManager" ! class="org.springframework.cache.ehcache.EhCacheCacheManager"! p:cacheManager-ref="ehcache"/>!! !<bean id="ehcache" ! class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"!! p:configLocation="/ehcache.xml"/>

Beispiel: Spring

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

Page 77: Caching - Hintergründe, Patterns und Best Practices

Demo Kundensuche in Call-Center

Page 78: Caching - Hintergründe, Patterns und Best Practices

User Interface

„CRM“

Kundendaten

„Host“ !

Konten Transaktionen

DB

Spring + Wicket

Spring Boot Java EE 7 H2 Server

Netzwerk

Page 79: Caching - Hintergründe, Patterns und Best Practices

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

Page 80: Caching - Hintergründe, Patterns und Best Practices

Beispiel: Near Cache

JVMCache Node

1

Cache Node

2

Cache Node

3

Cache Node

4

Cache Node

5

Cache Node

6

Page 81: Caching - Hintergründe, Patterns und Best Practices

Beispiel: Near Cache

JVMCache Node

1

Cache Node

2

Cache Node

3

Cache Node

4

Cache Node

5

Cache Node

6

Cache Node

Page 82: Caching - Hintergründe, Patterns und Best Practices

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

Page 83: Caching - Hintergründe, Patterns und Best Practices

THINK

BIG

Page 84: Caching - Hintergründe, Patterns und Best Practices

Off Heap

30 G

B RA

MJVM

Cache Runtime

Cache Data

2 G

B H

EAP

Keine Garbage Collection

Sehr kurze Garbage Collections

Page 85: Caching - Hintergründe, Patterns und Best Practices

14 JPA: Flush vor Cache Put

Page 86: Caching - Hintergründe, Patterns und Best Practices

IMMER entityManager.flush()

VOR Cache Put

Page 87: Caching - Hintergründe, Patterns und Best Practices

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

Page 88: Caching - Hintergründe, Patterns und Best Practices

Fragen?Michael Plöd"

Senacor Technologies AG"@bitboss"

http://slideshare.net/mploed"[email protected]"