Caching - Hintergründe, Patterns und Best Practices

Post on 14-Dec-2014

2785 Views

Category:

Documents

5 Downloads

Preview:

Click to see full reader

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

CachingHintergründe, Patterns

&" Best Practices"für Business Anwendungen

Michael Plöd"Senacor Technologies AG

@bitboss

Business-Anwendung

!= Twitter / Facebook & co.

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

Caches everywhere!!!

NO WAY

Viele Enterprise Projekte haben Angst vor Caching……

"

…….. und setzen Caching deshalb insuffizient ein.

Mit dem richtigen Einsatz von Caching können

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

werden.

Aufbau und Laufzeit-Verhalten einer typischen

Business-Anwendung

Web

HostSystem

X .. Y .. ZDB

Anwendungsfall

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

Zu teuer! Zu langsam!Schlechter

Service!

IT-Chef Betreuer Kunde

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

Wir betrachten primär lokales und verteiltes

Caching auf Anwendungs-Ebene mit einem Exkurs in

Richtung JPA

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?

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?

1 Identifiziere geeignete Ebenen für Caching

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

2 Bleibe so lange lokal wie möglich

Lokal In-Memory

JVM

Cache

ClusteredJVM

Cache

JVM

Cache

JVM

Cache

JVM

Cache

Demo Hazelcast lokal vs verteilt

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?

Ein transaktionaler Cache kostet Performance!

JVM

JVM

JVM

JVM

Clustered - with sync

Cache

Cache

Cache

Cache

Invalidation

Replication

3 Ziehe Invalidation, Replication vor

Cache

Cache

Cache

Cache

Invalidation

Cache

Cache

Cache

Cache

Invalidation

#1PUT (Insert)

PUT (Insert)

#1

#1PUT (Insert)

PUT (Insert)

#1

Cache

Cache

Cache

Cache

Invalidation

#1 #1

#1#1

Cache

Cache

Cache

Cache

Invalidation

#1 #1

PUT (Update)

#1#1

Cache

Cache

Cache

Cache

Invalidation

PUT (Update)

#1

Cache

Cache

Cache

Cache

Replication

Cache

Cache

Cache

Cache

#1

#1 #1

Replication

#1PUT (Insert)

Cache

Cache

Cache

Cache

#1

#1 #1

Replication

#1

Cache

Cache

Cache

Cache

#1

#1 #1

Replication

#1 PUT (Update)

Bisher hält jeder Cache potentiell alle Daten

und belegt Platz im Heap

Big Heap

?

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?

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

Grosser Heap führt zu langen

major GCs

Application Data

Cache

32 G

B

Lange GCs können Cluster destabilisieren

JVM

Cache

JVM

Cache

JVM

Cache

JVM

Cache

Lange GCs können Cluster destabilisieren

JVM

Cache

JVM

Cache

JVM

Cache

JVM

Cache

Lösung: Kleine Caches?

"

Viele Evictions, wenige Hits,

„hot data“ kann nicht entstehen

5 Sehr grosse Datenmenge? Distributed Cache!

Distributed CachesJVM

JVM JVM

JVM

Cache Node

1

Cache Node

2

Cache Node

3

Cache

1

Cache

1Kunde

#23Kunde

#30

Kunde #27

Kunde #32

Cache

1Kunde

#23Kunde

#30

Kunde #27

Kunde #32

2

1 2Kunde

#23Kunde

#30Kunde

#27Kunde

#32

Die Daten werden verteilt und Backups

gesichert

1 2Kunde

#23Kunde

#30Kunde

#27Kunde

#32

BACKUP #27

BACKUP #32

BACKUP #23

BACKUP #30

Die Daten werden verteilt und Backups

gesichert

3

1 2Kunde

#23

Kunde #30

Kunde #27

Kunde #32

BACKUP #27

BACKUP #32

BACKUP #23

BACKUP #30

43

1 2Kunde

#23

Kunde #30

Kunde #27

Kunde #32

BACKUP #27

BACKUP #32

BACKUP #23

BACKUP #30

DEMOHazelcast

on Raspberry Pi

in Lego

8 Raspberry Pis mit je einer

Hazelcast Instanz !

1 MacBook Pro mit zwei

Hazelcast Instanzen

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

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

Application Data

Cache

2 - 4

GB

… Cache

6 Der Operations-Mitarbeiter ist Dein bester Freund!

Caches im Cluster sind komplex

Betrieb mit an Board holen!

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?

7 Cache nur geeignete Daten

Die besten Cache Kandidaten sind read-

mostly Daten, die teuer in der Beschaffung sind

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

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?

8 Nutze erprobte Cache-Implementierungen

NIEMALS eine eigene Cache Implementierung

entwickeln

CACHEImplementierungen

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

Cache, Apache DirectMemory

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

Memory Database

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?

9 Führe Caching in drei Schritten ein

Anwendungs- Optimierung

Lokaler Cache Verteilter Cache

Performance Boost

Performance Slowdown

10 Optimiere die Serialisierung von Objekten

Demo Proprietäre

Serialisierungs-Möglichkeiten

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

JAVA SERIALIZATIONSUCKS

for Caching if alternatives are present

11 Abstrahiere Deinen Cache Provider

<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) {!! …!}

Demo Kundensuche in Call-Center

User Interface

„CRM“

Kundendaten

„Host“ !

Konten Transaktionen

DB

Spring + Wicket

Spring Boot Java EE 7 H2 Server

Netzwerk

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

Beispiel: Near Cache

JVMCache Node

1

Cache Node

2

Cache Node

3

Cache Node

4

Cache Node

5

Cache Node

6

Beispiel: Near Cache

JVMCache Node

1

Cache Node

2

Cache Node

3

Cache Node

4

Cache Node

5

Cache Node

6

Cache Node

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

THINK

BIG

Off Heap

30 G

B RA

MJVM

Cache Runtime

Cache Data

2 G

B H

EAP

Keine Garbage Collection

Sehr kurze Garbage Collections

14 JPA: Flush vor Cache Put

IMMER entityManager.flush()

VOR Cache Put

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

Fragen?Michael Plöd"

Senacor Technologies AG"@bitboss"

http://slideshare.net/mploed"michael.ploed@senacor.com"

top related