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

Взаимодействие с Tarantool Java SDK

Высокоуровневая архитектура взаимодействия с 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 выглядит следующим образом:

  1. Программист выполняет запрос через API высокоуровневых клиентов (TarantoolClient, TarantoolCrudClient или TarantoolBoxClient)
  2. Высокоуровневый клиент запрашивает соединение для выполнения запроса у TarantoolBalancer
  3. Балансировщик, используя свою логику, запрашивает у пула соединений (IProtoClientPool) доступный узел. Доступность узлов определяется с помощью механизма heartbeat
  4. Пул соединений возвращает доступное соединение балансировщику
  5. Балансировщик предоставляет высокоуровневому клиенту соединение
  6. Высокоуровневый клиент выполняет запрос через предоставленное соединение
  7. Высокоуровневый клиент возвращает в вызывающий код CompletableFuture<?> с результатом