Взаимодействие с Tarantool Java SDK
Высокоуровневая архитектура взаимодействия с Tarantool Java SDK
Для взаимодействия с Tarantool, Tarantool Java SDK использует протокол IProto, который
реализован в классах, поддерживающих интерфейс IProtoClient. Управление соединениями и их
состоянием осуществляется через объекты PoolEntry, которые оборачивают IProtoClient. Для
проверки доступности соединений используется механизм heartbeat.
Чтобы работать с несколькими соединениями одновременно, объекты PoolEntry объединяются в
логические группы внутри IProtoClientPool. Эти группы представляют собой
наборы соединений к одному узлу Tarantool и настраиваются с помощью метаданных, переданных
через экземпляры класса InstanceConnectionGroup.
Пул соединений выполняет следующие функции:
- Создает логически разделенные наборы
PoolEntryпри создании клиента, используя метаданные из объектов класса InstanceConnectionGroup - Предоставляет доступные соединения по запросу балансировщика
- Закрывает соединения при завершении работы клиента
Выбор соединения для выполнения запроса осуществляется с помощью объекта класса, реализующего интерфейс TarantoolBalancer.
Для работы с логически разделенными группами соединений используются высокоуровневые клиенты (
TarantoolClient, TarantoolCrudClient и TarantoolBoxClient), которые предоставляют удобный
API.
Высокоуровневая схема взаимодействия с Tarantool через Tarantool Java SDK
выглядит следующим образом:
- Программист выполняет запрос через API высокоуровневых клиентов (
TarantoolClient,TarantoolCrudClientилиTarantoolBoxClient) - Высокоуровневый клиент запрашивает соединение для выполнения запроса у
TarantoolBalancer - Балансировщик, используя свою логику, запрашивает у пула соединений (
IProtoClientPool) доступный узел. Доступность узлов определяется с помощью механизма heartbeat - Пул соединений возвращает доступное соединение балансировщику
- Балансировщик предоставляет высокоуровневому клиенту соединение
- Высокоуровневый клиент выполняет запрос через предоставленное соединение
- Высокоуровневый клиент возвращает в вызывающий код
CompletableFuture<?>с результатом