Caching - Hintergründe, Patterns und Best Practices

4.420 Aufrufe

Veröffentlicht am

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 Kommentar
10 Gefällt mir
Statistik
Notizen
Keine Downloads
Aufrufe
Aufrufe insgesamt
4.420
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
68
Aktionen
Geteilt
0
Downloads
58
Kommentare
1
Gefällt mir
10
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

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"

×