Hazelcast を使用してクラスター内で互いに共有する 2 つのインスタンスで Java タスクを実行したいと考えています。そのため、タスクは単一のインスタンスで実行するよりも速く完了できます。助けてください!
1 に答える
あなたの問題は、あなたが投稿した質問からはあまり明確ではありません。あなたの大きな仕事は、次のいずれかをしているかもしれません。
- hazelcast 分散データ構造に格納された処理データ (大量のデータ)。
- hazelcast からのデータが制限されているか、まったくない数値処理 (CPU 負荷の高い) 操作。
どちらの場合も、hazelcast で ExecutorService の分散実装を利用できます。以下のリンクを参照してください。
http://docs.hazelcast.org/docs/3.5/javadoc/com/hazelcast/core/IExecutorService.html
ケース 1) の場合、hazelcast はデータを複数のノード (インスタンス) に分割するため、次のように executeOnKeyOwner() メソッドを呼び出すことで、キーの所有者でタスクを実行できます。
サンプルコード
HazelcastInstance hz = Hazelcast.newHazelcastInstance();
Map<Integer, String> map = hz.getMap("yourMap");
for (int key = 0; key < 100; key++)
map.put(key, "someValue");
IExecutorService executor = hz.getExecutorService("executor");
for (Integer key : map.keySet())
executor.executeOnKeyOwner(new YourBigTask(), key);
YourBigTask は、 run() メソッド内で必要な処理を実装Runnable
およびインターフェイスし、実行する「大きなタスク クラス」です。Serializable
内部で hzinstance を使用する必要がある場合は、同様run()
に実装HazelcastInstanceAware
します。
ケース 2) の場合は、単に呼び出すことができます
executor.executeOnAllMembers(new YourBigTaskClass());
これにより、既知のすべてのクラスター メンバーでタスクが実行されます。
お役に立てれば。IExecutorService
他の方法を検討し、問題に最も適した方法を使用することをお勧めします。