複数のインスタンスにWebロールをデプロイし、1つのインスタンスでのみ実行するタスクをスケジュールする必要がある場合(サイトに電子メールを送信するなど)いくつかの統計情報を持つ管理者)、どれだけ信頼できるのですか?でIdが終了した場合にのみ実行するように、1つのインスタンスでタスクを実行するには、RoleEnvironment.CurrentRoleInstance.Id
を使用するのがどれくらい信頼できますか? 誰でもこれをやったことがあれば、彼のフィードバックに興味があります。CurrentRoleInstance.Idを使用して1つのインスタンスでタスクを実行
答えて
インスタンスからタスクを切り離すように、いくつかのより多くの作業が必要になることがあります。インスタンス0が再起動した場合(少なくとも月に1回)スケジューラまたはタスクランナーがオフラインです。
代わりの解決策は、インスタンスにまたがるタイプのミューテックスを使用することです。私が考えているのは、ブロブリースです。あなたは実際に書面のためにブロブのリースを取得することができます(そしてリースホルダは1つしかないかもしれません)。あなたは、タスクを実行する前にBLOBリースを取得しようとする可能性があります。あなたがそれを取得した場合は、タスクを実行します。そうしないと、実行しないでください。
多少の違い:スレッド(Run()
メソッドから開始してみましょう)では、リースを取得しようとします。成功した場合は、スケジューラタスク(多分スレッドまたは何か)を起動します。リースを取得できない場合は、1分間寝てからもう一度お試しください。最終的に、リースのインスタンスが再起動されます(または、何らかの理由で消滅します)。数秒後、別のインスタンスが放棄されたリースを取得し、新しいスケジューラタスクを開始します。
Steve Marxは、リースを使用して並行性についてblog postと書いています。タイラーDoerksenはまた、リースについてgood postを持っています。 specificaly
<Startup>
<Task commandLine="StartUpTasks\WindowService\InstallWindowService.bat" executionContext="elevated" taskType="background" >
<Environment>
<Variable name="InstanceId">
<RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/@id"/>
</Variable>
</Environment>
</Task>
</Startup>
を必要に応じて
複数のインスタンスがある場合は、実行中のロールインスタンスのIDを確認するなどして、実行ブロックのブロックを1回だけ実行することができます。
は、あなたは他のソリューションと同じ結果を得ることができますが、それらは私がインスタンスIDを使用することはありません
はい、あなたはそれが形にこの
%InstanceId%
のようなバッチファイルで
<deployment Id>.<Application Name>.<Role Name>_IN_<index>
Example mostly MyRole_IN_0, MyRole_IN_1
アクセスenvironmet変数を以下のものであろうのInstanceIdを使用することができます続いて_の部分文字列または最後のインデックスを使用してInstanceIdからインデックスを取得します。 インデックス0のこのインスタンスが再起動しても同じインデックスを持つ場合。返信用
詳細 http://blogs.msdn.com/b/cclayton/archive/2012/05/17/windows-azure-start-up-tasks-part-2.aspx
http://msdn.microsoft.com/en-us/library/windowsazure/hh404006.aspx
- 1. スプリング・ブート・マイクロサービス・アーキテクチャーを使用して1つのインスタンスを実行する方法
- 2. 1つのEC2インスタンスで複数のECSインスタンスをElastic beanstalkを使用して実行する
- 3. C#のタスク並列ライブラリを使用してプロセッサごとに1つの並列タスクを実行
- 4. 1つの実行時インスタンスでJavaプログラムを実行する
- 5. アンドロイドでは、1つのタスクはデバイスのすべてのコアを使用して実行されるか、1つだけが実行されますか?
- 6. sgeは1つのノードで1つのタスクしか実行できません
- 7. DBMS_SCHEDULER repeat_intervalを使用して、2日に1回タスクを実行します。
- 8. gradleタスクを使用してメインメソッドなしでgroovyクラスファイルを実行
- 9. ハッシュマップルックアップを使用してJSPでタスクを実行します。
- 10. 1つのタスクの出力をもう1つの入力として使用
- 11. Parallel.ForEachは最後に1つのタスクを実行します
- 12. スプリングクラウドストリームを使用してタスクを実行できません
- 13. 複数のタスクを1つずつデータベースに実行する
- 14. JSPはJARのインスタンスを1つしか実行しません
- 15. 1つのタスクでextプロパティを設定し、別のタスクで使用する
- 16. 1つのApp - >複数のDockerインスタンスを1つのEc2で実行
- 17. 汎用ファクトリメソッドを1つ使用してインスタンスを作成する
- 18. 非同期タスクを1つずつ実行する
- 19. awsインスタンスでfogを使用してbashコマンドを実行
- 20. Spotインスタンスを使用してCloudFormを使用してRollingUpdateを実行します。
- 21. つぶやきタスクを使用してウェブサイトを実行する方法
- 22. 1つのページで実行している2つのnivoスライダーのインスタンスに異なるスタイルを適用する
- 23. idごとに1つの実行インスタンスを持つAkkaルーティングメッセージ
- 24. SSISを使用して1つのインスタンスから別のインスタンスへのデータベースカタログのコピー
- 25. MAMPを使用してMySqlの複数のインスタンスを実行
- 26. スパークデシジョンツリーのフィットが1つのタスクで実行される
- 27. 1つのスクリプトでテンポラリテーブルを使用して複数の命令を実行
- 28. 1つ前のSSISタスクが失敗した後に1つのSSISタスクが実行される
- 29. セロリビートを使用して複数のタイミングでタスクをスケジューリングしますが、タスクは1回だけ実行します(ランダムパラメータを使用)
- 30. 実行可能なプレイブックから1つのタスクとハンドラを実行する
おかげで、私はすでにsmarxのブログ記事を通り抜けました。それでも、インスタンスが再起動されたことについて完全にはわかりません。再起動後も、同じインスタンスIDを持つことになります。 もしそうなら、タスクが実行されるべきときに再起動される状況に対処することができます(たとえば、再起動直後に実行することによって)。 – ThomasWeiss
私の主張は、常にスケジューラを実行したいということです。特定のインスタンスに依存する場合は、ダウンタイムが発生することが保証されます。また、*縮めるとどうなりますか?削除するインスタンスを指定することはできません。削除されたインスタンスが常に参照するインスタンスの場合はどうなりますか? –
真。そのBLOBリースオプションを実装します。ありがとう。 – ThomasWeiss