Архитектура heartbeat
Heartbeat
heartbeat - это фоновая задача, оправляющая постоянные ping-запросы к узлу Tarantool и
анализирующая результаты успешных и неуспешных ping-запросов. Задача heartbeat устанавливается для
каждого PoolEntry в IProtoClientPool. Главная задача heartbeat -
отслеживать доступность соединения к узлу Tarantool
Принцип работы
Для определения доступности узла Tarantool используется подход скользящего окна. Представим, что
были заданы следующие настройки heartbeat:
invalidationThreshold == 2deathThreshold == 4windowSize == 3
Анализ доступности узла проводится с помощью ping-запросов. Если количество неудачных ping-запросов
в момент рассмотрения превышает значение invalidationThreshold в окне, то соединение исключается
из пула соединений для выбора балансировщиком (4,5,6). Для
исключенного соединения процесс heartbeatпродолжается. Каждое превышение invalidationThreshold
увеличивает значение счетчика currentDeathThreshold на 1. Если currentDeathThreshold достигает
значения deathThreshold соединение считается мертвым (статус KILL) и запускается процесс
переподключения соединения (7).
Переход из состояния 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();