SlideShare une entreprise Scribd logo
@ljacomet#ehcachedvx
Caching reboot
javax.cache & Ehcache 3
@ljacomet#ehcachedvx
Au menu
• Mise en bouche: Pourquoi un cache?
• Entrée : JSR-107
• APIs et fonctionnalités
• Plat principal : Une application et son cache
• Cache aside
• Cache through
• Dessert : Stratégie de résilience
• Mignardises
@ljacomet#ehcachedvx
T’es qui toi?
• Louis Jacomet
• Développeur plus vers la 40aine que la 20aine
• Ingénieur chez Terracotta (Software AG) depuis 2013
• Travaille sur Ehcache OS et Entreprise principalement
• aussi un peu manager et responsable infrastructure
• Ne sais pas faire une (jolie) UI - surtout web
• mais aime bien la concurrence, se torturer pour faire une
belle API, …
@ljacomet#ehcachedvx
Disclaimer
Tout ce que je dis ne peux pas être
retenu contre moi ou mon employeur.
Et rien n’est garanti d’ailleurs!
Mise en bouche
Pourquoi un cache?
@ljacomet#ehcachedvx
Pourquoi un cache?
@ljacomet#ehcachedvx
Et en français?
• Minute:
• Accès  cache  L1                              0,5  s      Un  battement  de  coeur  
• Erreur  de  branche                        5      s      Bailler  
• Accès  cache  L2                              7      s      Bailler  un  lendemain  de  veille  
• Mutex  lock/unlock                      25      s      Faire  un  café  
• Heure:
• Accès  RAM                                    100      s      Se  brosser  les  dents  
• Compression  de  1K                      50      min  Un  episode  de  votre  série  
• Jour:
• Envoyer  2KB  avec  réseau  Gb      5,5  h      Votre  après  midi  de  boulot
@ljacomet#ehcachedvx
Et en français?
• Semaine:
• Lecture  aléatoire  SSD                      1,7  j            Un  week-­‐end  
• Lire  en  séquence  1  MB  de  RAM        2,9  j            Un  long  week-­‐end  
• Aller-­‐retour  dans  un  datacenter  5,8  j            Des  vacances  
• Lire  en  séquence  1MB  du  SSD        11,6  j            15  jours  pour  être  livré  
• Année:
• Localiser  sur  un  HDD                      16,5  sem        Semestre  à  l’école  
• Lire  en  séquence  1MB  du  HDD          7,8  mois      Presque  un  bébé  
• Décennie:
• Un  paquet  fait  le  tour  du  monde  4,8  années  Votre  doctorat
@ljacomet#ehcachedvx
C’est quoi un cache?
• Une structure de données contenant une copie temporaire de
certaines données
• Compromis entre une augmentation de la consommation
mémoire et une réduction de latence
• Cibles :
• Données qui sont ré-utilisées
• Données qui sont chères à récupérer / calculer
@ljacomet#ehcachedvx
Ehcache (3)
• Nouvelle version - intégration de premier plan avec JSR-107
• Développement complètement OpenSource
• https://github.com/ehcache/ehcache3
• Hangout public en moyenne 1 fois par semaine (en anglais)
Entrée
JSR-107 - javax.caching
@ljacomet#ehcachedvx
JSR-107
• Vieux JSR
• Commencé en 2001
• Approuvée récemment (Mars 2014)
• javax.caching API + TCK + implémentation de référence
• Facilite l’intégration d’un cache dans les frameworks
• Discussion pour la version 2.0 en cours
• Fonctionnalités asynchrones
@ljacomet#ehcachedvx
JSR-107 : Fonctionnalités
•CacheManager / Cache  
•Expiration
•Creation/Access/Update
•Intégration
•CacheLoader / Writer
•CacheEntryListener
•Created/Updated
•Removed/Expired
•Accès ancienne valeur
•Mutations en place
•Annotations
•MBeans
•Accès configuration
•Statistiques
•Pas de contrôle de
capacité !
@YourTwitterHandle@YourTwitterHandle@ljacomet#ehcachedvx
Demo
Plat principal
Une application et son cache
@ljacomet#ehcachedvx
public ObjetMetier calculeEtGagne(String param1, String
param2) {


String cle = composeCle(param1, param2);

ObjetMetier resultatEnCache = cache.get(cle);


if (resultatEnCache == null) {

resultatEnCache = chargeEtCalcule(param1, param2);

cache.put(cle, resultatEnCache);

}

return resultatEnCache;

}
Cache Aside
@ljacomet#ehcachedvx
Cache Aside : pas si simple
• Nécessite de la coordination entre
• le cache
• et le système de référence
• Pas d’option de locking
• Potentiel pour devenir laid et problématique très rapidement
@ljacomet#ehcachedvx
Cache Aside: options
• Utilisez les abstractions de votre framework préféré
• Spring Caching
• Hibernate
• …
• Alternatives ?
@ljacomet#ehcachedvx
public ObjetMetier calculeEtGagne(String param1, String
param2) {

return cache.get(composeCle(param1, param2));

}
Cache Through
@ljacomet#ehcachedvx
Cache Through
Cache
Application
code
RDBMS
@ljacomet#ehcachedvx
Cache Through
• get* => CacheLoader
• un cache miss veut dire pas de données
• put* => CacheWriter
• chaque entrée signifie une écriture dans le système de
données
• Contraintes:API des CacheLoader / CacheWriter
@ljacomet#ehcachedvx
Cache Through : JSR-107
• Particularités … particulières …
• putIfAbsent(K key,V value): boolean
• Ignore le CacheLoader mais pas le CacheWriter
• Ehcache 3 permet de changer ce comportement par
configuration
• Comportement généralisé aux opérations atomiques
@ljacomet#ehcachedvx
Cache Through : Write Behind
• L’accès au système de référence se fait de manière asynchrone
• Le thread utilisateur ne paye plus la latence
• Introduit son lot de complexité
• File d’écriture persistante ou non ?
• Risque de mutation appliquée plusieurs fois en cas d’erreur
• Quid en cas d’eviction ?
Dessert
Stratégie de résilience
@ljacomet#ehcachedvx
Stratégie de résilience
• Postulat:
“Une erreur au niveau du cache
ne devrait pas être la cause
d’une erreur pour l’utilisateur “
P.S. Ceci est en cours de développement et donc peut
encore changer
@ljacomet#ehcachedvx
Ehcache 3
• Gestion des erreurs au maximum en interne
• cache simple en mémoire => pas d’exception dans le thread
d’exécution
• Log par défaut, possibilité de remplacer l’implémentation
• Mise en évidence pour l’applicatif des cas résultant en une
possible incohérence du cache
Mignardises
Ehcache 3 et Terracotta
@ljacomet#ehcachedvx
Implémentation offheap
• Résoudre le problème des pauses liées au Garbage Collector
• Possibilité de scale-up du cache
• Plusieurs TerraBytes … si le serveur le permet
• Implémentation validée par plusieurs années de production
• 2.0.0 disponible sur GitHub
• https://github.com/Terracotta-OSS/offheap-store
@ljacomet#ehcachedvx
Support du clustering
• Partage de données au travers de plusieurs JVM
• Terracotta 4.3.0 offre à nouveau une option de clustering
OpenSource
• Intégration avec Ehcache 2.10.0
• Ehcache 3 aura aussi une option de clustering OpenSource
• Détails à venir
@YourTwitterHandle@YourTwitterHandle@ljacomet#ehcachedvx
Questions ?

