Javaによるヘーゼルキャストの手引き
1概要
これはHazelcastについての紹介記事です。ここでは、クラスタメンバーを作成し、クラスタノード間で
Map
データを共有するための
Map
の分散、およびクラスタ内でデータを接続およびクエリするためのJavaクライアントの作成方法について説明します。
** 2ヘーゼルキャストとは
Hazelcastは、Java用の分散型インメモリデータグリッドプラットフォームです。このアーキテクチャーは、クラスター環境での高いスケーラビリティーとデータ分散をサポートします。ノードの自動検出とインテリジェント同期をサポートします。すべてのHazelcastエディションの機能を確認するには、https://hazelcast.org/features/[link]を参照してください。
Hazelcastはさまざまなエディションで利用可能です。利用可能なHazelcastのエディションのリストは、次のhttp://docs.hazelcast.org/docs/latest/manual/html-single/index.html#hazelcast-editions.[link]にあります。
この記事の目的のために、Hazelcastのオープンソース版に焦点を合わせます。
同様に、Hazelcastは、分散データ構造、分散コンピューティング、分散クエリなどのさまざまな機能を提供します。この記事の目的のために、私たちは分散
マップ
に焦点を当てます。
3 Mavenの依存関係
Hazelcastは使用方法に基づいてさまざまなライブラリを提供しています。 Maven Centralのグループhttps://search.maven.org/classic/#search%7Cga%7C1%7Cg%3A%22com.hazelcast%22[com.hazelcast]の下にmavenの依存関係を見つけることができます。
この記事では、スタンドアロンのHazelcastクラスタメンバーとHazelcast Javaクライアントを作成するために必要な依存関係に焦点を当てます。
3.1. ヘーゼルキャストクラスターメンバー
以下に示すように、pom.xmlにhazelcast依存関係を追加する必要があります。
<dependency>
<groupId>com.hazelcast</groupId>
<artifactId>hazelcast</artifactId>
<version>3.7.2</version>
</dependency>
依存関係はhttps://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22com.hazelcast%22%20AND%20a%3A%22hazelcast%22[mavenセントラルリポジトリ]で利用可能です。
3.2. Hazelcast Javaクライアント
Hazelcastのコア依存関係に加えて、クライアント依存関係も含める必要があります。
<dependency>
<groupId>com.hazelcast</groupId>
<artifactId>hazelcast-client</artifactId>
<version>3.7.2</version>
</dependency>
依存関係はhttps://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22com.hazelcast%22%20AND%20a%3A%22hazelcast-client%22[mavenセントラルリポジトリで入手可能]。
4最初のヘーゼルキャストアプリケーション
4.1. ヘーゼルキャストメンバーを作成
メンバー(ノードとも呼ばれる)は自動的に結合してクラスターを形成します。この自動参加は、メンバーがお互いを見つけるために使用するさまざまな検出メカニズムによって行われます。
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<Long, String> 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
の詳細については、次のhttp://docs.hazelcast.org/docs/3.7/javadoc/com/hazelcast/core/IdGenerator.html[link]をご覧ください。
これは実際の例ではないかもしれませんが、分散マップに適用できる多くの操作の1つを示すために使用されています。後のセクションで、クラスタメンバーによって追加されたマップエントリをHazelcast Javaクライアントから取得する方法を説明します。
内部的には、Hazelcastは
map
エントリを分割し、そのエントリをクラスタメンバ間で配布および複製します。 Hazelcast
Map
の詳細については、次のURLをご覧ください。
4.3. Hazelcast Javaクライアントを作成する
Hazelcastクライアントを使用すると、クラスタのメンバーにならずにすべてのHazelcast操作を実行できます。クラスタメンバーの1つに接続し、すべてのクラスタ全体の操作をそこに委任します。
ネイティブクライアントを作成しましょう。
ClientConfig config = new ClientConfig();
GroupConfig groupConfig = config.getGroupConfig();
groupConfig.setName("dev");
groupConfig.setPassword("dev-pass");
HazelcastInstance hzClient
= HazelcastClient.newHazelcastClient(config);
クラスターにアクセスするためのデフォルトのユーザー名とパスワードは
dev
と
dev-pass
です。 Hazelcastクライアントの詳細については、次のhttp://docs.hazelcast.org/docs/3.7/manual/html-シングル/index.html#hazelcast-java-client[link]を参照してください。
4.4. Javaクライアントからの分散
Map
へのアクセス
次に、先ほど作成した分散
Map
にアクセスします
__.
分散
Map.
にアクセスするには、先に作成した
HazelcastInstance__のインスタンスが必要です。
IMap<Long, String> map = hzClient.getMap("data");
...
これで、クラスタのメンバにならなくても
map
で操作を実行できます。たとえば、クラスタメンバーによって追加されたマップエントリを反復処理してみましょう。
for (Entry<Long, String> entry : map.entrySet()) {
...
}
5ヘーゼルキャストの設定
このセクションでは、宣言的(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クラスタを設定しましょう。
<?xml version="1.0" encoding="UTF-8"?>
<hazelcast xsi:schemaLocation=
"http://www.hazelcast.com/schema/config hazelcast-config-3.7.xsd"
xmlns="http://www.hazelcast.com/schema/config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<network>
<port auto-increment="true" port-count="20">5701</port>
<join>
<multicast enabled="false">
</multicast>
<tcp-ip enabled="true">
<member>machine1</member>
<member>localhost</member>
</tcp-ip>
</join>
</network>
</hazelcast>
プログラムによる設定
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ポートをバインドしようとします。上記の例で、portの値を5701に設定し、ポート数を20に制限した場合、メンバーがクラスタに参加しているときに、Hazelcastは5701と5721の間のポートを見つけようとします。
1つのポートのみを使用したい場合は、
auto-increment
を次のように設定して、ポートの自動インクリメント機能を無効にすることができます。
5.2. 管理センターの設定
管理センターを使用すると、クラスタの全体的な状態を監視できます。また、データ構造を詳細に分析および参照したり、マップ構成を更新したり、ノードからスレッドダンプを取得したりできます。
Hazelcast Management Centerを使用するには、
mancenter-version
.
war
アプリケーションをJavaアプリケーションサーバー/コンテナにデプロイするか、またはコマンドラインからHazelcast Management Centerを起動します。最新のHazelcast ZIPはhttp://www.hazelcast.org/download/[hazelcast.org]からダウンロードできます。 ZIPには
mancenter-version
.
war
ファイルが含まれています。
WebアプリケーションのURLを
hazelcast.xml
に追加することで、Hazelcastノードを設定できます。
宣言型設定を使用して管理センターを設定しましょう。
<management-center enabled="true">
http://localhost:8080/mancenter
</management-center>
プログラムによる設定
ManagementCenterConfig manCenterCfg = new ManagementCenterConfig();
manCenterCfg.setEnabled(true).setUrl("https://localhost:8080/mancenter");
6. 結論
この記事では、Hazelcastについての紹介概念について説明しました。詳しくはhttp://docs.hazelcast.org/docs/3.7/manual/html-single/index.html[リファレンスマニュアル]をご覧ください。
あなたはこの記事のソースコードを見つけることができますhttps://github.com/eugenp/tutorials/tree/master/hazelcast[over on GitHub]。