現在、15 分ごとに実行されるバッチ駆動のプロセスがあり、実行するたびにこのサイクルが数回繰り返されます。
- sproc を呼び出し、DB からデータを取得します
- データを処理する
- 結果をDBに保存します
データは多数のフィールドによって分離されており、データの各グループは処理中に異なる動作を必要とするため (フロントエンドから構成可能)、すべてのデータを一度にロードすることはできません。ただし、最近のビジネスの変化により、一部のグループのデータ量が急激に急増したため (したがって、必要な処理時間も長くなりました)、現在ではグループの 1 つがオーバーランすると、他のすべてのグループが遅延します。
私たちの計画は、このプロセスを複数のマシンで並列化して、次のようにすることです。
- 中央コントローラー (マスター) と複数のワークステーション (スレーブ) があります。
- マスターは実行のスケジューリングを担当します (フロントエンドから構成可能)
- マスター (または別のコンポーネント) は、DB との間でデータのロード/保存を担当します (複数のスレーブ間のデッドロック/競合を回避するため)
- スレーブは作業項目を受け取り、それらを処理し、結果をマスターに返します
- 通常、すべての作業項目を受け取るプライマリ スレーブ (私たちの環境のメイン プロダクション サーバー) があります。
- セカンダリ スレーブは、プライマリ スレーブがより長い処理時間を必要とするグループで作業している場合にのみ作業を受け取ります (マスターは、返されたデータのサイズに基づいてこれを識別できます。または、構成に任せることもできます)。
- 処理中にスレーブが例外をスローした場合、アラート メールがサポート チームに送信され、次のスケジュール サイクルで同じ作業項目が取り上げられます。
- タイムアウトをどうするかまだわからない
分散環境のマスター/スレーブ パターンについて調査しましたが、これまでのところ多くの参考資料が見つかりませんでした。そのようなパターンの適切な実装を知っている人はいますか? そのようなアーキテクチャの潜在的な落とし穴についてのポインタも大歓迎です!
ありがとう、