複数のワーカー ロールが同じインスタンスで実行されるように Windows Azure をセットアップするにはどうすればよいですか? 出来ますか?
3 に答える
Worker Role とは何かを誤解していると思います。Web ロールと Worker ロールは Window Server VM です。主な違いは、Web ロールでは IIS が実行されていることです。それぞれのインスタンスが複数ある場合があります。
「同じインスタンスに複数のワーカー ロール」というものは実際にはありません。Worker ロールは、仮想マシンのテンプレートと考えてください。スタートアップ スクリプトと、スタートアップやシャットダウンなどのメッセージを処理するイベント処理コードと、パッケージ化されて仮想マシン内で実行される記述したコードが含まれます。
OnStart()
またはから、Run()
ほとんどすべてのコードを実行できます。複数のスレッドを開始し、サーバー コード (Tomcat など) を実行します。どのようなコードでも、各インスタンスで実行されます。複数のインスタンスにスケールアウトすると、これらの各インスタンスで同じ VM テンプレートが使用されます。
こちらの回答もご覧ください。もう少し詳しく説明します。
デビッドが彼の答えで述べたように、あなたは複数のスレッドを開始することができます。私の顧客の1人は、ThreadedRoleEntryPointクラスを使用してこれを行いました。
このクラスを使用すると、(複数のアセンブリからでも)複数のワーカーロールエントリポイントクラスを使用して、それらを同じロールで実行できます。
public override void Run()
{
Trace.TraceInformation("WebRole::Run begin", "Information");
List<WorkerEntryPoint> workers = new List<WorkerEntryPoint>();
workers.Add(new Worker1());
workers.Add(new Worker2());
base.Run(workers.ToArray());
Trace.TraceInformation("WebRole::Run end", "Information");
}
ここでの利点は、小規模から始めて、すべてのワーカーロール(実際にはワーカーロールではありませんが、プロセスまたはワーカーと呼びましょう)を単一のロール(実際にデプロイする)で実行できることです。
次に、ビジネスが成長し始めたら、専用の役割の使用を開始できます。つまり、ワーカーの役割ごとに少なくとも1つのインスタンスを実行できます。そして、これが必要な場合、ThreadedRoleEntryPointに渡されたワーカーはRoleEntryPointクラスによく似たWorkerEntryPointから継承するため、コードへの影響は最小限に抑えられます。
はい、できます。ここにデザインパターンがあります http://www.31a2ba2a-b718-11dc-8314-0800200c9a66.com/2010/12/running-multiple-threads-on-windows.html