1

現在、15 分ごとに実行されるバッチ駆動のプロセスがあり、実行するたびにこのサイクルが数回繰り返されます。

  1. sproc を呼び出し、DB からデータを取得します
  2. データを処理する
  3. 結果をDBに保存します

データは多数のフィールドによって分離されており、データの各グループは処理中に異なる動作を必要とするため (フロントエンドから構成可能)、すべてのデータを一度にロードすることはできません。ただし、最近のビジネスの変化により、一部のグループのデータ量が急激に急増したため (したがって、必要な処理時間も長くなりました)、現在ではグループの 1 つがオーバーランすると、他のすべてのグループが遅延します。

私たちの計画は、このプロセスを複数のマシンで並列化して、次のようにすることです。

  • 中央コントローラー (マスター) と複数のワークステーション (スレーブ) があります。
  • マスターは実行のスケジューリングを担当します (フロントエンドから構成可能)
  • マスター (または別のコンポーネント) は、DB との間でデータのロード/保存を担当します (複数のスレーブ間のデッドロック/競合を回避するため)
  • スレーブは作業項目を受け取り、それらを処理し、結果をマスターに返します
  • 通常、すべての作業項目を受け取るプライマリ スレーブ (私たちの環境のメイン プロダクション サーバー) があります。
  • セカンダリ スレーブは、プライマリ スレーブがより長い処理時間を必要とするグループで作業している場合にのみ作業を受け取ります (マスターは、返されたデータのサイズに基づいてこれを識別できます。または、構成に任せることもできます)。
  • 処理中にスレーブが例外をスローした場合、アラート メールがサポート チームに送信され、次のスケジュール サイクルで同じ作業項目が取り上げられます。
  • タイムアウトをどうするかまだわからない

分散環境のマスター/スレーブ パターンについて調査しましたが、これまでのところ多くの参考資料が見つかりませんでした。そのようなパターンの適切な実装を知っている人はいますか? そのようなアーキテクチャの潜在的な落とし穴についてのポインタも大歓迎です!

ありがとう、

4

1 に答える 1

0

上記のマスター/スレーブの設計は、データベースへの書き込みがとにかくシリアル化されることを意味しているようです。したがって、現在のプロセスの複数のコピーを並行して実行し(たとえば、ジョブごとに新しいプロセスをフォークすることによって)、共有アプリケーションロック?

于 2009-11-19T10:52:16.617 に答える