caching reboot: javax.cache & ehcache 3
Post on 12-Feb-2017
325 Views
Preview:
TRANSCRIPT
@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 ?
top related