Partage de technologie

Le principe sous-jacent de Zookeeper

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

ZooKeeper est un service de coordination distribué hautement disponible qui est largement utilisé dans les systèmes distribués pour résoudre le problème de cohérence des systèmes distribués. Ce qui suit présentera en détail les principes sous-jacents de ZooKeeper, y compris son architecture, son modèle de données, son mécanisme de base et son protocole de cohérence.

1. Architecture

ZooKeeper adopte une architecture maître-esclave, qui se compose généralement d'un leader et de plusieurs suiveurs. Il existe également des nœuds observateurs en tant que nœuds sans droit de vote pour partager la pression des demandes de lecture.

  • Chef: Responsable du traitement de toutes les demandes d'écriture (demandes de transactions) et de la coordination du protocole de cohérence.
  • Disciple: Participer au vote et synchroniser le statut de Leader, et traiter les demandes de lecture.
  • Observateur: Ne participe pas au vote, traite uniquement les demandes de lecture et transmet les demandes d'écriture des clients.

2. Modèle de données

ZooKeeper stocke les données dans une structure arborescente similaire à un système de fichiers, et chaque nœud est appelé un znode.

  • nœud z: Nœud de données avec chemin, données et informations d'état.
  • Znode persistant: Un nœud survit à une déconnexion client à moins qu'il ne soit explicitement supprimé.
  • Znode éphémère: Le nœud est automatiquement supprimé lorsque le client se déconnecte.
  • Znoeud séquentiel: Le nœud est automatiquement ajouté à un numéro de séquence incrémentiel lors de sa création.

3. Mécanisme de base

3.1. Gestion des séances

Une session est établie entre chaque client et le cluster ZooKeeper pour maintenir l'état de connexion et gérer les nœuds temporaires. ZooKeeper détecte l'état de connexion du client via le mécanisme de battement de cœur. Si aucun battement de cœur n'est reçu dans un certain laps de temps, la session est considérée comme déconnectée.

3.2. Synchronisation des données

Afin d'assurer la cohérence des données de chaque nœud, ZooKeeper adopte un mécanisme de synchronisation des données. Lorsque le nœud Leader traite une demande d'écriture, il enverra l'opération de changement à tous les nœuds Follower confirmera après avoir accepté l'opération de changement, et le nœud Leader décidera finalement si l'opération de changement est réussie.

3.3. Mécanisme de notification

ZooKeeper prend en charge le mécanisme Watch. Le client peut enregistrer Watch sur le znode spécifié. Lorsque les données ou les nœuds enfants du znode changent, ZooKeeper en informe le client.

4. Protocole de cohérence

ZooKeeper utilise un protocole de cohérence appelé ZAB (Zookeeper Atomic Broadcast) pour garantir la cohérence des données. ZAB se compose de deux phases : la phase électorale et la phase de diffusion.

4.1. Phase électorale

Lorsque le cluster ZooKeeper démarre ou que le nœud Leader échoue, une élection est nécessaire pour déterminer un nouveau leader. La phase électorale est principalement divisée en les étapes suivantes :

  1. vote: Tous les nœuds votent pour eux-mêmes et envoient des votes aux autres nœuds.
  2. recevoir des votes: Chaque nœud reçoit les votes des autres nœuds et compte les résultats du vote.
  3. Mettre à jour le sondage: S'il y a un candidat avec plus de voix que vous dans les votes reçus, mettez à jour votre vote pour ce candidat.
  4. Déterminer le leader: Lorsqu'un candidat obtient plus de la moitié des voix, il devient le nouveau Leader.
4.2. Phase de diffusion

Une fois le leader déterminé, la phase de diffusion est entrée. Le leader est responsable du traitement de la demande d'écriture du client et de la diffusion de l'opération de modification à tous les nœuds suiveurs. Les étapes spécifiques sont les suivantes :

  1. proposition: Après avoir reçu la demande d'écriture, le Leader génère une proposition et envoie la proposition à tous les nœuds Follower.
  2. confirmer: Après avoir reçu la proposition, le nœud Follower effectue la journalisation et envoie un message de confirmation au Leader.
  3. soumettre: Une fois que le nœud Leader a reçu plus de la moitié des messages de confirmation, il soumet la proposition et informe tous les nœuds Follower du résultat de la soumission.
  4. Appliquer les modifications: Une fois que le nœud Follower a reçu la notification de validation, il applique l'opération de modification.

5. Exemple de code

Ce qui suit est un exemple simple utilisant ZooKeeper, montrant comment créer des nœuds, lire les données des nœuds et enregistrer Watch.

5.1. Introduction des dépendances

exister pom.xml Introduisez la dépendance du client ZooKeeper.

 

xmlCopier le code