Compte rendu de la soirée DataGrid et Distributed Cache avec Infinispan
Le 29 Mars, Galder Zamarreño qui travaille pour JBoss/Red-Hat est venu nous parler de DataGrid et de Cache Distribué avec Infinispan un produit JBoss / Red-Hat, à l’Alpes JUG.
Galder est d’orgine Basque, habite en Suisse, comprend et parle le Français, mais préfère faire sa présentation en Anglais, car il est plus à l’aise pour parler de sujets techniques avec le vocabulaire utilisé tous les jours dans son travail.
Mais qu’est-ce qu’Infinispan ? C’est une plateforme open source de Data-Grid en mémoire, hautement disponible et élastique. Galder nous explique qu’Infinispan est inspiré du projet Dynamo d’Amazon, et est en fait un cache en mémoire pour améliorer les performances des applications quand les données sont coûteuses à récupérer ou à calculer. Le cache fonctionne sous forme de paires Clé – Valeur et offre des services supplémentaires par rapport à une simple ConcurrentHashMap entre autres, la possibilité de définir une durée de vie pour les données dans le cache, le support de Java Transaction Architecture (JTA) et le choix de l’algorithme d’éviction du cache. Infinispan est conforme au JSR 107 (JCache) et Context and Dependancy Injection (CDI, JSR 299), ce qui facilite son utilisation dans les applications. De plus, il offre une API REST pour une utilisation découplée de l’application.
Galder nous fait une démonstration de l’utilisation du cache Infinispan sur un seul noeud, avec une application basique de billetterie de concerts.
Puis il nous explique que les opérations du cache peuvent participer aux transactions, et qu’il existe plusieurs modes: un mode optimiste pour des transactions avec peu de contention qui acquière un verrou lors de la phase Prepare de la transaction, et un mode Pessimiste avec plus de contention qui acquière le verrou à chaque écriture dans le cache. Les transactions distribuées permettent de garantir la cohérence des données lorsque InfiniSpan est utilisé comme base de données, mais si il est utilisé comme simple cache, on peut faire une simple synchronisation, c’est à dire une mise à jour du cache asynchrone hors de la transaction applicative.
Mais l’intérêt d’Infinispan se trouve dans la distribution et la mise en cluster du cache, pour maintenir la cohérence d’un cache entre plusieurs applications, comme par exemple le cache de Sessions de JBoss. Galder nous raconte que Infinispan s’appuie sur JGroups, un projet et une technologie développés par Red-Hat, pour la communication et la synchronisation des données entre les caches. Il existe plusieurs modes: une réplication totale où toutes les données se trouvent sur tous les noeuds, mais aussi une replication partielle avec une distribution basée sur le « Consistent Hashing », un algorithme qui fournit une distribution rapide, déterministe quelque soit le nombre de noeuds, et qui supporte les topologies.
Pour illustrer ces capacités, Galder nous fait une nouvelle démonstration avec un service à base de plusieurs caches en clusters (sur la même machine mais des ports différents).
La soirée avance et Galder continue avec les fonctions avancées d’Infinispan : support des indexes en s’appuyant sur Hibernate Search (et Apache Lucene), la possibilité de définir des « Executors » distribués, et donc faire du « Map / Reduce ». Il nous parle brièvement d’Hibernate OGM qu’Emmanuel Bernard nous avait présenté en Juin 2011, avant de finir sa présentation par une session de questions – réponses, avec un public intéressé et satisfait.
Merci Galder pour cette belle session à l’AlpesJUG.
Le support de présentation et les examples de code sont en ligne.