LMAX ディスラプターパターンでは、マスター ノードからスレーブ ノードに入力イベントをレプリケートするためにレプリケーターが使用されます。したがって、セットアップはおそらく次のようになります。
マスター ノードのレプリケータは、イベントを DB に書き込みます (DB に書き込むよりも優れたメカニズムを考えることができますが、問題のステートメントにはあまり重要ではありません)。スレーブ ノードのレシーバーは、DB から読み取り、イベントをスレーブ ノードのリング バッファーに配置します。
スレーブ ノードの出力イベントは無視されます。
ここで、マスター ノードのビジネス ロジック プロセッサがスレーブ ノードのビジネス ロジック プロセッサよりも遅くなる可能性があります。たとえば、マスタ ノードの BL はスロット 102 にあり、スレーブ ノードはスロット 106 にある可能性があります (これは、ビジネス ロジック プロセッサの前にリプリケータがリング バッファからイベントを読み取るために発生する可能性があります)。
このようなシナリオでは、マスター ノードに障害が発生し、スレーブ ノードがマスター ノードになると、外部システムがいくつかの重要なイベントを見逃す可能性があります。これは、スレーブ ノードとして機能していたノード 2 の出力が無視されるために発生する可能性があります。
Martin Fowler は、レプリケーターの仕事はノードの同期を維持することであると述べています。
しかし、ビジネス ロジック プロセッサの同期を維持する方法がわかりません。何か案は?