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, …
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é !
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
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