Guide pour Hazelcast avec Java

Guide de Hazelcast avec Java

1. Vue d'ensemble

Il s'agit d'un article d'introduction sur Hazelcast dans lequel nous expliquerons comment créer un membre du cluster, distribuéMap pour partager les donnéesMap entre les nœuds du cluster et créer un client Java pour se connecter et interroger les données dans le cluster .

2. Qu'est-ce que Hazelcast?

Hazelcast est une plate-forme distribuée In-Memory Data Grid pour Java. L'architecture prend en charge une haute extensibilité et la distribution des données dans un environnement en cluster. Il prend en charge la détection automatique des nœuds et la synchronisation intelligente. Pour voir les fonctionnalités de toutes les éditions Hazelcast, nous pouvons nous référer auxlink suivants.

Hazelcast est disponible dans différentes éditions. Vous pouvez trouver la liste des éditions Hazelcast disponibles dans leshttp://docs.hazelcast.org/docs/latest/manual/html-single/index.html#hazelcast-editions. [Lien]. Pour les besoins de cet article, nous allons nous concentrer sur l'édition open source de Hazelcast.

De même, Hazelcast offre diverses fonctionnalités telles que la structure de données distribuées, le calcul distribué, la requête distribuée, etc. Pour les besoins de cet article, nous nous concentrerons sur lesMap distribués.

3. Dépendances Maven

Hazelcast propose différentes bibliothèques en fonction de l'utilisation. Nous pouvons trouver des dépendances maven sous le groupecom.hazelcast dans Maven Central.

Pour les besoins de cet article, nous allons nous concentrer sur les dépendances nécessaires pour créer un membre de cluster Hazelcast autonome et le client Java Hazelcast.

3.1. Membre du cluster Hazelcast

Nous devons ajouter la dépendance hazelcast dans pom.xml comme indiqué ci-dessous:


    com.hazelcast
    hazelcast
    3.7.2

La dépendance est disponible enmaven central repository.

3.2. Client Java Hazelcast

Outre la dépendance de base de Hazelcast, nous devrons également inclure la dépendance du client:


    com.hazelcast
    hazelcast-client
    3.7.2

La dépendance est disponible dans lesmaven central repository.

4. Votre première application Hazelcast

4.1. Créer un membre Hazelcast

Les membres (également appelés nœuds) se joignent automatiquement pour former un cluster. Cette jonction automatique a lieu avec divers mécanismes de découverte que les membres utilisent pour se retrouver.

Créons un membre qui stocke les données dans une carte distribuée Hazelcast:

public class ServerNode {

    HazelcastInstance hzInstance = Hazelcast.newHazelcastInstance();
    ...
}

Lorsque nous démarrons l'applicationServerNode, nous pouvons voir le texte flottant dans la console ce qui signifie que nous créons un nouveau nœud Hazelcast dans notre JVM qui devra rejoindre le cluster.

Members [1] {
    Member [192.168.1.105]:5701 - 899898be-b8aa-49aa-8d28-40917ccba56c this
}

Pour créer plusieurs nœuds, nous pouvons démarrer les multiples instances de l'applicationServerNode. Hazelcast créera et ajoutera automatiquement un nouveau membre au cluster.

Par exemple, si nous exécutons à nouveau l'applicationServerNode, nous verrons le journal suivant dans la console qui indique qu'il y a deux membres dans le cluster.

Members [2] {
  Member [192.168.1.105]:5701 - 899898be-b8aa-49aa-8d28-40917ccba56c
  Member [192.168.1.105]:5702 - d6b81800-2c78-4055-8a5f-7f5b65d49f30 this
}

4.2. Créer desMap distribués

Ensuite, nous allons créer unMap. distribué. Nous avons besoin de l'instance deHazelcastInstance créée précédemment pour créer unMap distribué qui étend l'interface dejava.util.concurrent.ConcurrentMap.

Map map = hazelcastInstance.getMap("data");
...

Ajoutons quelques entrées auxmap:

IdGenerator idGenerator = hazelcastInstance.getIdGenerator("newid");
for (int i = 0; i < 10; i++) {
    map.put(idGenerator.newId(), "message" + 1);
}

Comme nous pouvons le voir ci-dessus, nous avons ajouté 10 entrées dans lesmap. Nous avons utiliséIdGenerator pour nous assurer que nous obtenons la clé unique de la carte. Pour plus de détails sur lesIdGenerator, vous pouvez consulter leslink suivants.

Bien que ce ne soit peut-être pas l'exemple du monde réel, il est simplement utilisé pour illustrer l'une des nombreuses opérations que nous pouvons appliquer à la carte distribuée. Nous verrons dans la dernière section comment récupérer les entrées de carte ajoutées par le membre du cluster à partir du client java Hazelcast.

En interne, Hazelcast partitionnera les entréesmap et distribuera et répliquera les entrées parmi les membres du cluster. Pour plus de détails sur HazelcastMap, vous pouvez consulter leslink suivants.

