Руководство по Hazelcast с Java

Руководство по Hazelcast с Java

1. обзор

Это вводная статья о Hazelcast, в которой мы рассмотрим, как создать член кластера, распределитьMap для обмена даннымиMap между узлами кластера и создать клиент Java для подключения и запроса данных в кластере. .

2. Что такое Hazelcast?

Hazelcast - это распределенная платформа In-Memory Data Grid для Java. Архитектура поддерживает высокую масштабируемость и распределение данных в кластерной среде. Он поддерживает автоматическое обнаружение узлов и интеллектуальную синхронизацию. Чтобы увидеть особенности всех выпусков Hazelcast, мы можем обратиться к следующемуlink.

Hazelcast доступен в разных редакциях. Вы можете найти список доступных редакций Hazelcast в следующихhttp://docs.hazelcast.org/docs/latest/manual/html-single/index.html#hazelcast-editions. [Ссылка]. В этой статье мы сосредоточимся на выпуске Hazelcast с открытым исходным кодом.

Кроме того, Hazelcast предлагает различные функции, такие как распределенная структура данных, распределенные вычисления, распределенный запрос и т. Д. В этой статье мы сосредоточимся на распределенныхMap.

3. Maven Зависимости

Hazelcast предлагает различные библиотеки в зависимости от использования. Мы можем найти зависимости maven в группеcom.hazelcast в Maven Central.

В этой статье мы сосредоточимся на зависимостях, необходимых для создания автономного элемента кластера Hazelcast и клиента Hazelcast Java.

3.1. Член кластера Hazelcast

Нам нужно добавить зависимость hazelcast в pom.xml, как показано ниже:


    com.hazelcast
    hazelcast
    3.7.2

Зависимость доступна вmaven central repository.

3.2. Клиент Hazelcast Java

Помимо основной зависимости Hazelcast, нам также необходимо включить зависимость клиента:


    com.hazelcast
    hazelcast-client
    3.7.2

Зависимость доступна вmaven central repository.

4. Ваше первое приложение Hazelcast

4.1. Создать участника Hazelcast

Члены (также называемые узлами) автоматически объединяются в кластер. Это автоматическое объединение происходит с различными механизмами обнаружения, которые участники используют, чтобы найти друг друга.

Давайте создадим член, который хранит данные на распределенной карте Hazelcast:

public class ServerNode {

    HazelcastInstance hzInstance = Hazelcast.newHazelcastInstance();
    ...
}

Когда мы запускаем приложениеServerNode, мы видим текущий текст в консоли, что означает, что мы создаем новый узел Hazelcast в нашей JVM, который должен будет присоединиться к кластеру.

Members [1] {
    Member [192.168.1.105]:5701 - 899898be-b8aa-49aa-8d28-40917ccba56c this
}

Чтобы создать несколько узлов, мы можем запустить несколько экземпляров приложенияServerNode. Hazelcast автоматически создаст и добавит нового члена в кластер.

Например, если мы снова запустим приложениеServerNode, мы увидим в консоли следующий журнал, в котором говорится, что в кластере два участника.

Members [2] {
  Member [192.168.1.105]:5701 - 899898be-b8aa-49aa-8d28-40917ccba56c
  Member [192.168.1.105]:5702 - d6b81800-2c78-4055-8a5f-7f5b65d49f30 this
}

4.2. Создать распределенныйMap

Затем мы создадим распределенныйMap.. Нам нужен экземплярHazelcastInstance, созданный ранее, чтобы создать распределенныйMap, который расширяет интерфейсjava.util.concurrent.ConcurrentMap.

Map map = hazelcastInstance.getMap("data");
...

Давайте добавим несколько записей вmap:

IdGenerator idGenerator = hazelcastInstance.getIdGenerator("newid");
for (int i = 0; i < 10; i++) {
    map.put(idGenerator.newId(), "message" + 1);
}

Как мы видим выше, мы добавили 10 записей вmap. Мы использовалиIdGenerator, чтобы получить уникальный ключ для карты. Для получения дополнительной информации оIdGenerator вы можете проверить следующиеlink.

Хотя это может и не быть реальным примером, он просто используется для демонстрации одной из многих операций, которые мы можем применить к распределенной карте. В следующем разделе мы увидим, как мы можем получить записи карты, добавленные участником кластера, из Java-клиента Hazelcast.

Внутри Hazelcast разделит записиmap, а также распределит и реплицирует записи среди членов кластера. Для получения дополнительной информации о HazelcastMap вы можете ознакомиться со следующимиlink.

