Maison Java javaDidacticiel Utilisation de ZooKeeper pour le traitement des verrous distribués dans le développement d'API Java

Utilisation de ZooKeeper pour le traitement des verrous distribués dans le développement d'API Java

Jun 17, 2023 pm 10:36 PM
分布式锁 zookeeper java api

À mesure que les applications modernes continuent d'évoluer et que le besoin de haute disponibilité et de simultanéité augmente, les architectures de systèmes distribués deviennent de plus en plus courantes. Dans un système distribué, plusieurs processus ou nœuds s'exécutent en même temps et accomplissent des tâches ensemble, et la synchronisation entre les processus devient particulièrement importante. Étant donné que de nombreux nœuds d'un environnement distribué peuvent accéder simultanément à des ressources partagées, la manière de gérer les problèmes de concurrence et de synchronisation est devenue une tâche importante dans un système distribué. À cet égard, ZooKeeper est devenu une solution très populaire.

ZooKeeper est un service de coordination d'applications distribuées open source qui peut fournir certains services de base partagés, tels que la maintenance de la configuration, les services de nommage, les services de synchronisation, les verrous distribués et les services de groupe, etc. Dans cet article, nous verrons comment utiliser ZooKeeper pour implémenter la gestion des verrous distribués dans le développement d'API Java.

Le mécanisme de verrouillage de ZooKeeper
L'idée principale de la mise en œuvre du mécanisme de verrouillage dans ZooKeeper est d'utiliser le statut du nœud. Dans ZooKeeper, chaque nœud a trois états : Créé, Existe et Supprimé. Nous pouvons utiliser ces états pour implémenter des verrous distribués.

Lorsque plusieurs processus tentent d'acquérir le verrou en même temps, un seul processus peut réussir à créer un nœud ZooKeeper. D'autres processus verront que le nœud existe déjà et attendront sa suppression. Une fois que le processus détenant le verrou aura terminé son travail et libéré le verrou, le nœud correspondant sera supprimé. À ce stade, le processus en attente du verrou aura une chance de réussir à créer le nœud et à acquérir le verrou.

Utiliser ZooKeeper pour implémenter des verrous en Java
La méthode d'utilisation de ZooKeeper pour implémenter des verrous distribués en Java est très simple. Voici les étapes pour implémenter des verrous distribués à l'aide de ZooKeeper dans l'API Java :

  1. Créez une connexion client ZooKeeper. Les connexions ZooKeeper peuvent être implémentées via la classe ZooKeeper.
  2. Créez un nœud ZooKeeper qui représente un verrou distribué. Cela peut être fait via la méthode create().
  3. Lorsque le processus doit acquérir un verrou, appelez la méthode create() et transmettez un nom de nœud et des paramètres de type de nœud. Les paramètres de type de nœud doivent être définis sur EPHEMERAL (éphémère) et SEQUENTIAL (séquentiel). Cela signifie que les nœuds ZooKeeper seront marqués par des compteurs, afin que chaque processus puisse créer un nœud unique.
  4. Obtenez une liste de tous les nœuds de verrouillage créés, puis triez-les par numéro de série du nœud. Vous pouvez obtenir la liste des nœuds en utilisant la méthode getChildren().
  5. Vérifiez si le processus actuel possède un verrou distribué. Si le nœud actuel est le premier nœud, il dispose d'un verrou distribué.
  6. Si le processus ne possède pas le verrou distribué, attendez que le verrou soit libéré. Vous pouvez le faire en utilisant les méthodes exist() et getData().
  7. Une fois le processus terminé les tâches requises, relâchez le verrou. Cela peut être fait en supprimant le nœud, à l'aide de la méthode delete().

Ce qui suit est un exemple de code Java simple montrant comment utiliser ZooKeeper pour implémenter la gestion distribuée des verrous :

public class ZooKeeperLock {
    
    private final ZooKeeper zooKeeper;
    private final String nodePath;
    private String myNode;
    
