私は現在、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()
ストアに存在するすべてのキー値をロードするだけで実装します。
つまり、両方のインスタンスが 6 つのエントリをロードして処理する可能性があるということでしょうか (その結果、処理が重複します)。それとも、ロードがクラスター内で 1 回だけ行われるように、同期された方法で処理されますか?
On server startup I need to process the pending entries
(もしあれば)。データがロードされていることがわかりますが、entryAdded イベントは発生しません。entryAdded イベントを発生させるにはどうすればよいですか (または、起動時に保留中のエントリがあることを知るための他のエレガントな方法)?
提案を求めています。
ありがとう、スタヌ