Обзор тонких клиентов#

Тонкий клиент — легковесный клиент DataGrid, который подключается к кластеру по стандартному сокетному соединению. Он не является частью топологии кластера, не хранит данные и не используется в качестве пункта назначения для вычислений при использовании DataGrid в качестве Compute Grid. Тонкий клиент устанавливает сокетное соединение с серверным узлом DataGrid и выполняет все операции через него. Тонкие клиенты основаны на протоколе Binary Client, который позволяет поддерживать подключение DataGrid с любого языка программирования. Подробнее о протоколе написано в разделе «Обзор бинарного протокола клиента».

DataGrid поставляется со следующими тонкими клиентами:

Функции тонких клиентов#

В таблице ниже описаны функции, которые поддерживает каждый клиент:

Функция тонкого клиента

Java

.NET

C++

Python

Node.js

PHP

Scan query

Да

Да

Нет

Да

Да

Да

Scan query с фильтром

Да

Да

Нет

Нет

Нет

Нет

SqlFieldsQuery

Да

Да

Нет

Да

Да

Да

BinaryObject API

Да

Да

Нет

Нет

Да

Да

Отказоустойчивость

Да

Да

Да

Да

Да

Да

Асинхронные операции

Да

Да

Нет

Да

Да

Да

SSL/TLS

Да

Да

Да

Да

Да

Да

Аутентификация

Да

Да

Да

Да

Да

Да

Partition Awareness

Да

Да

Да

Да

Да

Нет

Транзакции

Да

Да

Да

Нет

Нет

Нет

API кластера

Да

Да

Нет

Нет

Нет

Нет

Вычислительный API

Да

Да

Да

Нет

Нет

Нет

Сontinuous query

Да

Да

Да

Нет

Нет

Нет

Вызов сервиса

Да

Да

Нет

Нет

Нет

Нет

Server Discovery

Да

Да

Нет

Нет

Нет

Нет

Server Discovery в Kubernetes

Да

Нет

Нет

Нет

Нет

Нет

DataStreamer

Нет

Да

Нет

Нет

Нет

Нет

Политика повторных попыток

Да

Да

Нет

Нет

Нет

Нет

Отказоустойчивость клиентского соединения#

Все тонкие клиенты поддерживают механизм отказоустойчивого соединения: клиент автоматически переключается на доступный узел в случае отключения текущего или сбоя соединения. Чтобы механизм работал, в конфигурации клиента добавьте список адресов узлов, которые будут использоваться при возможных отказах. Подробности настройки описаны в разделе каждого тонкого клиента.

Partition Awareness#

Данные в кластере равномерно распределяются между узлами по соображениям масштабируемости и производительности. В каждом узле кластера сохранены подмножество данных и карта распределения партиций. Она используется для определения узла, в котором хранятся основная (primary) и резервная (backup) копии нужных записей. Подробнее о партицировании написано в подразделе «Партицирование данных» раздела «Моделирование данных».

Функция Partition Awareness позволяет тонкому клиенту отправлять запросы напрямую узлу, который содержит нужные данные. Без этой функции приложение, которое подключено к кластеру с помощью тонкого клиента, выполняет все запросы и операции на одном серверном узле (он служит прокси-сервером для входящих запросов). Затем эти операции перенаправляются на узел, где хранятся нужные данные. Это приводит к возникновению узкого места, которое может помешать линейному масштабированию приложения.

Запросы должны проходить через прокси-сервер, откуда они перенаправляются на корректный узел:

Partition-awareness-off

С функцией Partition Awareness тонкий клиент может напрямую отправлять запросы основным узлам, где хранятся нужные данные. Функция устраняет узкое место и позволяет приложению проще масштабироваться:

Partition-awareness-on

Функция Partition Awareness доступна для тонких клиентов:

Аутентификация#

Все тонкие клиенты поддерживают аутентификацию на стороне кластера. Она настраивается в конфигурации кластера, а клиент предоставляет учетные данные пользователя. Подробности настройки описаны в разделе каждого тонкого клиента.

Конфигурация кластера#

Параметры подключения тонкого клиента настраиваются в конфигурации клиентского коннектора. По умолчанию DataGrid принимает клиентские соединения через порт 10800. Можно изменить порт, размер буфера соединения и тайм-аут, включить SSL/TLS и так далее.

Конфигурация коннектора тонкого клиента#

Ниже описан пример настройки параметров подключения тонкого клиента:

<bean class="org.apache.ignite.configuration.IgniteConfiguration" id="ignite.cfg">
    <property name="clientConnectorConfiguration">
        <bean class="org.apache.ignite.configuration.ClientConnectorConfiguration">
            <property name="port" value="10000"/>
        </bean>
    </property>
</bean>
ClientConnectorConfiguration clientConnectorCfg = new ClientConnectorConfiguration();
// Установите диапазон портов от 10000 до 10005.
clientConnectorCfg.setPort(10000);
clientConnectorCfg.setPortRange(5);

IgniteConfiguration cfg = new IgniteConfiguration().setClientConnectorConfiguration(clientConnectorCfg);

// Запустите узел.
Ignite ignite = Ignition.start(cfg);
var cfg = new IgniteConfiguration
{
    ClientConnectorConfiguration = new ClientConnectorConfiguration
    {
        // Установите диапазон портов от 10000 до 10005.
        Port = 10000,
        PortRange = 5
    }
};

var ignite = Ignition.Start(cfg);

В таблице описаны параметры, которые можно изменить при настройке:

Параметр

Описание

Значение по умолчанию

thinClientEnabled

Включает или выключает возможность соединения с тонким клиентом

true

port

Порт для подключения тонкого клиента

10800

portRange

Задает диапазон портов для подключения тонкого клиента. Например, если задано значение 10, тонкие клиенты могут подключиться к любому порту в диапазоне от 10800 до 18010. Узел пытается связаться с каждым портом из диапазона (начиная со значения параметра port), пока не найдет доступный. Если все порты недоступны, узел не запустится

100

sslEnabled

Если задано значение true, для подключений тонких клиентов будет работать протокол SSL

false

Полный список параметров находится в официальной документации Apache Ignite.