La connexion entre le client et le serveur repose sur une connexion persistante TCP. Le client se connecte au port par défaut 2181 du serveur, qui est la session.

À partir de l'établissement de la première connexion, le client commence le cycle de vie de la session. Le client envoie des paquets ping au serveur. Une période de timeout peut être définie pour chaque session.

Création de session

sessionIDID de session : utilisé pour identifier une session de manière unique. Chaque fois qu'un client crée une session, Zookeeper lui attribue un sessionID globalement unique. Zookeeper crée le sessionID dans le code source de la classe SessionTrackerImpl.

TimeoutTimeout de session : lors de la construction d'une instance Zookeeper, le client envoie le timeout configuré au serveur, et le serveur confirmera finalement le timeout de session en fonction de ses propres contraintes de timeout.

TickTimePoint de timeout de session suivant, 2000 ms par défaut. Il peut être configuré dans le fichier de configuration zoo.cfg pour faciliter la mise en œuvre, côté serveur, de la gestion de la stratégie de sessionbucket.。

isClosingCet attribut indique si une session a été fermée. Lorsque le serveur détecte que la session a expiré et est devenue invalide, la session est marquée comme "closed", et les nouvelles requêtes de cette session ne seront plus traitées.

États de session

Ce qui suit décrit plusieurs états importants :

  • connectingConnexion : une fois qu'une session est établie, l'état est "connecting", et il dure pendant très peu de temps.

  • connectedConnecté : l'état après une connexion réussie.

  • closedFermé : se produit lorsqu'une session expire, généralement en raison d'une défaillance réseau, d'un échec de reconnexion du client, d'une indisponibilité du serveur ou d'une déconnexion active du client.

Gestion des délais d'expiration de session (stratégie de compartiments + activation de session)

Pendant le fonctionnement, le serveur leader Zookeeper effectue périodiquement des vérifications de l'expiration des sessions. L'intervalle est ExpirationInterval, en millisecondes, avec une valeur par défaut de tickTime. Une vérification de l'expiration de session est effectuée à chaque tickTime.

Méthode de calcul d'ExpirationTime :

ExpirationTime = CurrentTime + SessionTimeout;
ExpirationTime = (ExpirationTime / ExpirationInterval + 1) * ExpirationInterval;

Pendant le fonctionnement de Zookeeper, le client envoie des requêtes (y compris des lectures et des écritures) ou des requêtes ping au serveur dans la plage d'expiration du délai de session, communément appeléedétection de battement de cœur.Cela complète l'activation de la session, préservant ainsi la validité de la session.

Processus d'activation de session :

Après l'activation, le processus de migration de session est effectué, puis un nouveau cycle commence :