Соединение между клиентом и сервером основано на постоянном 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.Это завершает активацию сеанса, тем самым поддерживая действительность сеанса.

Процесс активации сеанса:

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