1

マルチテナントの Azure アプリケーションがあり、多くの異なるジョブがキューに入れられている可能性があります。各ジョブは、キューに格納されている多くの個別のタスクで構成されています。

ユーザーの理由と技術的な理由の両方から、特定のジョブが多くの作業を消費するべきではありません:

ユーザー: 長い間進捗が見られない大規模なジョブの背後で、ユーザーが立ち往生することを望まない技術: タスクの処理には、ネットワーク上の限られたリソースにアクセスすることが含まれます。たとえば、同時接続数は 10 までしかありませんが、最終的にその接続が必要になる何千ものタスクがあります。

もう少し複雑にするために、一部のジョブは同じリソースを消費するという点で「関連」しているため、10 個のワーカーの制限はそれらのジョブ全体である必要があります。

現在、ジョブごとに個別のキューを使用していますが、これは問題なく動作しますが、それらを作成してオンザフライでクリーンアップする必要があり、ワーカーが適切なキューを見つけるためのキューのキューを用意する必要があります

また、これにより、関連するジョブを実行することが困難/不可能になります。

これに適した設計パターンはありますか?

4

1 に答える 1

0

ここでは、検討したい設計パターンを示します。単一のキューを使用することでアーキテクチャのシンプルさと低コストをサポートし、すべてのタスクをキューに入れることで安全にフェイルオーバーします。

すべてのメッセージに対して単一のキューを使用します。複数のメッセージ タイプをサポートするワーカー スロットリングとキューに関するアイデアについては、このエントリ (私の回答を含む) を参照してください。 実世界で複数のキューから読み取る方法は?

それぞれが複数のタスクを持つ複数のジョブとしてプロセスを説明しました。

  • ジョブ (メッセージ) をキューに追加してキューに入れます。

  • ジョブ メッセージ プロセッサは、最初のタスクを実行し、後続のタスク (メッセージ) をキューに追加してから、最初のジョブ (メッセージ) を削除します。このパターンにより、マシンのリサイクルでもジョブ/タスクが失われることはありません。(すべてのタスクがべき等であると仮定し、必要とします)。

  • 後続のタスク プロセッサは、タスクがなくなるまで基本的に同じことを行います。

  • タスクがキュー メッセージの可視性
    タイムアウトよりも時間がかかる場合は、可視性を延長し続けます。
    参考:データを投稿せずに Azure キュー メッセージの非表示タイムアウトを変更することはできますか?

于 2012-06-23T02:30:46.790 に答える