VT2018 Hazelcast IMDG

=Auteur=
 * Nom : CUZIN Florian
 * Sujet : Hazelcast IMDG

=Résumé= Hazelcast IMDG est un logiciel de traitement de données se reposant sur le principe des In-Memory Data Grid ou Grille de donnée en mémoire en Français. Dans ce type de stockage, les données sont réparties dans des clusters de serveurs partageant leur RAM pour le stockage. Ce système de mémoire partagée permet de lire, d'écrire et traiter des données plus rapidement qu'avec les systèmes de stockage plus classique (base de données, IMDB, NoSQL..). Hazelcast IMDG se démarque dans le milieu par sa facilité de prise en mains et son grand éventails d'utilisation différentes, allant du site de e-Commerce au logiciel d'échanges financiers.

=Abstract= Hazelcast IMDG is an in-memory Data Grid based data management software. In this type of data management platform, data is stored in the RAM of a cluster of servers for transfer speed efficiency. Processors are also shared, which allows this system to read, write or compute data quicker than most database related systems. Hazelcast IMDG stands in it's field as a leader thanks to its legendary ease of use and its important flexibility in terms of use-case.

=Synthèse= Avec les besoins que l'on a aujourd'hui en termes de capacité de stockage, de rapidité et de fiabilité, par exemple pour le Big Data, les systèmes de stockage classique ne sont plus assez performant. Il faut donc, dans certains cas se baser sur une autre architecture.

In-Memory Data Grid
In-Memory Data Grid est un système de stockage distribué qui permet de répondre aux demandes d'aujourd'hui. Dans ce système les données sont réparties dans un cluster de serveurs mettant en commun leur RAM pour le stockage de celles ci. Chaque machine appartenant au cluster (appelé un nœud) stock donc une partie des données (sous formes d'objets standards) et des données "backup" pour assurer la persistance des données en cas de panne d'un autre nœud. Ce système permet de stocker une grande quantité de données par le biais de la scalabilité, en effet pour augmenter les performances ou la capacité de stockage, il suffit juste d'ajouter une machine au cluster ou d’améliorer une des machines déjà présentes. Il est aussi possible de lier ce genre de système à une base de donnée classique pour les backups et les données moins demandées. Il existe plusieurs plateforme proposant des systèmes de genre, chacune avec des fonctionnalités différentes.

Présentation et fonctionnalités de l'application
Ce logiciel de traitement de données fait partie intégrante des systèmes In-Memory Data Grid. Mais il n'est pas qu'un système de stockage, c'est aussi une computing platform grâce au fait que chaque serveur, en plus de sa RAM, partage aussi son CPU. Ce logiciel est notamment connu pour sa facilité d'utilisation et son interfaçage avec d'autre technologies. Il propose un stockage et un traitement de données facile d'utilisation que ce soit d'un point de vue programmation ou gestion des cluster. Il permet aussi de gérer des caches, de faire des exécutions parallèles, de gérer la charge et les crash d'un nœud automatiquement... Toutes les fonctionnalités de cette application sont listées dans le schéma ci-dessous.



Exemple d'utilisation
Voici un exemple de code pour creer une instance d'hazelcast: (code réalisé grâce à la page https://hazelcast.org/getting-started-with-hazelcast/

Import pour Hazelcast:

import com.hazelcast.config.ManagementCenterConfig; import com.hazelcast.core.Hazelcast; import com.hazelcast.core.HazelcastInstance; import com.hazelcast.core.IdGenerator;

Code: public class ServerNode { public static void main(String[] args) { //Cree une instance de Hazelcast HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance; //       ManagementCenterConfig manCenterCfg = new ManagementCenterConfig; //       manCenterCfg.setEnabled(true).setUrl("http://localhost:8080/hazelcast-mancenter"); //Cree la map dans le cluster si elle n'y est pas deja //Si elle est deja presente, cette ligne donne juste l'acces à la map comme si c'etait un simple objet java //Toutes les modification apportees a cette map Map map = hazelcastInstance.getMap("data"); IdGenerator idGenerator = hazelcastInstance.getIdGenerator("newid"); for (int i = 0; i < 10; i++) { map.put(idGenerator.newId, "message" + i); }   } }

La ligne ci dessous crée une instance d'Hazelcast dans un cluster qui va automatiquement se connecter aux autres instances si il y en a. Si il n'y a pas d'instance, un cluster est créer et cette instance en devient le premier noeud. HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance; Ensuite pour creer ou utiliser une map distribué sur le cluster il suffit d'utiliser cette ligne: Map map = hazelcastInstance.getMap("data"); L'objet est ensuite utilisable comme un objet java et toutes les modifications apportées à ce même objet (n'importe ou dans le code de l'application) seront transmises au cluster. Cette fonction est utilisable n'importe où dans le code de l'application et même dans celui d'une autre application reliée au cluster.

Mais ce code n'est pas suffisant. Pour utiliser hazelcast il faut spécifier certains paramètres avec l'aide d'un fichier de description ou par du code. Dans notre cas on utilise un fichier de description qui est le suivant:   5701  localhost   http://localhost:8080/hazelcast-mancenter  Pour avoir un oeil sur notre cluster et pouvoir l'administrer à distance il est aussi possible de déployer un manager appelé Hazelcast managment center disponible avec la solution Hazelcast IMDG. Le manager est très pratique et fournit plein de métriques sur notre cluster.



Comme on peut le voir dans cette démonstration le code est très court et simple a comprendre. Et c'est cette simplicité qui fait la force de cette solution.

Références
https://hazelcast.com

https://hazelcast.org

https://www.gridgain.com/resources/blog/in-memory-data-grid-explained

https://www.baeldung.com/java-hazelcast

https://blog-tech.groupeonepoint.com/hazelcast-presentation-et-retours-dexperiences/