4.3. Créer un client Java Hazelcast

Le client Hazelcast nous permet de faire toutes les opérations Hazelcast sans être membre du cluster. Il se connecte à l'un des membres du cluster et lui délègue toutes les opérations à l'échelle du cluster.

Créons un client natif:

ClientConfig config = new ClientConfig();
GroupConfig groupConfig = config.getGroupConfig();
groupConfig.setName("dev");
groupConfig.setPassword("dev-pass");
HazelcastInstance hzClient
  = HazelcastClient.newHazelcastClient(config);

Le nom d'utilisateur et le mot de passe par défaut pour accéder au cluster sontdev etdev-pass. Pour plus de détails sur le client Hazelcast, vous pouvez consulter leslink suivants.

4.4. Accéder auxMap distribués à partir du client Java

Ensuite, nous accèderons auxMap distribués que nous avons créés précédemment. Nous avons besoin de l'instance deHazelcastInstance créée plus tôt pour accéder auxMap. distribués

IMap map = hzClient.getMap("data");
...

Nous pouvons maintenant effectuer des opérations sur unmap sans être membre du cluster. Par exemple, essayons de parcourir les entrées de mappe ajoutées par le membre du cluster:

for (Entry entry : map.entrySet()) {
    ...
}

5. Configurer Hazelcast

Dans cette section, nous verrons comment configurer le réseau Hazelcast à l'aide de méthodes déclarative (XML) et programmatique (API) et utiliser le centre de gestion Hazelcast pour surveiller et gérer les nœuds en cours d'exécution.

Pendant le démarrage de Hazelcast, il recherche la propriété système dehazelcast.config. S'il est défini, sa valeur est utilisée comme chemin. Si la propriété système ci-dessus n'est pas définie, Hazelcast vérifie alors s'il existe un fichierhazelcast.xml dans le répertoire de travail.

Sinon, il vérifie sihazelcast.xml existe sur le chemin de classe. Si aucune de ces solutions ne fonctionne, Hazelcast charge la configuration par défaut, c.-à-d.

Si aucune de ces solutions ne fonctionne, Hazelcast charge la configuration par défaut, c.-à-d. hazelcast-default.xml fourni avechazelcast.jar.

5.1. Configuration du réseau

Par défaut, Hazelcast utilise la multidiffusion pour découvrir d'autres membres pouvant former un cluster. Si la multidiffusion n'est pas un moyen de découverte préféré pour notre environnement, nous pouvons configurer Hazelcast pour un cluster TCP / IP complet.

Configurons le cluster TCP / IP à l'aide de la configuration déclarative:



    
        5701
        
            
        
        
            machine1
        localhost
        
        
    

et configuration programmatique:

Config config = new Config();
NetworkConfig network = config.getNetworkConfig();
network.setPort(5701).setPortCount(20);
network.setPortAutoIncrement(true);
JoinConfig join = network.getJoin();
join.getMulticastConfig().setEnabled(false);
join.getTcpIpConfig()
  .addMember("machine1")
  .addMember("localhost").setEnabled(true);

Par défaut, Hazelcast essaiera de lier 100 ports. Dans l'exemple ci-dessus, si nous définissons la valeur du port sur 5701 et limitons le nombre de ports à 20, alors que les membres se joignent au cluster, Hazelcast tente de rechercher les ports compris entre 5701 et 5721.

Si nous voulons choisir d'utiliser un seul port, nous pouvons désactiver la fonction d'incrémentation automatique d'un port en définissantauto-increment surfalse.

5.2. Configuration du centre de gestion

Le centre de gestion nous permet de surveiller l’état général des clusters, nous pouvons également analyser et parcourir vos structures de données en détail, mettre à jour les configurations de carte et extraire des threads des nœuds.

Pour utiliser le centre de gestion Hazelcast, nous pouvons soit déployer l'applicationmancenter-version.war dans notre serveur / conteneur d'applications Java, soit démarrer Hazelcast Management Center à partir de la ligne de commande. Nous pouvons télécharger le dernier ZIP Hazelcast à partir dehazelcast.org. Le ZIP contient le fichiermancenter-version.war.

Nous pouvons configurer nos nœuds Hazelcast en ajoutant l'URL de l'application Web àhazelcast.xml puis faire communiquer les membres Hazelcast avec le centre de gestion.

Configurons le centre de gestion à l'aide de la configuration déclarative:


    http://localhost:8080/mancenter

et configuration programmatique:

ManagementCenterConfig manCenterCfg = new ManagementCenterConfig();
manCenterCfg.setEnabled(true).setUrl("http://localhost:8080/mancenter");

6. Conclusion

Dans cet article, nous avons abordé les concepts de base de Hazelcast. Pour plus de détails, vous pouvez consulter lesReference Manual.

Vous pouvez trouver le code source de cet articleover on GitHub.