4.3. Создать клиент Java Hazelcast

Клиент Hazelcast позволяет нам выполнять все операции Hazelcast, не будучи участником кластера. Он подключается к одному из членов кластера и делегирует ему все операции кластера.

Давайте создадим собственный клиент:

ClientConfig config = new ClientConfig();
GroupConfig groupConfig = config.getGroupConfig();
groupConfig.setName("dev");
groupConfig.setPassword("dev-pass");
HazelcastInstance hzClient
  = HazelcastClient.newHazelcastClient(config);

Имя пользователя и пароль по умолчанию для доступа к кластеру:dev иdev-pass. Для получения дополнительных сведений о клиенте Hazelcast вы можете ознакомиться со следующимиlink.

4.4. Доступ к распределенномуMap из Java-клиента

Затем мы получим доступ к распределенномуMap, который мы создали ранее.. Нам нужен экземплярHazelcastInstance, созданный ранее, для доступа к распределенномуMap.

IMap map = hzClient.getMap("data");
...

Теперь мы можем выполнять операции сmap, не являясь членом кластера. Например, давайте попробуем перебрать записи карты, добавленные членом кластера:

for (Entry entry : map.entrySet()) {
    ...
}

5. Настройка Hazelcast

В этом разделе основное внимание будет уделено настройке сети Hazelcast с использованием декларативного (XML) и программного (API) и использования центра управления Hazelcast для мониторинга и управления работающими узлами.

Пока Hazelcast запускается, он ищет системное свойствоhazelcast.config. Если он установлен, его значение используется в качестве пути. Если указанное выше системное свойство не установлено, Hazelcast проверяет, есть ли файлhazelcast.xml в рабочем каталоге.

Если нет, то он проверяет, существует лиhazelcast.xml в пути к классам. Если ничего из вышеперечисленного не работает, Hazelcast загружает конфигурацию по умолчанию, т.е.

Если ничего из вышеперечисленного не работает, Hazelcast загружает конфигурацию по умолчанию, т.е. hazelcast-default.xml, который идет сhazelcast.jar.

5.1. конфигурация сети

По умолчанию Hazelcast использует многоадресную рассылку для обнаружения других участников, которые могут образовывать кластер. Если многоадресная рассылка не является предпочтительным способом обнаружения для нашей среды, мы можем настроить Hazelcast для полного кластера TCP / IP.

Давайте настроим кластер TCP / IP, используя декларативную конфигурацию:



    
        5701
        
            
        
        
            machine1
        localhost
        
        
    

и программная конфигурация:

Config config = new Config();
NetworkConfig network = config.getNetworkConfig();
network.setPort(5701).setPortCount(20);
network.setPortAutoIncrement(true);
JoinConfig join = network.getJoin();
join.getMulticastConfig().setEnabled(false);
join.getTcpIpConfig()
  .addMember("machine1")
  .addMember("localhost").setEnabled(true);

По умолчанию Hazelcast попытается связать 100 портов. В приведенном выше примере, если мы устанавливаем значение порта 5701 и ограничиваем количество портов до 20, поскольку члены присоединяются к кластеру, Hazelcast пытается найти порты между 5701 и 5721.

Если мы хотим использовать только один порт, мы можем отключить функцию автоматического увеличения порта, установивauto-increment наfalse.

5.2. Конфигурация центра управления

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

Чтобы использовать центр управления Hazelcast, мы можем либо развернуть приложениеmancenter-version.war на нашем сервере / контейнере приложений Java, либо запустить Hazelcast Management Center из командной строки. Мы можем скачать последнюю версию Hazelcast ZIP с сайтаhazelcast.org. ZIP-архив содержит файлmancenter-version.war.

Мы можем настроить наши узлы Hazelcast, добавив URL-адрес веб-приложения вhazelcast.xml, а затем попросить участников Hazelcast связаться с центром управления.

Давайте настроим центр управления, используя декларативную конфигурацию:


    http://localhost:8080/mancenter

и программная конфигурация:

ManagementCenterConfig manCenterCfg = new ManagementCenterConfig();
manCenterCfg.setEnabled(true).setUrl("http://localhost:8080/mancenter");

6. Заключение

В этой статье мы рассмотрели вводные понятия о Hazelcast. Для подробностей вы можете взглянуть наReference Manual.

Вы можете найти исходный код этой статьиover on GitHub.