Caching
Hintergrü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 Hinter...
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
werd...
Aufbau und Laufzeit-
Verhalten einer typischen
Business-Anwendung
Web
Host
System
X .. Y .. Z
DB
Anwendungsfall
Host
System
X .. Y .. Z
DB
Host-Services werden in der Regel pro
Aufruf abgerechnet
Aufrufe von Umsystemen benötigen in
de...
Zu teuer! Zu langsam!
Schlechter
Service!
IT-Chef Betreuer Kunde
CACHESArtenvon 

Orte für
Local Cache, Data Grid, Document Store, JPA
First Level Cache, JPA Second Level Cache,
Hybrid Ca...
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?
W...
Was soll
ich cachen?
Wo soll ich
cachen?
Welchen Cache soll ich
nutzen?
Welchen Einfluss hat das
auf meine Infrastruktur?
W...
1 Identifiziere geeignete
Ebenen für Caching
BeschwerdeManagementRestController
BeschwerdeManagementBusinessService
DatenBeschaffungsManager
Host!
Commands
Umsystem!
C...
2 Bleibe so lange lokal wie
möglich
Lokal In-Memory
JVM
Cache
Clustered
JVM
Cache
JVM
Cache
JVM
Cache
JVM
Cache
DemoHazelcast lokal vs verteilt
Was soll
ich cachen?
Wo soll ich
cachen?
Welchen Cache soll ich
nutzen?
Welchen Einfluss hat das
auf meine Infrastruktur?
W...
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
#1
PUT
(Insert)
PUT
(Insert)
#1
#1
PUT
(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
#1
PUT
(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?
W...
4 Vermeide große Heap-Sizes
nur für Caching.
Grosser Heap
führt zu langen
major GCs
Application
Data
Cache
32GB
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 Caches
JVM
JVM JVM
JVM
Cache Node
1
Cache Node
2
Cache Node
3
1
1
Kunde
#23
Kunde
#30
Kunde
#27
Kunde
#32
1
Kunde
#23
Kunde
#30
Kunde
#27
Kunde
#32
2
1 2
Kunde
#23
Kunde
#30
Kunde
#27
Kunde
#32
Die Daten werden
verteilt und Backups
gesichert
1 2
Kunde
#23
Kunde
#30
Kunde
#27
Kunde
#32
BACKUP
#27
BACKUP
#32
BACKUP
#23
BACKUP
#30
Die Daten werden
verteilt und Back...
3
1 2
Kunde
#23
Kunde
#30
Kunde
#27
Kunde
#32
BACKUP
#27
BACKUP
#32
BACKUP
#23
BACKUP
#30
43
1 2
Kunde
#23
Kunde
#30
Kunde
#27
Kunde
#32
BACKUP
#27
BACKUP
#32
BACKUP
#23
BACKUP
#30
DEMO
Hazelcast

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
Raspber...
Ein verteilter Cache führt zu
kleinen Heaps, mehr Kapazität
und lässt sich einfach skalieren
Application
Data
Cache
2-4GB
...
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?
W...
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?
W...
8 Nutze erprobte Cache-
Implementierungen
NIEMALS
eine eigene Cache
Implementierung
entwickeln
CACHE

Implementierungen
Infinispan, EHCache, Hazelcast, Couchbase,
Memcache, OSCache, SwarmCache, Xtreme
Cache, Apache Dir...
Was soll
ich cachen?
Wo soll ich
cachen?
Welchen Cache soll ich
nutzen?
Welchen Einfluss hat das
auf meine Infrastruktur?
W...
9 Führe Caching in drei
Schritten ein
Anwendungs-
Optimierung
Lokaler Cache Verteilter Cache
Performance
Boost
Performance
Slowdown
10 Optimiere die Serialisierung
von Objekten
DemoProprietäre

Serialisierungs-Möglichkeiten
Beispiel: Hazelcast

10.000 Objekte lokal schreiben und lesen
GET Time PUT Time Payload Size
Serializable 1287 ms 1220 ms ...
JAVA
SERIALIZATION

SUCKSfor Caching if alternatives are present
11 Abstrahiere Deinen Cache
Provider
<cache:annotation-driven cache-manager="ehCacheManager"/>!
!
<!-- EH Cache local -->!
<bean id="ehCacheManager" 

! class=...
DemoKundensuche in Call-Center
User Interface
„CRM“


Kundendaten
„Host“
!
Konten

Transaktionen
DB
Spring + Wicket
Spring Boot Java EE 7 H2 Server
Netzw...
12
Lagere „heisse Daten“
möglichst nah an der
Anwendung
Beispiel: Near Cache
JVM
Cache Node
1
Cache Node
2
Cache Node
3
Cache Node
4
Cache Node
5
Cache Node
6
Beispiel: Near Cache
JVM
Cache Node
1
Cache Node
2
Cache Node
3
Cache Node
4
Cache Node
5
Cache Node
6
Cache Node
13
Verwende Off-Heap
Storage für Cache
Instanzen mit mehr wie 4
GB Heap Size
THINK
BIG
Off Heap
30GBRAM
JVM
Cache Runtime
Cache
Data
2GBHEAP 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...
Fragen?
Michael Plöd"
Senacor Technologies AG"
@bitboss"
http://slideshare.net/mploed"
michael.ploed@senacor.com"
Upcoming SlideShare
Loading in...5
×

Caching - Hintergründe, Patterns und Best Practices

3,385

Published on

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.

1 Comment
9 Likes
Statistics
Notes
No Downloads
Views
Total Views
3,385
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
45
Comments
1
Likes
9
Embeds 0
No embeds

No notes for slide

Caching - Hintergründe, Patterns und Best Practices

  1. 1. Caching Hintergründe, Patterns
 &" Best Practices" für Business Anwendungen
  2. 2. Michael Plöd" Senacor Technologies AG @bitboss
  3. 3. Business-Anwendung !=
 Twitter / Facebook & co.
  4. 4. 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
  5. 5. Caches everywhere!!! NO WAY
  6. 6. Viele Enterprise Projekte haben Angst vor Caching……
  7. 7. " …….. und setzen Caching 
 deshalb insuffizient ein.
  8. 8. Mit dem richtigen Einsatz von Caching können Business-Anwendungen skalierbarer, performanter und günstiger im Betrieb werden.
  9. 9. Aufbau und Laufzeit- Verhalten einer typischen Business-Anwendung
  10. 10. Web Host System X .. Y .. Z DB Anwendungsfall
  11. 11. 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
  12. 12. Zu teuer! Zu langsam! Schlechter Service! IT-Chef Betreuer Kunde
  13. 13. CACHESArtenvon 
 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
  14. 14. Wir betrachten primär lokales und verteiltes Caching auf Anwendungs- Ebene mit einem Exkurs in Richtung JPA
  15. 15. 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?
  16. 16. 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?
  17. 17. 1 Identifiziere geeignete Ebenen für Caching
  18. 18. 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
  19. 19. 2 Bleibe so lange lokal wie möglich
  20. 20. Lokal In-Memory JVM Cache
  21. 21. Clustered JVM Cache JVM Cache JVM Cache JVM Cache
  22. 22. DemoHazelcast lokal vs verteilt
  23. 23. 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?
  24. 24. Ein transaktionaler Cache kostet Performance!
  25. 25. JVM JVM JVM JVM Clustered - with sync Cache Cache Cache Cache Invalidation Replication
  26. 26. 3 Ziehe Invalidation, Replication vor
  27. 27. Cache Cache Cache Cache Invalidation
  28. 28. Cache Cache Cache Cache Invalidation #1 PUT (Insert) PUT (Insert) #1 #1 PUT (Insert) PUT (Insert) #1
  29. 29. Cache Cache Cache Cache Invalidation #1 #1 #1#1
  30. 30. Cache Cache Cache Cache Invalidation #1 #1 PUT (Update) #1#1
  31. 31. Cache Cache Cache Cache Invalidation PUT (Update) #1
  32. 32. Cache Cache Cache Cache Replication
  33. 33. Cache Cache Cache Cache #1 #1 #1 Replication #1 PUT (Insert)
  34. 34. Cache Cache Cache Cache #1 #1 #1 Replication #1
  35. 35. Cache Cache Cache Cache #1 #1 #1 Replication #1 PUT (Update)
  36. 36. Bisher hält jeder Cache potentiell alle Daten und belegt Platz im Heap
  37. 37. Big Heap ?
  38. 38. 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?
  39. 39. 4 Vermeide große Heap-Sizes nur für Caching.
  40. 40. Grosser Heap führt zu langen major GCs Application Data Cache 32GB
  41. 41. Lange GCs können Cluster destabilisieren JVM Cache JVM Cache JVM Cache JVM Cache
  42. 42. Lange GCs können Cluster destabilisieren JVM Cache JVM Cache JVM Cache JVM Cache
  43. 43. Lösung: Kleine Caches? " Viele Evictions, wenige Hits, „hot data“ kann nicht entstehen
  44. 44. 5 Sehr grosse Datenmenge? Distributed Cache!
  45. 45. Distributed Caches JVM JVM JVM JVM Cache Node 1 Cache Node 2 Cache Node 3
  46. 46. 1
  47. 47. 1 Kunde #23 Kunde #30 Kunde #27 Kunde #32
  48. 48. 1 Kunde #23 Kunde #30 Kunde #27 Kunde #32 2
  49. 49. 1 2 Kunde #23 Kunde #30 Kunde #27 Kunde #32 Die Daten werden verteilt und Backups gesichert
  50. 50. 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
  51. 51. 3 1 2 Kunde #23 Kunde #30 Kunde #27 Kunde #32 BACKUP #27 BACKUP #32 BACKUP #23 BACKUP #30
  52. 52. 43 1 2 Kunde #23 Kunde #30 Kunde #27 Kunde #32 BACKUP #27 BACKUP #32 BACKUP #23 BACKUP #30
  53. 53. DEMO Hazelcast
 on Raspberry Pi in Lego
  54. 54. 8 Raspberry Pis mit je einer Hazelcast Instanz ! 1 MacBook Pro mit zwei Hazelcast Instanzen
  55. 55. 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
  56. 56. Ein verteilter Cache führt zu kleinen Heaps, mehr Kapazität und lässt sich einfach skalieren Application Data Cache 2-4GB … Cache
  57. 57. 6 Der Operations-Mitarbeiter ist Dein bester Freund!
  58. 58. Caches im Cluster
 sind komplex
  59. 59. Betrieb mit an Board holen!
  60. 60. 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?
  61. 61. 7 Cache nur geeignete Daten
  62. 62. Die besten Cache Kandidaten sind read- mostly Daten, die teuer in der Beschaffung sind
  63. 63. Will man dennoch schreib- intensive Daten im Cluster cachen, dann nur mit dem Modus „distributed cache“
  64. 64. 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?
  65. 65. 8 Nutze erprobte Cache- Implementierungen
  66. 66. NIEMALS eine eigene Cache Implementierung entwickeln
  67. 67. 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
  68. 68. 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?
  69. 69. 9 Führe Caching in drei Schritten ein
  70. 70. Anwendungs- Optimierung Lokaler Cache Verteilter Cache Performance Boost Performance Slowdown
  71. 71. 10 Optimiere die Serialisierung von Objekten
  72. 72. DemoProprietäre
 Serialisierungs-Möglichkeiten
  73. 73. 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
  74. 74. JAVA SERIALIZATION
 SUCKSfor Caching if alternatives are present
  75. 75. 11 Abstrahiere Deinen Cache Provider
  76. 76. <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) {! ! …! }
  77. 77. DemoKundensuche in Call-Center
  78. 78. User Interface „CRM“ 
 Kundendaten „Host“ ! Konten
 Transaktionen DB Spring + Wicket Spring Boot Java EE 7 H2 Server Netzwerk
  79. 79. 12 Lagere „heisse Daten“ möglichst nah an der Anwendung
  80. 80. Beispiel: Near Cache JVM Cache Node 1 Cache Node 2 Cache Node 3 Cache Node 4 Cache Node 5 Cache Node 6
  81. 81. Beispiel: Near Cache JVM Cache Node 1 Cache Node 2 Cache Node 3 Cache Node 4 Cache Node 5 Cache Node 6 Cache Node
  82. 82. 13 Verwende Off-Heap Storage für Cache Instanzen mit mehr wie 4 GB Heap Size
  83. 83. THINK BIG
  84. 84. Off Heap 30GBRAM JVM Cache Runtime Cache Data 2GBHEAP Keine Garbage Collection Sehr kurze Garbage Collections
  85. 85. 14 JPA: Flush vor Cache Put
  86. 86. IMMER entityManager.flush() VOR Cache Put
  87. 87. 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
  88. 88. Fragen? Michael Plöd" Senacor Technologies AG" @bitboss" http://slideshare.net/mploed" michael.ploed@senacor.com"
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×