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

Балансировка

Балансировщики

Балансировщик - компонент TarantoolClient, который предназначен для распределения запросов между узлами Tarantool.

Концепция

Абстракция балансировщика в Tarantool Java EE представлена интерфейсом TarantoolBalancer. Рассмотрим принцип работы балансировки в Java-клиенте:

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

Фактическое подключения к узлу по выбранному соединению происходит при первом выборе.

Если соединение недоступно, балансировщик попытается выбрать следующее из доступных. Если нет ни одного доступного соединения клиент выбросит исключение NoAvailableClientsException.

Доступные реализации по умолчанию

По умолчанию доступны следующие типы балансировщиков:

TarantoolRoundRobinBalancer

Работа балансировщика

Данная реализация интерфейса TarantoolBalancer выполняет выбор соединений по следующему алгоритму:

  1. Выбор группы подключений, с которой начинается балансировка (порядок не детерминирован).
  2. Выбор соединения в группе производится по порядку с первого до последнего.
  3. После последнего соединения в текущей группе балансировщик переходит на соединения, относящиеся к другой группе.

TarantoolDistributingRoundRobinBalancer

Работа балансировщика

Данная реализация интерфейса TarantoolBalancer выполняет выбор соединений по следующему алгоритму:

  1. Выбор группы подключений, с которой начинается балансировка (порядок не детерминирован).
  2. Выбор первого соединения в первой группе.
  3. Переход к следующей группе и выбор первого соединений.
  4. Повторять п.3, выбирая в группе следующее соединение.

Настройка балансировки клиента

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

final TarantoolCrudClient crudClient = TarantoolFactory.crud()
    .withBalancerClass(TarantoolRoundRobinBalancer.class)
    //... прочие настройки
    .build();

Пользовательские балансировщики

Для того чтобы использовать свой балансировщик, создайте класс, реализующий интерфейс TarantoolBalancer.

Важно

Пользовательский класс, реализующий TarantoolBalancer, должен иметь конструктор по умолчанию и конструктор с сигнатурой public <constructorName>(IProtoClientPool pool) {...}.