1

一部のWebサイトのコンテンツを取得してBLOBストレージに保存するWebクローラーを作成したいと思います。Azureでそれを行う正しい方法は何ですか?ワーカーロールを開始し、Thread.Sleepメソッドを使用して1日1回実行する必要がありますか?

また、このワーカーロールを使用する場合、2つのインスタンスを作成するとどのように機能するのでしょうか。「ComputeEmulatorUI」を使用すると、コマンド「Trace.WriteLine」が両方のインスタンスで同時に機能することに気付きました。誰かがこの点を明確にできますか。

phpを使用して同じクローラーを作成し、cronジョブを設定して1日1回スクリプトを開始しましたが、コンテンツ全体を取得するのに6時間かかったため、Azureを使用します。

4

3 に答える 3

4

これは正しい方法です。2014年1月の時点で、MicrosoftはAzure WebJobsを導入しました。このプロジェクトでは、プロジェクト(コンソールなど)を作成し、スケジュールされたタスク(1回の発生、繰り返し)として実行できます。

https://azure.microsoft.com/en-us/documentation/articles/web-sites-create-web-jobs/ http://www.hanselman.com/blog/IntroducingWindowsAzureWebJobs.aspx

于 2016-01-02T05:37:41.807 に答える
1

ワーカーの役割は基本的にWindows2008Serverであることを考えると、オンプレミスで実行するのと同じコードを実行できます。

ただし、ロールインスタンスが再起動する理由はいくつかあることを考慮してください。OSの更新、クラッシュなどです。これらの場合、実行中の作業が失われる可能性があります。だから...あなたはいくつかの方法でこれを扱うことができます:

  • 列。コマンドキューにメッセージを配置します。1日1回のタスクの場合は、前のメッセージの処理が完了したら、メッセージをキューにプッシュするだけです。メッセージに非表示タイムアウトを設定できるため、1日は表示されないことに注意してください。処理中に障害が発生した場合、メッセージはキューに再表示され、別のインスタンスがそれを取得できます。進行中にメッセージを変更して、ステータスを追跡することもできます。
  • スケジューラ。(ミューテックスを介して)実行されているインスタンスが1つだけであることを確認してください。これを行う簡単な方法は、blobで書き込みロックを取得しようとすることです(1つしか存在できません)。

考慮すべきことの1つは、Webクロールを個別のタスク(URL?)に分割し、それらを個別にキューに配置することです。これにより、複数のインスタンス、または場合によっては同じインスタンス内の複数のスレッドをスケーリングして実行できます(CPUと帯域幅を大量に消費する操作ではなく、Webクロールがブロック操作になる可能性が高いため)。

于 2012-05-31T19:55:37.753 に答える
0

1日に1回実行される単一のワーカーの役割は、おそらく最良のアプローチです。ただし、スレッドスリープは使用しません。インスタンスを再起動してから、プログラミングに応じて、1日前または1日より後に開始する場合があるためです。タスクコマンドをメッセージとしてAzureキューに配置し、ワーカーロールによって取得されたらデキューしてから、新しいタスクコマンドをAzureキューに1回追加するのはどうでしょうか。

于 2012-05-31T19:55:12.187 に答える