Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Caching reboot: javax.cache & Ehcache 3

537 views

Published on

Session du 9 avril 2015 sur javax.cache et Ehcache 3 à l'occasion de Devoxx France 2015

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Caching reboot: javax.cache & Ehcache 3

  1. 1. @ljacomet#ehcachedvx Caching reboot javax.cache & Ehcache 3
  2. 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. 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. 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!
  5. 5. Mise en bouche Pourquoi un cache?
  6. 6. @ljacomet#ehcachedvx Pourquoi un cache?
  7. 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. 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. 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. 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)
  11. 11. Entrée JSR-107 - javax.caching
  12. 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. 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é !
  14. 14. @YourTwitterHandle@YourTwitterHandle@ljacomet#ehcachedvx Demo
  15. 15. Plat principal Une application et son cache
  16. 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. 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. 18. @ljacomet#ehcachedvx Cache Aside: options • Utilisez les abstractions de votre framework préféré • Spring Caching • Hibernate • … • Alternatives ?
  19. 19. @ljacomet#ehcachedvx public ObjetMetier calculeEtGagne(String param1, String param2) {
 return cache.get(composeCle(param1, param2));
 } Cache Through
  20. 20. @ljacomet#ehcachedvx Cache Through Cache Application code RDBMS
  21. 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. 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. 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 ?
  24. 24. Dessert Stratégie de résilience
  25. 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. 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
  27. 27. Mignardises Ehcache 3 et Terracotta
  28. 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. 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
  30. 30. @YourTwitterHandle@YourTwitterHandle@ljacomet#ehcachedvx Questions ?

×