1

Azure Web ロールとしてホストされている ASP.NET MVC 4 アプリがあります。私は、かなり標準的であるように思われることをしたいと考えています。VIP スワップ操作が完了したときに、VIP スワップを開始し、イベントを発生させる (またはコールバックを呼び出す) 呼び出し可能な関数を作成したいと考えています。

状況にいくつかのコンテキストを追加するだけです: 私の Web サイトは、完了するのに約 1 時間 (またはそれ以下) かかるワークフローを実装しています。新しいバージョンの Web サイト コードをリリースしたい場合、最初に現在のすべてのユーザーにワークフローを完了させて、新しいコードを処理する必要がないようにするのが便利です (つまり、「後方互換性」コードを記述する必要はほとんどありません)。以前のバージョンのコードで作成されたデータ。したがって、私の Web サイトの管理機能は、最初に新しいワークフローを無効にする値をデータベースに挿入します。その後、現在のすべてのワークフローが完了するまで待機します。次に、「VIP スワップ」ルーチンを呼び出します。最後に、VIP スワップ ルーチンが完了を知らせると、データベースの値を突いて新しいワークフローを再度有効にします。

プログラムで VIP スワップを開始する方法に関する Microsoft のドキュメントを見つけました: http://msdn.microsoft.com/en-us/library/ee460814.aspx

この手順では、マジック URL に POST し、POST にいくつかのヘッダーを含めてから、マジック URL に対して定期的に GET を実行し、応答コードをチェックします。

これについて考えれば考えるほど、それは自明ではないように思えます。バックグラウンド タイマーと完了通知を接続するという基本的な複雑さに加えて、IIS 環境でこれを実行しようとすると、どのような複雑さが発生するかわかりません。バックグラウンド スレッドで HTTP 操作を実行することはできますか? さらに言えば、.NET に組み込まれている 6 つほどの異なる "バックグラウンドで処理を行う" メカニズムのいずれかを使用しようとすると、問題が発生するでしょうか?

ヘルプやガイダンスをいただければ幸いです。特に、誰かがこの関数のすぐに使える実装を教えてくれたら嬉しいです!

4

1 に答える 1

0

ファブリック コントローラーは、ユーザーの関与なしで非常に凝った処理を行うようにセットアップされているため、これに対する簡単な解決策は見つからないと思います。インスタンスを下から引き出すことができるクラウド コンピューティング環境で 1 時間のワークフローを実行するには (クリーンアップのために OnStopping イベントが呼び出されてから最大 5 分間)、他の作業を行う必要があります。すべてのタスクが完了します。

簡単な質問は、「ワークフローがまだ実行されているときにインスタンスがダウンした場合はどうするか」です。それらを再起動しますか、それとも失われますか? それらが失われたとしても、とにかく気にしないので、アップグレードのためにワークフローを強制終了することは同様に重要ではありません. それらを再起動する場合は、同じメカニズムを使用してノードをシャットダウンするかどうかを決定し、それに応じてジョブを分散します。このパターンは、Hadoop JobTrackerに不気味なほど似ています。'ol インスタンスでワークフローを実行しないでください。何をすべきかを決定する(ジョブトラッカー)サービスにそれらを送信します。次に、(ジョブ トラッカー) サービスは、サービス管理 API を使用して、必要なバージョンを実行するために必要な数のインスタンスをスケールアップし、適切なノードでワークフローを実行し、不要になった場合や古くなった場合にそれらをシャットダウンできます。

残念ながら、これはあなたが探している単純なソリューションではないかもしれませんが、PaaS を現在のアプローチに合わせようとするのではなく、アーキテクチャの何かを変更する必要があります。ワークロードを分解し、疎結合サービスを作成し、障害に備えて設計し、その他のいくつかのクラウド/分散コンピューティング プラクティスを検討する必要があります。Hadoop がこのように構築されているのには理由があります。また、Hadoop は、信頼性の低いコモディティ ハードウェアの束で作業を完了できるという定評があります。

于 2013-03-26T22:09:27.517 に答える