10

Windows Azure でホストする予定の Web サイトを開発しています。サイトは、日次/週次のスケジュールされたジョブを実行し、さまざまなサードパーティ データ ソースと同期し、ユーザー通知を送信する必要があります。また、ユーザーへの電子メールの送信など、オンデマンドの非同期タスクも実行できる必要があります。

私が最初に考えたのは、Azure Cloud Services を使用してこれをホストし、MVC 4 を実行する 1 つの Web ロールと 1 つのワーカー ロールの両方で、スケジュールされたタスクを処理し、キュー ストレージから非同期タスク (電子メールの送信など) をプルすることでした。ただし、計算時間に対して 2 倍の料金を支払う必要があることを考えると、これには費用がかかります。

このプロジェクトは、将来このコストを正当化するかもしれませんが、ビジネスが回復する前に、より安価な代替案を希望します. そのため、Azure Web サイトを調べています。

MVC サイトに Azure Web サイトを使用し、タスクを実行するワーカー ロールを持つことで、コストを半分に削減できましたが、管理モジュールから手動でトリガーする明白なオプション以外に、他の代替案についても知りたいです。

また、Azure Web サイトを使用して、サイトを自分のドメインに接続し、ssl を無料で使用できますか?

4

7 に答える 7

5

Azure には最終的に適切なスケジューリングが組み込まれているようです - Azure Scheduler のドキュメントを参照してください

これはプレビュー段階であり、おそらく今のところ REST API を使用する必要がありますが、この機能が管理ポータルで利用できるようになるまでそう遠くはないと確信しています。私はこれを何年も待っていました!

于 2013-11-07T08:12:25.230 に答える
3

node.js でのコードの記述に慣れている場合は、 をご覧くださいWindows Azure Mobile Services。スケジュールされたタスクを定義して実行する機能があります。詳細については、http: //www.windowsazure.com/en-us/develop/mobile/tutorials/schedule-backend-tasks/ を参照してください

別の代替手段として、Aditi の Scheduler Service を使用することもできます: http://www.aditicloud.com/

さらに別の方法として、独自のスケジューラを作成し、そのソリューションを Azure Web サイトでホストすることもできます。Quartz.net スケジューリング ライブラリの使用をお勧めします。無料でオープンソースであり、多くの人が使用しています。

ジョブ処理のワーカー ロール ルートを使用することは、実行可能な解決策であると今でも考えています。Windows Azure Web サイトでフロントエンド インフラストラクチャをホストし、Windows Azure キューを介してワーカー ロールと通信させることができます。極小の VM サイズでワーカー ロールの 2 つのインスタンスをホストすると仮定すると、月額約 30.00 ドル (0.02 ドル x 2 x 750 時間) かかります。少し前に、独自のタスク スケジューラを作成してワーカー ロールでホストする方法についてのブログ記事を書きました。ここでその投稿を読むことができます: http://gauravmantri.com/2013/01/23/building-a-simple-task-scheduler-in-windows-azure/

また、Azure Web サイトを使用して、サイトを自分のドメインに接続し、ssl を無料で使用できますか?

私はそうは思わない。SSL は、Windows Azure Web サイトでは無料ではありません。SSL の価格については、http ://www.windowsazure.com/en-us/pricing/details/web-sites/ をご覧ください。

于 2013-07-06T13:38:56.793 に答える
2

Timer クラスを使用して、Azure Web サイト プロジェクト内でスケジューラを実行できます。このようにして、ASP.NET MVC プロジェクト内にすべてをカプセル化できます。

Timer クラスに関する情報: http://msdn.microsoft.com/en-us/library/system.timers.timer(v=vs.110).aspx

これを Azure Web サイトの MVC プロジェクトでテストしたところ、動作することが確認できました。この設定を行うには、Global.asax.cs の Application_Start() 内でタイマーを開始します。

private Timer _timer;
protected void Application_Start()
{
    _timer = new Timer(1 * 60 * 1000); // 1 minute
    _timer.Elapsed += (sender, e) => ScheduledTask.Process();
    _timer.Enabled = true;

    // other code goes here
}

私の例では、タイマーは分ごとに ScheduledTask.Process() を呼び出します。私の ScheduledTask クラスは次のようになります。

public class ScheduledTask {

    public int Id { get; set; }
    public DateTime Time { get; set; }

    public static void Process() {

        using (var db = new ApplicationDbContext()) {
            db.ScheduledTasks.Add(new ScheduledTask {
                Time = DateTime.Now
            });
            db.SaveChanges();
        }

    }

}

Process() では、やりたいことが何でもできますが、データベースにエントリを作成して、これが機能するかどうかをテストしているだけです。このタスクを約 1 日続けます。結果は次のとおりです。

http://contactmanager1.azurewebsites.net/ScheduledTask

アップデート

これは、スケジュールされたタスクを設定する最良の方法ではないことがわかりました。これは、アプリケーション プールがタイムアウトになると (サイトのアクティビティが少ないため)、このタイマーが停止するためです。アプリケーション プールが再起動すると、タイマーは自動的に再起動しますが、ボリュームの少ないサイトでは、これは信頼できるソリューションではありません。

于 2013-11-22T16:30:32.860 に答える