7

ジャーナリングのステップに関するディスラプターの最も一般的な(または推奨される)実装について興味がありました。そして、私の最も一般的な質問は次のとおりです。

  • それが実際にどのように実装されているか(例によって)?
  • JPAを使用するのは賢明ですか?
  • どのDBが一般的に使用されていますか(ディスラプターを使用してプロジェクトをすでに実装しているコミュニティによって)?
  • (EventProcessorsの)中間ハンドラーで使用するのが賢明なので、ビジネスロジックプロセスの前後ではなく、各メッセージの状態を保存する必要がありますか?

ちなみに(申し訳ありませんが、これはジャーナルの手順とは関係ありません)、eventHandlerプロセス中にRingBufferからメッセージを削除する正しい方法は何ですか(メッセージがデッド/期限切れであり、によって削除する必要があると仮定します)手順全体)。DeadLetterChannelパターンに似たものを考えていました。

乾杯!

4

1 に答える 1

5

Disruptorは通常、低遅延、高スループットの処理に使用されます。たとえば、数百マイクロ秒の一般的な遅延を伴う数百万のメッセージ。適度に制限された遅延でこの種の更新レートを処理できるデータベースはほとんどないため、ジャーナリングは多くの場合、2番目(または3番目)のシステムへのレプリケーションを使用してrawファイルに対して実行されます。

レポートの目的で、システムはこのファイルを読み取るか、メッセージをリッスンし、データベースを可能な限り迅速に更新しますが、これはクリティカルパスから除外されます。

すべてのイベントプロセッサがエントリを処理すると、リングバッファのエントリは無効になります。


メッセージが使用するスロットは、すべてのイベントプロセッサがメッセージとその前のすべてのメッセージを処理するまで使用できません。メッセージの削除は、パフォーマンスと設計への影響の両方の点でコストがかかりすぎます。

すべてのイベントプロセッサはすべてのメッセージを確認します。これは同時に発生するため、これを行うのにほとんどコストはかかりませんが、結果としてイベントプロセッサがメッセージを無視するのはごく普通のことです。(おそらくほとんどのメッセージ)

于 2012-09-06T08:00:15.597 に答える