Infinispan est une plate-forme de grille de données Java. Il fournit une interface de cache compatible JSR-107 pour la gestion des données mises en cache.

Les conteneurs de cache Infinispan suivants sont utilisés dans ${build.fullName} :

Chaque conteneur de cache définit un "repl" et un cache "dist". Ces caches ne doivent pas être utilisés directement par les applications des utilisateurs.

Pour plus d'informations sur la fonctionnalité Infinispan et les options de configuration, consultez la documentation Infinispan.

Modes de clustering

Le clustering peut être configuré de deux manières différentes dans ${build.shortName} en utilisant Infinispan. La méthode correcte à utiliser pour votre application dépendra de vos besoins. Il faudra faire un compromis entre la disponibilité, la cohérence, la fiabilité et l'évolutivité de chaque mode. Avant de choisir un mode de clustering, vous devez identifier les principales caractéristiques de votre réseau (pour vous), et équilibrer ces exigences.

Mode Réplication

Le mode de réplication détecte et ajoute automatiquement de nouvelles instances sur le cluster. Les modifications apportées à ces instances seront répliquées sur tous les nœuds du cluster. Le mode répliqué fonctionne généralement mieux dans les petits clusters en raison de la quantité d'informations qui doivent être répliquées sur le réseau. Infinispan peut être configuré pour utiliser la multidiffusion UDP, ce qui réduit la congestion du réseau jusqu’à un certain point.

Mode de distribution

Le mode de distribution permet à Infinispan de mettre le cluster à échelle de manière linéaire. Le mode de distribution utilise un algorithme de hachage cohérent pour déterminer l'emplacement d'un nouveau nœud dans une grappe. Le nombre de copies des informations à conserver est configurable. Il y a un compromis entre le nombre de copies conservées, la durabilité des données et la performance : plus le nombre de copies conservées est élevé, plus l'impact sur la performance sera important, mais moins vous risquerez de perdre des données en cas de panne de serveur. L'algorithme de hachage permet également de réduire le trafic réseau en localisant les entrées sans avoir recours à la multidiffusion ou au stockage des métadonnées.

On devrait envisager d'utiliser le mode Distribution (dist) comme stratégie de mise en cache lorsque la taille du cluster dépasse 6-8 nœuds. Avec le mode Distribution, les données ne sont distribuées qu'à un sous-ensemble de nœuds au sein du cluster, et non pas à tous les nœuds (mode Répliqué par défaut).

Réplication synchrone et asynchrone

La réplication peut être effectuée en mode synchrone ou asynchrone, et le mode choisi dépend de vos besoins et de votre application. Avec la réplication synchrone, le thread qui traite la demande de l'utilisateur est bloquée jusqu'à ce que la réplication aboutisse. Ce n'est que lorsque la réplication est réussie qu'une réponse est renvoyée au client et le fil de discussion est libéré. La réplication synchrone a un impact sur le trafic réseau car elle nécessite une réponse de chaque nœud du cluster. Elle a cependant l'avantage d’assurer que toutes les modifications ont été apportées à tous les nœuds du cluster.

La réplication asynchrone est exécutée en arrière-plan. Infinispan implémente une file d'attente de réplication, qui est utilisée par un thread d’arrière plan pour effectuer la réplication. La réplication est déclenchée soit sur une base temporelle, soit sur la taille de la file d'attente. Une file d'attente de réplication permet d'augmenter les performances car il n'y a pas de conversation entre les nœuds du cluster. L'inconvénient de la réplication asynchrone est qu'elle n'est pas aussi précise. Les tentatives de réplication échouées sont écrites dans un journal; elles ne sont pas notifiées en temps réel.

Conteneur Cache

Un conteneur de caches est un référentiel pour les caches utilisés par un sous-système. Pour Infinispan, les conteneurs de cache par défaut sont définis dans les fichiers xml de configuration. Un cache est défini comme étant le cache par défaut: il correspond au cache qui sera utilisé pour le clustering.