Dans Zookeeper, on s'appuie principalement sur le protocole ZAB pour assurer la cohérence des données distribuées.
Le protocole ZAB se divise en deux parties :
- Diffusion de messages
- Récupération après crash
Diffusion de messages
Zookeeper utilise un processus principal unique, le Leader, pour recevoir et traiter toutes les demandes de transaction des clients, et utilise le protocole de diffusion atomique du protocole ZAB pour diffuser les demandes de transaction sous forme de propositions Proposal à tous les nœuds Follower. Lorsque plus de la moitié des serveurs Follower du cluster renvoient un ACK correct, le Leader envoie à nouveau un message de commit à tous les serveurs Follower pour valider cette proposition. Ce processus peut être abrégé en validation de transaction 2PC. Reportez-vous à la figure ci-dessous pour l'ensemble du processus. Notez que les nœuds Observer ne sont responsables que de la synchronisation des données du Leader et ne participent pas au processus de synchronisation des données 2PC.

Récupération après crash
Dans des circonstances normales, le mode de diffusion des messages fonctionne bien. Cependant, dès que le serveur Leader tombe en panne, ou qu'en raison de problèmes réseau le serveur Leader perd la communication avec plus de la moitié des Followers, il passe en mode de récupération après crash, et un nouveau serveur Leader doit être élu. Au cours de ce processus, deux risques potentiels d'incohérence des données peuvent survenir, qu'il convient d'éviter grâce aux caractéristiques du protocole ZAB.
- 1. Le serveur Leader tombe en panne immédiatement après avoir envoyé le message de commit
- 2. Le serveur Leader tombe en panne immédiatement après avoir simplement formulé une proposition
Le mode de récupération du protocole ZAB utilise les stratégies suivantes :
- 1. Élire le nœud ayant le zxid le plus grand comme nouveau leader
- 2. Le nouveau leader traite les messages non validés dans le journal des transactions
Le chapitre suivant explique en détail le processus d'élection du leader.