Java サービスでフェイルオーバーの問題を解決する方法について、いくつかのアイデアを探しています。
大まかに言うと、このサービスは別のサービスから 3 つの個別のオブジェクト ストリームのデータを受信し、いくつかの融合ロジックを実行してから、データストアに書き込みます。
ストリーム内の各オブジェクトには一意のキーがあります。3 つのストリームからのデータは同時に到着する可能性があり、順序は保証されません。
データが到着すると、BlockingQueue や ConcurrentHashMap などの java.util.concurrent コレクションに格納されます。
問題は、このサービスがフェールオーバーをサポートする必要があることです。データがメモリ内オブジェクトに格納されているときにフェールオーバーが発生した場合、これを解決する方法がわかりません。
私が持っている1つの簡単なアイデアは次のとおりです。
- オブジェクトを受信するとき、およびキューに追加する前に、ファイル/他の場所に書き込みます
- オブジェクトが最終的に処理され、データストアに格納されるとき
- フェイルオーバーが発生した場合、同じファイルがコピーされていることを確認し、データを受信する必要があるオブジェクトを確認します
パフォーマンスは私のサービスの大きな要素であり、IO は高価であるため、これは粗雑なアプローチのように見え、非常に単純化されています。
したがって、この問題を簡単に解決できるライブラリなどがあるかどうか疑問に思っています。