3

私は現在、POCを開発するために を行っていdistributed, fault tolerant, ETL ecosystemます。Hazelcast私は自分の目的のために選択しましたclustering (data+notification)。Hazelcast リソースをグーグルで検索すると、このリンクにたどり着きました。これは、地図ベースのソリューションを使用して、私が考えていた方法と正確に一致します。

1つの点を理解する必要があります。その前に、私たちのアーキテクチャの標準的な考えを述べさせてください。

と言うwe have 2 nodes A,B running our server instance clustered through hazelcast。それらの 1 つは、リクエストを受け入れるリスナーです (ただし、フェイルオーバー時に変更される可能性があります)、たとえば A.

A はリクエストを取得し、それを分散マップに配置します。このマップは、永続ストアによってサポートされるライトスルーであり、単一のメモリ バックアップがノードで構成されます。

各インスタンスにはローカル マップ エントリ リスナーがあり、エントリがイベントを追加(asynchronous/queuing)すると、そのエントリが処理され、分散マップから削除されます。

これは期待どおりに機能しています。

質問:

10 個のリクエストが受信され、各ノードに 5 個ずつ配布されたとします。各ノードで 2 つのエントリが処理され、両方のインスタンスがクラッシュしました。

したがって、現在、バッキング データストアには合計 6 つのエントリが存在します。

次に、両方のインスタンスを起動します。ドキュメントによると - "As of 1.9.3 MapLoader has the new MapLoader.loadAllKeys API. It is used for pre-populating the in-memory map when the map is first touched/used"

loadAllKeys()ストアに存在するすべてのキー値をロードするだけで実装します。

  1. つまり、両方のインスタンスが 6 つのエントリをロードして処理する可能性があるということでしょうか (その結果、処理が重複します)。それとも、ロードがクラスター内で 1 回だけ行われるように、同期された方法で処理されますか?

  2. On server startup I need to process the pending entries(もしあれば)。データがロードされていることがわかりますが、entryAdded イベントは発生しません。entryAdded イベントを発生させるにはどうすればよいですか (または、起動時に保留中のエントリがあることを知るための他のエレガントな方法)?

提案を求めています。

ありがとう、スタヌ

4

1 に答える 1

1
  1. 初期化時に loadAllKeys() が呼び出され、永続ストア内の 6 つのキーすべてが返されます。次に、各ノードはそれが所有するキーを選択し、それらのみをロードします。したがって、A は 2 つのエントリをロードし、B は残りの 4 つのエントリをロードします。

  2. store.load はエントリ リスナーを起動しません。これはどうですか: 初期化の直後、リスナーを登録した後、localEntries を取得して既存のものを処理できます。

于 2013-03-14T12:32:52.080 に答える