次のシナリオでのベストプラクティスについて質問があります。
要件
2つのステップがある毎日のプロセスがあります:
最初のステップは軽量で、単一のアプリケーションでのみ実行できます。そうしないと、重複するクエリが実行されます。その後、ジョブをアプリケーションクラスター全体に分散できます。
質問
クラスタ内の1つのアプリケーションのみが最初のステップを実行するように強制するにはどうすればよいですか?
アイデア
あなたの2つのステップはほとんど無関係のように私には思えます。それらの間にはデータフローの依存関係がありますが、すでに別々に実行することを計画しています。したがって、メッセージキューを介して通信する完全に別個のプロセスにします。
これは基本的に、ソリューション2と3の中間です。クラスターで構成収集ジョブをスケジュールすることはできます。長期的には、すべてのプロセスを均一にデプロイする方が簡単になる可能性があります。この構成ジョブはほとんどの時間アイドル状態になるため、専用のクラスターノードは必要なく、ごくわずかなリソースしか消費しません。
メッセージキューの構成方法によっては、ソリューション2を直接実装することはお勧めできません。 1:nまたはn:1キューは、「すべてのプロセスがメッセージを書き込むことができ、すべてのプロセスがメッセージを受信する必要がある」アーキテクチャに必要なn:mキューよりもはるかに単純なデータフローを提供します。