2

2 つのワーカー ロールを持ち、Web ロールを持たない Azure アプリケーションを構築したいと考えています。worker ロールが最初に起動するとき、ロールの 1 つだけが次のことを 1 回だけ実行するようにします。

  • マスター ファイルをダウンロードして解析し、マスター ファイルの内容に基づいて複数の「子」タスクをキューに入れます。
  • 単一のマスター ファイル ダウンロードの「子」タスクをキューに追加して、翌日実行する

その後、「子」タスクのそれぞれは、タスク キューが使い果たされるまで、両方のワーカーによって実行されます。すべてを「ポンプのプライミング」と考えてください

Web ロールを呼び出してキューに最初の「マスター」タスクを手動で追加すれば、この種の作業は非常に簡単ですが、自動開始モードでは非常に難しいようです。

この点で何か助けていただければ幸いです。

ありがとう.....

4

2 に答える 2

2

1 つの可能性: Web ロールを呼び出す代わりに、キューを直接ロードするだけです。(これは、何らかの作業を行うために自動的にスピンアップしてから再びシャットダウンしたいようなアプリケーションのように思えます...自動化する場合は、キューのロードも自動化するのは簡単です。)

(おそらく) より良いオプション: ある種のロック メカニズムを使用して、1 つのワーカー インスタンスのみが初期化作業を行うようにします。これを行う 1 つの方法は、キュー (または BLOB、またはテーブル内のエンティティ) を作成することです。すでに存在する場合は、他のインスタンスが初期化を処理しています。作成が成功した場合、それはこのインスタンスの仕事です。

初期化を実行しているインスタンスが失敗した場合に備えて、ロックよりもリースを使用する方が常に良いことに注意してください。タイムアウトの使用を検討してください (たとえば、テーブル ストレージ、BLOB のメタデータ、またはキューの名前にタイムスタンプを保存するなど)。

于 2009-10-21T17:21:20.883 に答える
2

まったく同じ種類の問題が発生したため、O/C マッパー(オブジェクトからクラウドへ) を導入しました。基本的に、次の 2 種類のクラウド サービスを導入する必要があります。

  1. 利用可能な場合はいつでもメッセージを消費する QueueService。
  2. スケジュールに基づいて操作をトリガーする ScheduledService。

次に、他の人が示唆したように、クラウドでは、一時的なハードウェア (またはインフラストラクチャ) の問題が原因でクラウド アプリが永久にフリーズするのを避けるために、ロックではなくリースを使用することを本当に好みます。

于 2009-10-30T10:47:30.367 に答える