2

Java サービスでフェイルオーバーの問題を解決する方法について、いくつかのアイデアを探しています。

大まかに言うと、このサービスは別のサービスから 3 つの個別のオブジェクト ストリームのデータを受信し、いくつかの融合ロジックを実行してから、データストアに書き込みます。

ストリーム内の各オブジェクトには一意のキーがあります。3 つのストリームからのデータは同時に到着する可能性があり、順序は保証されません。

データが到着すると、BlockingQueue や ConcurrentHashMap などの java.util.concurrent コレクションに格納されます。

問題は、このサービスがフェールオーバーをサポートする必要があることです。データがメモリ内オブジェクトに格納されているときにフェールオーバーが発生した場合、これを解決する方法がわかりません。

私が持っている1つの簡単なアイデアは次のとおりです。

  1. オブジェクトを受信するとき、およびキューに追加する前に、ファイル/他の場所に書き込みます
  2. オブジェクトが最終的に処理され、データストアに格納されるとき
  3. フェイルオーバーが発生した場合、同じファイルがコピーされていることを確認し、データを受信する必要があるオブジェクトを確認します

パフォーマンスは私のサービスの大きな要素であり、IO は高価であるため、これは粗雑なアプローチのように見え、非常に単純化されています。

したがって、この問題を簡単に解決できるライブラリなどがあるかどうか疑問に思っています。

4

1 に答える 1

1

Java Chronicleを使用するのは、それを書いたという理由もありますが、ほとんどの場合...

  • テキストまたはバイナリ形式で、1秒あたり数百万のエントリをディスクに書き込んだり読み取ったりすることができます。
  • プロセス間で共有できます。たとえば、サブマイクロ秒の遅延を伴うアクティブ-アクティブクラスタリング。
  • データをプッシュするためにシステムコールやフラッシュは必要ありません。
  • プロデューサーは、GB先(マシンの合計メモリよりも多い)になる可能性のあるコンシューマーによって遅くなることはありません。
  • 低ヒープのGCレスおよびロックレスの方法で使用できます。
于 2012-10-15T14:00:34.357 に答える