Contenu connexe

PPTX
Realtime Web avec Kafka, Spark et Mesos
PDF
EBIZNEXT-RIAK
PPT
Devoxx 2016 - Dropwizard : Création de services REST production-ready
PDF
Consolidez vos journaux et vos métriques avec Elastic Beats
PDF
Python + ansible = ♥
PDF
Devoxx France - Où sont passés mes serveurs ?
PDF
Présentation de Apache Zookeeper
PDF
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearch
Realtime Web avec Kafka, Spark et Mesos
EBIZNEXT-RIAK
Devoxx 2016 - Dropwizard : Création de services REST production-ready
Consolidez vos journaux et vos métriques avec Elastic Beats
Python + ansible = ♥
Devoxx France - Où sont passés mes serveurs ?
Présentation de Apache Zookeeper
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearch

Tendances (20)

PDF
Paris Kafka Meetup - Concepts & Architecture
PDF
Kafka Connect & Kafka Streams - Paris Kafka User Group
PDF
Riak introduction
PPTX
Comment sauvegarder correctement vos données
 
PDF
Apache Kafka, Un système distribué de messagerie hautement performant
PPTX
Apache flink - prise en main rapide
PPTX
Programmation réactive avec Spring 5 et Reactor
PDF
Programmation concurrente en Java
PPTX
WebSocket avec Java EE 7
PDF
Stockage et analyse temps réel d'événements avec Riak chez Booking.com
PDF
Introduction au langage Go
PDF
kubernetes, pourquoi et comment
PDF
Cassandra Ippevent 20 Juin 2013
PDF
Le futur d'apache cassandra
PPTX
Devoxx fr 2015 HAProxy
PPTX
Techdays 2014 - Le fermier azure (2ème partie)
ODP
Etes vous prêts pour le succes ?
PPT
APACHE TOMCAT
PDF
Les Nouveautés de zabbix 2.2 par Alain Ganuchaud
PDF
Performance serveur et apache
Paris Kafka Meetup - Concepts & Architecture
Kafka Connect & Kafka Streams - Paris Kafka User Group
Riak introduction
Comment sauvegarder correctement vos données
 
