30
@ljacomet #ehcachedvx Caching reboot javax.cache & Ehcache 3

Caching reboot: javax.cache & Ehcache 3

Embed Size (px)

Citation preview

Page 1: Caching reboot: javax.cache & Ehcache 3

@ljacomet#ehcachedvx

Caching reboot

javax.cache & Ehcache 3

Page 2: 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

Page 3: Caching reboot: javax.cache & Ehcache 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, …

Page 4: Caching reboot: javax.cache & Ehcache 3

@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!

Page 5: Caching reboot: javax.cache & Ehcache 3

Mise en bouche

Pourquoi un cache?

Page 6: Caching reboot: javax.cache & Ehcache 3

@ljacomet#ehcachedvx

Pourquoi un cache?

Page 7: Caching reboot: javax.cache & Ehcache 3

@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

Page 8: Caching reboot: javax.cache & Ehcache 3

@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

Page 9: Caching reboot: javax.cache & Ehcache 3

@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

Page 10: Caching reboot: javax.cache & Ehcache 3

@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)

Page 11: Caching reboot: javax.cache & Ehcache 3

Entrée

JSR-107 - javax.caching

Page 12: Caching reboot: javax.cache & Ehcache 3

@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

Page 13: Caching reboot: javax.cache & Ehcache 3

@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é !

Page 14: Caching reboot: javax.cache & Ehcache 3

@YourTwitterHandle@YourTwitterHandle@ljacomet#ehcachedvx

Demo

Page 15: Caching reboot: javax.cache & Ehcache 3

Plat principal

Une application et son cache

Page 16: Caching reboot: javax.cache & Ehcache 3

@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

Page 17: Caching reboot: javax.cache & Ehcache 3

@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

Page 18: Caching reboot: javax.cache & Ehcache 3

@ljacomet#ehcachedvx

Cache Aside: options• Utilisez les abstractions de votre framework préféré

• Spring Caching

• Hibernate

• …

• Alternatives ?

Page 19: Caching reboot: javax.cache & Ehcache 3

@ljacomet#ehcachedvx

public ObjetMetier calculeEtGagne(String param1, String param2) { return cache.get(composeCle(param1, param2));}

Cache Through

Page 20: Caching reboot: javax.cache & Ehcache 3

@ljacomet#ehcachedvx

Cache Through

Cache

Application code

RDBMS

Page 21: Caching reboot: javax.cache & Ehcache 3

@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

Page 22: Caching reboot: javax.cache & Ehcache 3

@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

Page 23: Caching reboot: javax.cache & Ehcache 3

@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 ?

Page 24: Caching reboot: javax.cache & Ehcache 3

Dessert

Stratégie de résilience

Page 25: Caching reboot: javax.cache & Ehcache 3

@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

Page 26: Caching reboot: javax.cache & Ehcache 3

@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

Page 27: Caching reboot: javax.cache & Ehcache 3

Mignardises

Ehcache 3 et Terracotta

Page 28: Caching reboot: javax.cache & Ehcache 3

@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

Page 29: Caching reboot: javax.cache & Ehcache 3

@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

Page 30: Caching reboot: javax.cache & Ehcache 3

@YourTwitterHandle@YourTwitterHandle@ljacomet#ehcachedvx

Questions ?