Перейти к содержанию

Архитектура heartbeat

Heartbeat

heartbeat - это фоновая задача, оправляющая постоянные ping-запросы к узлу Tarantool и анализирующая результаты успешных и неуспешных ping-запросов. Задача heartbeat устанавливается для каждого PoolEntry в IProtoClientPool. Главная задача heartbeat - отслеживать доступность соединения к узлу Tarantool

Принцип работы

Для определения доступности узла Tarantool используется подход скользящего окна. Представим, что были заданы следующие настройки heartbeat:

  • invalidationThreshold == 2
  • deathThreshold == 4
  • windowSize == 3
Принцип работы heartbeat

Анализ доступности узла проводится с помощью ping-запросов. Если количество неудачных ping-запросов в момент рассмотрения превышает значение invalidationThreshold в окне, то соединение исключается из пула соединений для выбора балансировщиком (4,5,6). Для исключенного соединения процесс heartbeatпродолжается. Каждое превышение invalidationThreshold увеличивает значение счетчика currentDeathThreshold на 1. Если currentDeathThreshold достигает значения deathThreshold соединение считается мертвым (статус KILL) и запускается процесс переподключения соединения (7).

Переход из INVALIDATE к ACTIVATE

Переход из состояния INVALIDATE в состояние ACTIVATE происходит если при последующих итерациях анализа доступности количество неудачных ping-запросов меньше значения invalidationThreshold. Счетчик currentDeathThreshold сбрасывается до значения 0 (см. диаграмму)

Переход из состояния KILL в состояние ACTIVATE происходит если соединение было успешно переподключено.

Параметры heartbeat

Имя параметра Описание Значение по умолчанию
pingInterval Время в миллисекундах, по истечении которого выполняется очередной ping-запрос 3000
invalidationThreshold Количество неудачных ping-запросов в окне, при достижении которого PoolEntry изымается из пула соединений (балансировщик перестает видеть это соединение в процессе выбора). Выполнение ping-запросов по этому соединению продолжаются 2
windowSize Размер скользящего окна (в количествах ping-запросов) 4
deathThreshold Количество превышений invalidationThreshold, после которых соединение переводится в состояние переподключения 4
pingFunction Метод для выполнения проверочного запроса (ping-запрос) IProtoClient::ping

Настройка параметров

Для того, чтобы настроить параметры heartbeat воспользуйтесь HeartbeatOpts API:

final HeartbeatOpts heartbeatOpts = HeartbeatOpts.getDefault()
    .withPingInterval(pingInterval)
    .withWindowSize(windowSize)
    .withDeathThreshold(deathThreshold)
    .withInvalidationThreshold(invalidationThreshold)
    .withPingFunction(pingFunction);

final TarantoolCrudClient crudClient = TarantoolFactory.crud()
    // ... other options
    .withHeartbeat(heartbeatOpts)
    .build();