    public ZooKeeperLock() {
        try {
            zooKeeper = new ZooKeeper("localhost:2181", 5000, null);
            nodePath = "/lock";
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    
    public void lock() {
        while (true) {
            try {
                myNode = zooKeeper.create(nodePath + "/lock_", new byte[0], 
                        ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
                
                List<String> children = zooKeeper.getChildren(nodePath, false);
                Collections.sort(children);
                
                if (myNode.equals(nodePath + "/" + children.get(0))) {
                    return;
                }
                
                String myNodeSuffix = myNode.substring(myNode.lastIndexOf("/") + 1);
                String prevNodeSuffix = children.get(Collections.binarySearch(children, 
                        myNodeSuffix) - 1);
                String prevNode = nodePath + "/" + prevNodeSuffix;
                
                final CountDownLatch latch = new CountDownLatch(1);
                Stat prevStat = zooKeeper.exists(prevNode, new Watcher() {
                    public void process(WatchedEvent event) {
                        if (event.getType() == Event.EventType.NodeDeleted) {
                            latch.countDown();
                        }
                    }
                });
                
                if (prevStat != null) {
                    latch.await();
                }
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    }
    
    public void unlock() {
        try {
            zooKeeper.delete(myNode, -1);
            zooKeeper.close();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}
Copier après la connexion

Dans cet exemple, nous créons une classe ZooKeeperLock, qui implémente les méthodes lock() et unlock(). La méthode lock() acquerra le verrou et attendra que d’autres processus le libèrent. La méthode unlock() libère le verrou. Comme vous pouvez le constater, le processus d'implémentation de verrous distribués en Java à l'aide de ZooKeeper est très simple.

Conclusion
ZooKeeper est un service de coordination distribué très puissant qui peut être utilisé pour résoudre de nombreux problèmes de concurrence dans les systèmes distribués. Dans cet article, nous avons discuté de l'utilisation de ZooKeeper pour implémenter la gestion des verrous distribués dans le développement d'API Java. En utilisant ZooKeeper, nous pouvons facilement implémenter des verrous distribués et d'autres protocoles de synchronisation sans avoir à nous soucier de l'accès simultané de plusieurs processus aux ressources partagées. Si vous construisez un système distribué et devez résoudre des problèmes de synchronisation et de concurrence, pensez à ZooKeeper.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Serrure distribuée : 5 cases, de l'entrée à l'enterrement Serrure distribuée : 5 cases, de l'entrée à l'enterrement Aug 24, 2023 pm 02:48 PM

Ce que je veux partager avec vous aujourd'hui, ce sont les verrous distribués. Cet article utilise cinq cas, diagrammes, analyses de code source, etc. Les verrous courants tels que synchronisé et Lock sont tous implémentés sur la base d'une seule JVM. Que devons-nous faire dans un scénario distribué ? A cette époque, des verrous distribués sont apparus.

Comparaison d'Etcd dans l'implémentation Redis des verrous distribués Comparaison d'Etcd dans l'implémentation Redis des verrous distribués Jun 20, 2023 pm 05:51 PM

Avec la popularisation progressive des systèmes distribués, les verrous distribués sont devenus un moyen important pour garantir la stabilité du système et la cohérence des données. En tant que base de données à mémoire distribuée hautes performances, Redis est naturellement devenue l'une des implémentations importantes de verrous distribués. Cependant, ces dernières années, Etcd a reçu de plus en plus d’attention en tant que solution émergente de cohérence distribuée. Cet article discutera des similitudes et des différences entre l'implémentation des verrous distribués par Redis et Etcd sous des aspects tels que les principes d'implémentation et l'analyse comparative. Le principe de mise en œuvre des verrous distribués Redis La mise en œuvre des verrous distribués Redis

Quels sont les sites Web à interface API gratuite ? Quels sont les sites Web à interface API gratuite ? Jan 05, 2024 am 11:33 AM

Site Web d'interface API gratuite : 1. UomgAPI : une plate-forme qui fournit des services API gratuits stables et rapides, avec plus de 100 interfaces API ; 2. free-api : fournit plusieurs interfaces API gratuites ; 3. API JSON : fournit une interface API de données gratuite ; . AutoNavi Open Platform : fournit des interfaces API liées aux cartes ; 5. Reconnaissance faciale Face++ : fournit des interfaces API liées à la reconnaissance faciale ; 6. Speed ​​​​Data : fournit plus d'une centaine d'interfaces API gratuites, adaptées à divers besoins dans le cas des données ; sources ; 7. Données agrégées, etc.

La solution reine parmi les serrures distribuées - Redisson La solution reine parmi les serrures distribuées - Redisson Aug 24, 2023 pm 03:31 PM

Si vous avez déjà utilisé Redis, vous obtiendrez deux fois le résultat avec la moitié de l'effort en utilisant Redisson, qui constitue le moyen le plus simple et le plus pratique d'utiliser Redis. Le but de Redisson est de promouvoir la séparation des préoccupations des utilisateurs (Separation of Concern) de Redis, afin que les utilisateurs puissent se concentrer davantage sur le traitement de la logique métier.

Utilisation de ZooKeeper et Curator pour la coordination et la gestion distribuées dans Beego Utilisation de ZooKeeper et Curator pour la coordination et la gestion distribuées dans Beego Jun 22, 2023 pm 09:27 PM

Avec le développement rapide d'Internet, les systèmes distribués sont devenus l'une des infrastructures de nombreuses entreprises et organisations. Pour qu’un système distribué fonctionne correctement, il doit être coordonné et géré. À cet égard, ZooKeeper et Curator sont deux outils qui valent la peine d'être utilisés. ZooKeeper est un service de coordination distribué très populaire qui peut nous aider à coordonner l'état et les données entre les nœuds d'un cluster. Curator est une encapsulation de ZooKeeper

Quels sont les protocoles courants pour la programmation réseau Java ? Quels sont les protocoles courants pour la programmation réseau Java ? Apr 15, 2024 am 11:33 AM

Les protocoles couramment utilisés dans la programmation réseau Java incluent : TCP/IP : utilisé pour une transmission de données fiable et une gestion des connexions. HTTP : utilisé pour la transmission de données Web. HTTPS : version sécurisée de HTTP qui utilise le cryptage pour transmettre des données. UDP : Pour un transfert de données rapide mais instable. JDBC : utilisé pour interagir avec des bases de données relationnelles.

Qu'est-ce que j2ee et quelles technologies il inclut Qu'est-ce que j2ee et quelles technologies il inclut Apr 14, 2024 pm 09:06 PM

J2EE est une plate-forme Java conçue pour développer des applications d'entreprise et comprend les technologies suivantes : Java Servlet et JSPJava Enterprise Beans (EJB)Java Persistence API (JPA)Java API for XML Web Services (JAX-WS)JavaMailJava Message Service (JMS)Java Transaction API (JTA)Interface de nommage et d'annuaire Java (JNDI)

JAX-RS contre Spring MVC : une bataille entre les géants RESTful JAX-RS contre Spring MVC : une bataille entre les géants RESTful Feb 29, 2024 pm 05:16 PM

Introduction Les API RESTful font désormais partie intégrante des applications WEB modernes. Ils fournissent une approche standardisée pour créer et utiliser des services Web, améliorant ainsi la portabilité, l'évolutivité et la facilité d'utilisation. Dans l'écosystème Java, JAX-RS et springmvc sont les deux frameworks les plus populaires pour créer des API RESTful. Cet article examinera en profondeur les deux frameworks, en comparant leurs fonctionnalités, avantages et inconvénients pour vous aider à prendre une décision éclairée. JAX-RS : JAX-RSAPI JAX-RS (JavaAPI pour RESTful Web Services) est un standard JAX-RSAPI développé par JavaEE pour le développement de REST.

See all articles