Соединение между клиентом и сервером основано на постоянном TCP-соединении. Клиент подключается к порту сервера по умолчанию 2181, который является сессией.
С момента установления первого соединения клиент начинает жизненный цикл сессии. Клиент отправляет пакеты ping на сервер. Для каждой сессии может быть установлен период тайм-аута.
Создание сессии
sessionIDИдентификатор сессии: используется для уникальной идентификации сессии. Каждый раз, когда клиент создаёт сессию, Zookeeper выделяет ей глобально уникальный sessionID. Zookeeper создаёт sessionID в исходном коде класса SessionTrackerImpl.

Тайм-аутТайм-аут сессии: При создании экземпляра Zookeeper клиент отправляет настроенный тайм-аут на сервер, и сервер в конечном итоге подтверждает тайм-аут сессии на основе своих собственных ограничений по тайм-ауту.
TickTimeСледующая точка тайм-аута сессии, по умолчанию 2000 ms. Её можно настроить в файле конфигурации zoo.cfg, чтобы упростить серверной стороне реализацию сессионногоуправления стратегией корзин.。
isClosingЭтот атрибут отмечает, была ли сессия закрыта. Когда сервер обнаруживает, что сессия истекла и стала недействительной, сессия помечается как "closed", и новые запросы от этой сессии больше не обрабатываются.
Состояния сессии
Ниже описываются несколько важных состояний:
-
connectingПодключение: после установления сессии состояние — "connecting", и оно длится очень короткое время.
-
connectedПодключено: состояние после успешного подключения.
-
closedЗакрыто: возникает, когда сеанс истекает, обычно из-за сбоя сети, сбоя переподключения клиента, простоя сервера или активного отключения клиента.
Управление тайм-аутом сеанса (стратегия корзин + активация сеанса)
Во время работы ведущий сервер Zookeeper периодически выполняет проверки тайм-аута сеансов. Интервал — ExpirationInterval, в milliseconds, со значением по умолчанию tickTime. Проверка тайм-аута сеанса выполняется каждый tickTime.

Метод расчёта ExpirationTime:
ExpirationTime = CurrentTime + SessionTimeout; ExpirationTime = (ExpirationTime / ExpirationInterval + 1) * ExpirationInterval;
Во время работы Zookeeper клиент будет отправлять серверу запросы (включая чтение и запись) или ping-запросы в пределах диапазона истечения тайм-аута сеанса, широко известного какобнаружение heartbeat.Это завершает активацию сеанса, тем самым поддерживая действительность сеанса.
Процесс активации сеанса:

После активации выполняется процесс миграции сеанса, а затем начинается новый раунд:
