Статьи

Использование тонкого клиента Apache Ignite — блог инсайдера Apache Ignite

Начиная с версии 2.4.0, Apache Ignite представил новый способ подключения к кластеру Ignite, который позволяет осуществлять связь с кластером Ignite без запуска клиентского узла Ignite. Исторически Apache Ignite предоставляет два понятия клиентского и серверного узлов. Клиентский узел Ignite задуман как облегченный режим, который не хранит данные (однако он может хранить около кэша) и не выполняет никаких вычислительных задач. В основном, клиентский узел используется для удаленной связи с сервером и позволяет манипулировать кешами Ignite, используя весь набор Ignite API. У узла Ignite Client есть два основных недостатка:

  • Всякий раз, когда клиентский узел Ignite подключается к кластеру Ignite, он становится частью топологии кластера. Чем больше топология, тем сложнее ее поддерживать.
  • В режиме клиента узел Apache Ignite потребляет много ресурсов для выполнения операций кэширования.

Для решения вышеуказанных проблем Apache Ignite предоставляет новый протокол двоичного клиента для реализации тонкого клиента Ignite на любом языке программирования или платформах.

Обратите внимание, что слово thin означает, что он не запускает никаких узлов Ignite для связи с кластером Ignite и не реализует логику SPI обнаружения / связи.

Тонкий клиент подключается к кластеру Ignite через сокет TCP и выполняет операции CRUD, используя четко определенный двоичный протокол. Протокол является полностью основанным на сокете протоколом типа «запрос-ответ». Протокол разработан достаточно строгим, чтобы обеспечить стандартизацию в коммуникации (например, подтверждение соединения, длину сообщения и т. Д.), Но при этом достаточно гибким, чтобы разработчики могли расширить протокол для реализации пользовательских функций.

Apache Ignite предоставляет краткие форматы данных и детали связи в
Документация по использованию двоичного протокола. Ignite уже поддерживает .NET, а тонкий клиент Java основывается на протоколе и планирует выпустить тонкий клиент для основных языков, таких как goLang, python и т. д. Однако вы можете реализовать свой тонкий клиент в любой любимый язык программирования по вашему выбору с использованием двоичного протокола.

Также обратите внимание, что производительность тонкого клиента Apache Ignite несколько ниже, чем у клиентского узла Ignite, поскольку он работает через промежуточный узел. Предположим, что у вас есть два узла Apache Ignite A, B, и вы используете тонкий клиент C для извлечения данных из кластера. С тонким клиентом C вы подключились к узлу B, и всякий раз, когда вы пытаетесь извлечь любые данные, принадлежащие узлу A, запросы всегда проходят через клиент B. В случае клиентского узла Ignite он отправляет запрос непосредственно к узлу А.

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

Прежде чем перейти к более сложным темам, давайте рассмотрим простое приложение для использования тонкого клиента Ignite. В этом простом приложении я покажу вам все, что нужно для начала работы с тонким клиентом. Исходный код для примеров доступен в репозитории GitHub , см. Главу 2.

Шаг 1 Клонируйте или загрузите проект из репозитория GitHub. Если вы планируете разработать проект с нуля, добавьте следующую зависимость maven в файл pom.xml. Единственная библиотека ignite-core, необходимая для тонкого клиента, остальные библиотеки используются только для ведения журнала.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
<dependency>
    <groupId>org.apache.ignite</groupId>
    <artifactId>ignite-core</artifactId>
    <version>2.6.0</version>
</dependency>
<!-- Logging wih SLF4J -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.6.1</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.0.1</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.0.1</version>
</dependency>

Шаг 2 Теперь давайте создадим новый класс Java с именем HelloThinClient .

Шаг 3 Скопируйте и вставьте следующий исходный код. Не забудьте сохранить файл.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import org.apache.ignite.IgniteException;
import org.apache.ignite.Ignition;
import org.apache.ignite.client.ClientCache;
import org.apache.ignite.client.IgniteClient;
import org.apache.ignite.configuration.ClientConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
public class HelloThinClient {
 private static final Logger logger = LoggerFactory.getLogger(HelloThinClient.class);
 private static final String HOST = "127.0.0.1";
 private static final String PORT = "10800";
 private static final String CACHE_NAME = "thin-cache";
 
 public static void main(String[] args) {
  logger.info("Simple Ignite thin client example working over TCP socket.");
  ClientConfiguration cfg = new ClientConfiguration().setAddresses(HOST + ":" + PORT);
  try (IgniteClient igniteClient = Ignition.startClient(cfg)) {
   ClientCache < String, String > clientCache = igniteClient.getOrCreateCache(CACHE\ _NAME);
   // put a few value
   clientCache.put("Moscow", "095");
   clientCache.put("Vladimir", "033");
   // get the region code of the Vladimir String val = clientCache.get("Vladimir");
   logger.info("Print value: {}", val);
  } catch (IgniteException e) {
   logger.error("Ignite exception:", e.getMessage());
  } catch (Exception e) {
   logger.error("Ignite exception:", e.getMessage());
  }
 }
}

Шаг 4. Давайте подробнее рассмотрим программу, которую мы написали выше.

1
2
3
4
private static final Logger logger = LoggerFactory.getLogger(HelloThinClient.class);
 private static final String HOST = "127.0.0.1";
 private static final String PORT = "10800";
 private static final String CACHE_NAME = "thin-cache";

Сначала мы объявили несколько констант: логгер, IP-адрес хоста, порт и имя кэша, который мы собираемся создать. Если у вас другой IP-адрес, вы должны изменить его здесь. Порт 10800 используется по умолчанию для тонкого клиента Ignite.

1
СlientConfiguration cfg = new ClientConfiguration().setAddresses(HOST+":"+PORT);

Это наша следующая захватывающая линия в программе. Мы создали экземпляр Ignite
СlientConfiguration и передали адрес, который мы объявили выше. В следующем блоке try-catch мы определили новый кеш с именем
тонкий кеш и положить 2 пары ключ-значение. Мы также использовали метод Ignition.startClient для инициализации соединения с узлом Ignite.

01
02
03
04
05
06
07
08
09
10
11
12
13
try (IgniteClient igniteClient = Ignition.startClient(cfg)) {
   ClientCache < String, String > clientCache = igniteClient.getOrCreateCache(CACHE\ _NAME);
   // put a few value
   clientCache.put("Moscow", "095");
   clientCache.put("Vladimir", "033");
   // get the region code of the Vladimir String val = clientCache.get("Vladimir");
   logger.info("Print value: {}", val);
  } catch (IgniteException e) {
   logger.error("Ignite exception:", e.getMessage());
  } catch (Exception e) {
   logger.error("Ignite exception:", e.getMessage());
  }
}

Позже мы извлекли значение ключа Владимира и распечатали значение в консоли.

Шаг 5 Запустите кластер Apache Ignite с одним узлом, если он еще не запущен. Используйте следующую команду в вашем любимом терминале.

1
$ IGNITE_HOME/bin/ignite.sh

Шаг 6 Чтобы построить проект, введите следующую команду.

1
$ mvn clean install

Это запустит Maven, сказав ему выполнить цель установки. Эта цель будет скомпилировать, протестировать и упаковать код проекта, а затем скопировать его в локальный репозиторий зависимостей. В первый раз процесс сборки займет несколько минут для завершения, после успешной компиляции, исполняемого файла с именем
HelloThinClient-runnable.jar будет создан в целевом каталоге.

Шаг 7 Запустите приложение, введя следующую команду.

1
$ java -jar .\target\HelloThinClient-runnable.jar

Вы должны увидеть много логов в терминал. В конце журнала вы должны найти что-то вроде этого.

Apache Ignite

Приложение подключилось через TCP-сокет к узлу Ignite и выполнило операции put и get на тонком кеше кеша. Если вы посмотрите на консоль узла Ignite, вы должны заметить, что топология кластера Ignite не изменилась.

Apache Ignite

Опубликовано на Java Code Geeks с разрешения Шамима Бхуияна, партнера нашей программы JCG. См. Оригинальную статью здесь: Использование тонкого клиента Apache Ignite — блог инсайдера Apache Ignite

Мнения, высказанные участниками Java Code Geeks, являются их собственными.