Javaによるヘーゼルキャストの手引き

Javaを使用したHazelcastのガイド

1. 概要

これはHazelcastの紹介記事で、クラスターメンバーを作成し、Mapを分散してクラスターノード間でMapデータを共有し、クラスター内のデータに接続してクエリを実行するJavaクライアントを作成する方法について説明します。 。

2. ヘーゼルキャストとは何ですか?

Hazelcastは、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 Centralのグループcom.hazelcastの下にMavenの依存関係を見つけることができます。

この記事では、スタンドアロンのHazelcastクラスターメンバーとHazelcast Java Clientの作成に必要な依存関係に焦点を当てます。

3.1. Hazelcastクラスターメンバー

以下に示すように、pom.xmlにhazelcastの依存関係を追加する必要があります。


    com.hazelcast
    hazelcast
    3.7.2

依存関係はmaven central repositoryで利用できます。

3.2. HazelcastJavaクライアント

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アプリケーションを起動すると、コンソールに流れるテキストが表示されます。これは、クラスターに参加する必要があるJVMに新しいHazelcastノードを作成することを意味します。

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

複数のノードを作成するために、ServerNodeアプリケーションの複数のインスタンスを開始できます。 Hazelcastは自動的に新しいメンバーを作成し、クラスターに追加します。

たとえば、ServerNodeアプリケーションを再度実行すると、コンソールに次のログが表示され、クラスターに2つのメンバーがあることが示されます。

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.を作成します。java.util.concurrent.ConcurrentMapインターフェイスを拡張する分散Mapを作成するには、前に作成したHazelcastInstanceのインスタンスが必要です。

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

mapにいくつかのエントリを追加しましょう:

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

上記のように、mapに10個のエントリを追加しました。 IdGeneratorを使用して、マップの一意のキーを確実に取得しました。 IdGeneratorの詳細については、次のlinkを確認してください。

これは実際の例ではないかもしれませんが、分散マップに適用できる多くの操作の1つを示すために使用されています。 Hazelcast Javaクライアントからクラスターメンバーによって追加されたマップエントリを取得する方法については、後のセクションで説明します。

内部的には、Hazelcastはmapエントリを分割し、クラスタメンバー間でエントリを分散および複製します。 HazelcastMapの詳細については、次のlinkを確認してください。

4.3. HazelcastJavaクライアントを作成する

Hazelcastクライアントを使用すると、クラスターのメンバーにならずにすべてのHazelcast操作を実行できます。 クラスタメンバの1つに接続し、クラスタ全体のすべての操作を委任します。

ネイティブクライアントを作成しましょう:

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

クラスターにアクセスするためのデフォルトのユーザー名とパスワードは、devdev-passです。 Hazelcastクライアントの詳細については、次のlinkを確認してください。

4.4. Javaクライアントから分散Mapにアクセスする

次に、以前に作成した分散Mapにアクセスします.分散Map.にアクセスするには、以前に作成したHazelcastInstanceのインスタンスが必要です

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

これで、クラスターのメンバーでなくても、mapで操作を実行できます。 たとえば、クラスターメンバーによって追加されたマップエントリを繰り返し処理してみましょう。

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

5. Hazelcastの構成

このセクションでは、宣言的(XML)およびプログラム(API)を使用してHazelcastネットワークを構成し、Hazelcast管理センターを使用して実行中のノードを監視および管理する方法に焦点を当てます。

Hazelcastの起動中に、hazelcast.configシステムプロパティを検索します。 設定されている場合、その値がパスとして使用されます。 上記のシステムプロパティが設定されていない場合、Hazelcastは作業ディレクトリにhazelcast.xmlファイルがあるかどうかを確認します。

そうでない場合は、hazelcast.xmlがクラスパスに存在するかどうかを確認します。 上記のいずれも機能しない場合、Hazelcastはデフォルト設定、つまり

上記のいずれも機能しない場合、Hazelcastはデフォルト設定、つまり hazelcast.jar.に付属するhazelcast-default.xml

5.1. ネットワーク設定

デフォルトでは、Hazelcastはマルチキャストを使用して、クラスターを形成できる他のメンバーを検出します。 マルチキャストが環境にとって望ましい検出方法でない場合は、フルTCP / IPクラスター用にHazelcastを構成できます。

宣言型構成を使用して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までのポートを見つけようとします。

ポートを1つだけ使用することを選択したい場合は、auto-incrementfalseに設定することで、ポートの自動インクリメント機能を無効にできます。

5.2. 管理センターの構成

Management Centerを使用すると、クラスターの全体的な状態を監視したり、データ構造を詳細に分析および参照したり、マップ構成を更新したり、ノードからスレッドダンプを取得したりできます。

Hazelcast管理センターを使用するには、mancenter-versionwarアプリケーションをJavaアプリケーションサーバー/コンテナーにデプロイするか、コマンドラインからHazelcast管理センターを起動します。 最新のHazelcastZIPはhazelcast.orgからダウンロードできます。 ZIPには、mancenter-versionwarファイルが含まれています。

WebアプリケーションのURLをhazelcast.xmlに追加して、Hazelcastノードを構成し、Hazelcastメンバーに管理センターと通信させることができます。

宣言型構成を使用して管理センターを構成しましょう。


    http://localhost:8080/mancenter

およびプログラムによる構成:

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

6. 結論

この記事では、Hazelcastの導入概念を取り上げました。 詳細については、Reference Manualをご覧ください。

この記事over on GitHubのソースコードを見つけることができます。