Apache Kafka, Un système distribué de messagerie hautement performant
Apache flink - prise en main rapide
Programmation réactive avec Spring 5 et Reactor
Programmation concurrente en Java
WebSocket avec Java EE 7
Stockage et analyse temps réel d'événements avec Riak chez Booking.com
Introduction au langage Go
kubernetes, pourquoi et comment
Cassandra Ippevent 20 Juin 2013
Le futur d'apache cassandra
Devoxx fr 2015 HAProxy
Techdays 2014 - Le fermier azure (2ème partie)
Etes vous prêts pour le succes ?
APACHE TOMCAT
Les Nouveautés de zabbix 2.2 par Alain Ganuchaud
Performance serveur et apache
Publicité

En vedette (16)

PDF
Caching principles-solutions
PPTX
Memcache
PDF
Aop clustering
PDF
Terracotta Java Scalability - Stateless Versus Stateful Apps
PDF
Exploring Terracotta
PPTX
5 Reasons to Upgrade Ehcache to BigMemory Go
PDF
Scale ColdFusion with Terracotta Distributed Caching for Ehchache
PDF
Building High Scalability Apps With Terracotta
PPTX
Terracotta Hadoop & In-Memory Webcast
PDF
Advanced caching techniques with ehcache, big memory, terracotta, and coldfusion
PDF
Introduction to Terracotta
PPTX
Clustering Java applications with Terracotta and Hazelcast
PDF
Scaling Hibernate with Terracotta
PPTX
Architectural Terracotta History, Composition, Failure, Anchoring, Repair and...
KEY
Terracotta And Hibernate
PDF
Scalability, Availability & Stability Patterns
Caching principles-solutions
Memcache
Aop clustering
Terracotta Java Scalability - Stateless Versus Stateful Apps
Exploring Terracotta
5 Reasons to Upgrade Ehcache to BigMemory Go
Scale ColdFusion with Terracotta Distributed Caching for Ehchache
Building High Scalability Apps With Terracotta
Terracotta Hadoop & In-Memory Webcast
Advanced caching techniques with ehcache, big memory, terracotta, and coldfusion
Introduction to Terracotta
Clustering Java applications with Terracotta and Hazelcast
Scaling Hibernate with Terracotta
Architectural Terracotta History, Composition, Failure, Anchoring, Repair and...
Terracotta And Hibernate
Scalability, Availability & Stability Patterns
Publicité

Similaire à Caching reboot: javax.cache & Ehcache 3 (20)

PDF
Direct memory @ devoxxfr
PDF
Direct memory 3_devoxx_fr_2012-2.04.18
PPTX
Au cœur du Framework .NET 4.5.1
PPTX
FinistJUG - Apache TomEE
PPTX
La mise en cache et ses secrets
PPTX
Au coeur du framework .net 4.5.1
PPTX
Quoi de neuf à Devoxx France 2017 ?
PPTX
Elasticsearch 5.0 les nouveautés
PPTX
Javascript proprement
PDF
Javaday Paris 2022 - Java en 2022 : profiter de Java 17
PDF
Importer 500 millions de données de MySQL vers Neo4j
PDF
YLT paris js - mars 2015
PPTX
Javascript as a first programming language : votre IC prête pour la révolution !
PDF
XebiConFr 15 - À la découverte des mécanismes internes de Cassandra
PPTX
A la queue leu leu
PPTX
Scalabilité et haute performance d'application PHP légacy
KEY
Rails 3 au Djangocong
PDF
Toutes les raisons d'adopter MongoDB
PPT
Memcached, une solution de cache par excellence
PDF
Optimiser wordpress
Direct memory @ devoxxfr
Direct memory 3_devoxx_fr_2012-2.04.18
Au cœur du Framework .NET 4.5.1
FinistJUG - Apache TomEE
La mise en cache et ses secrets
Au coeur du framework .net 4.5.1
Quoi de neuf à Devoxx France 2017 ?
Elasticsearch 5.0 les nouveautés
Javascript proprement
Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Importer 500 millions de données de MySQL vers Neo4j
YLT paris js - mars 2015
Javascript as a first programming language : votre IC prête pour la révolution !
XebiConFr 15 - À la découverte des mécanismes internes de Cassandra
A la queue leu leu
Scalabilité et haute performance d'application PHP légacy
Rails 3 au Djangocong
Toutes les raisons d'adopter MongoDB
Memcached, une solution de cache par excellence
Optimiser wordpress

Plus de Louis Jacomet (8)

PDF
Protecting your organization against attacks via the build system
PDF
Caching 101: Caching on the JVM (and beyond)
PDF
Data consistency: Analyse, understand and decide
PDF
Caching 101: sur la JVM et au delà
PDF
Caching 101: Caching on the JVM (and beyond)
PDF
Ehcache 3 @ BruJUG
PDF
Caching reboot: javax.cache & Ehcache 3
PDF
Ehcache 3: JSR-107 on steroids at Devoxx Morocco
Protecting your organization against attacks via the build system
Caching 101: Caching on the JVM (and beyond)
Data consistency: Analyse, understand and decide
Caching 101: sur la JVM et au delà
Caching 101: Caching on the JVM (and beyond)
Ehcache 3 @ BruJUG
Caching reboot: javax.cache & Ehcache 3
Ehcache 3: JSR-107 on steroids at Devoxx Morocco

Caching reboot: javax.cache & Ehcache 3

  • 2. @ljacomet#ehcachedvx Au menu • Mise en bouche: Pourquoi un cache? • Entrée : JSR-107 • APIs et fonctionnalités • Plat principal : Une application et son cache • Cache aside • Cache through • Dessert : Stratégie de résilience • Mignardises
  • 3. @ljacomet#ehcachedvx T’es qui toi? • Louis Jacomet • Développeur plus vers la 40aine que la 20aine • Ingénieur chez Terracotta (Software AG) depuis 2013 • Travaille sur Ehcache OS et Entreprise principalement • aussi un peu manager et responsable infrastructure • Ne sais pas faire une (jolie) UI - surtout web • mais aime bien la concurrence, se torturer pour faire une belle API, …
  • 4. @ljacomet#ehcachedvx Disclaimer Tout ce que je dis ne peux pas être retenu contre moi ou mon employeur. Et rien n’est garanti d’ailleurs!
  • 7. @ljacomet#ehcachedvx Et en français? • Minute: • Accès  cache  L1                              0,5  s      Un  battement  de  coeur   • Erreur  de  branche                        5      s      Bailler   • Accès  cache  L2                              7      s      Bailler  un  lendemain  de  veille   • Mutex  lock/unlock                      25      s      Faire  un  café   • Heure: • Accès  RAM                                    100      s      Se  brosser  les  dents   • Compression  de  1K                      50      min  Un  episode  de  votre  série   • Jour: • Envoyer  2KB  avec  réseau  Gb      5,5  h      Votre  après  midi  de  boulot
  • 8. @ljacomet#ehcachedvx Et en français? • Semaine: • Lecture  aléatoire  SSD                      1,7  j            Un  week-­‐end   • Lire  en  séquence  1  MB  de  RAM        2,9  j            Un  long  week-­‐end   • Aller-­‐retour  dans  un  datacenter  5,8  j            Des  vacances   • Lire  en  séquence  1MB  du  SSD        11,6  j            15  jours  pour  être  livré   • Année: • Localiser  sur  un  HDD                      16,5  sem        Semestre  à  l’école   • Lire  en  séquence  1MB  du  HDD          7,8  mois      Presque  un  bébé   • Décennie: • Un  paquet  fait  le  tour  du  monde  4,8  années  Votre  doctorat
  • 9. @ljacomet#ehcachedvx C’est quoi un cache? • Une structure de données contenant une copie temporaire de certaines données • Compromis entre une augmentation de la consommation mémoire et une réduction de latence • Cibles : • Données qui sont ré-utilisées • Données qui sont chères à récupérer / calculer
  • 10. @ljacomet#ehcachedvx Ehcache (3) • Nouvelle version - intégration de premier plan avec JSR-107 • Développement complètement OpenSource • https://github.com/ehcache/ehcache3 • Hangout public en moyenne 1 fois par semaine (en anglais)
  • 12. @ljacomet#ehcachedvx JSR-107 • Vieux JSR • Commencé en 2001 • Approuvée récemment (Mars 2014) • javax.caching API + TCK + implémentation de référence • Facilite l’intégration d’un cache dans les frameworks • Discussion pour la version 2.0 en cours • Fonctionnalités asynchrones
  • 13. @ljacomet#ehcachedvx JSR-107 : Fonctionnalités •CacheManager / Cache   •Expiration •Creation/Access/Update •Intégration •CacheLoader / Writer •CacheEntryListener •Created/Updated •Removed/Expired •Accès ancienne valeur •Mutations en place •Annotations •MBeans •Accès configuration •Statistiques •Pas de contrôle de capacité !
  • 16. @ljacomet#ehcachedvx public ObjetMetier calculeEtGagne(String param1, String param2) { 
 String cle = composeCle(param1, param2);
 ObjetMetier resultatEnCache = cache.get(cle); 
 if (resultatEnCache == null) {
 resultatEnCache = chargeEtCalcule(param1, param2);
 cache.put(cle, resultatEnCache);
 }
 return resultatEnCache;
 } Cache Aside
  • 17. @ljacomet#ehcachedvx Cache Aside : pas si simple • Nécessite de la coordination entre • le cache • et le système de référence • Pas d’option de locking • Potentiel pour devenir laid et problématique très rapidement
  • 18. @ljacomet#ehcachedvx Cache Aside: options • Utilisez les abstractions de votre framework préféré • Spring Caching • Hibernate • … • Alternatives ?
  • 19. @ljacomet#ehcachedvx public ObjetMetier calculeEtGagne(String param1, String param2) {
 return cache.get(composeCle(param1, param2));
 } Cache Through
  • 21. @ljacomet#ehcachedvx Cache Through • get* => CacheLoader • un cache miss veut dire pas de données • put* => CacheWriter • chaque entrée signifie une écriture dans le système de données • Contraintes:API des CacheLoader / CacheWriter
  • 22. @ljacomet#ehcachedvx Cache Through : JSR-107 • Particularités … particulières … • putIfAbsent(K key,V value): boolean • Ignore le CacheLoader mais pas le CacheWriter • Ehcache 3 permet de changer ce comportement par configuration • Comportement généralisé aux opérations atomiques
  • 23. @ljacomet#ehcachedvx Cache Through : Write Behind • L’accès au système de référence se fait de manière asynchrone • Le thread utilisateur ne paye plus la latence • Introduit son lot de complexité • File d’écriture persistante ou non ? • Risque de mutation appliquée plusieurs fois en cas d’erreur • Quid en cas d’eviction ?
  • 25. @ljacomet#ehcachedvx Stratégie de résilience • Postulat: “Une erreur au niveau du cache ne devrait pas être la cause d’une erreur pour l’utilisateur “ P.S. Ceci est en cours de développement et donc peut encore changer
  • 26. @ljacomet#ehcachedvx Ehcache 3 • Gestion des erreurs au maximum en interne • cache simple en mémoire => pas d’exception dans le thread d’exécution • Log par défaut, possibilité de remplacer l’implémentation • Mise en évidence pour l’applicatif des cas résultant en une possible incohérence du cache
  • 28. @ljacomet#ehcachedvx Implémentation offheap • Résoudre le problème des pauses liées au Garbage Collector • Possibilité de scale-up du cache • Plusieurs TerraBytes … si le serveur le permet • Implémentation validée par plusieurs années de production • 2.0.0 disponible sur GitHub • https://github.com/Terracotta-OSS/offheap-store
  • 29. @ljacomet#ehcachedvx Support du clustering • Partage de données au travers de plusieurs JVM • Terracotta 4.3.0 offre à nouveau une option de clustering OpenSource • Intégration avec Ehcache 2.10.0 • Ehcache 3 aura aussi une option de clustering OpenSource • Détails à venir