1

Web アプリを Azure に移行しており、戦略に関するフィードバックを求めています。Azure は私たちにとって新しいものであり、正しい道を進んでいることを確認したいと考えています。VS 2010 を使用していることに注意してください。

現在のアプリには 2 つの部分があります。1) ユーザー インターフェイス用の標準 Web アプリと、2) サーバー上で実行される Windows アプリです。Windows アプリは 2 分ごとに起動し、SQL テーブルで新しいレコードを探して処理し、スリープします。Windows アプリは、システムの全体的な状態を確認できるように、処理されたレコードの数、処理時間なども通知します。どちらのアプリも、サーバーに保存されているファイルの読み取り/書き込みを行います。(はい、これはおそらくサービスであるはずですが、全体的な状態をすばやく確認できるようにインターフェイスが必要でした。インターフェイスが実行されていることを確認し、障害が発生した場合は再起動するサービスがあります。)

Web アプリを Azure に移植するのは簡単で、VS 内で問題なくテストを行いました。Windows アプリとファイルの設定/アクセスについてアドバイスが必要です。

これが私たちの戦略です。すべてのアドバイスをいただければ幸いです。

1 - Windows アプリの worker ロールを作成します。2 - この worker ロールをスタートアップ プロジェクトとして設定します。3 - worker ロールは、Azure クラウド ドライブ (ファイル アクセス用) を作成し、ドライブ文字を Web アプリに渡します。onstart 内で接続を確立します。4 - クラウド ドライブが失われないように、worker ロールが永続的であることを確認します。

2 つの追加の質問:

1 - worker ロールはユーザー インターフェイスを持つことができるようですが、おそらく何かを誤解している可能性があります。Windows アプリをソリューションに追加しようとすると、多数のエラーが発生します。また、worker ロールを作成して Windows フォーム アプリケーションとして設定しようとしましたが、「Main」メソッドではないというエラーがすぐに発生し、これを行うべきではないという警告フラグが表示されました。ここで何が欠けていますか?

2 - Worker ロールがスタートアップ プロジェクトとして設定されている場合、Web アプリを起動する必要がありますか、それとも Worker ロールが起動処理を完了すると自動的に起動しますか?

4

1 に答える 1

2

Web ロールと Worker ロールは基本的に Windows Server 2008 SP2 / R2 VM であり、Web ロールには IIS が構成されて実行されています。あなたが持っている実際の webrole.cs と workerrole.cs コードは、Web ロール/ワーカー ロール インスタンスが起動されたときに実行されるスキャフォールディングです。また、昇格された特権タスク (レジストリの変更やソフトウェアのインストールなど) を処理できるスタートアップ スクリプトもあります。

戦略について: Windows サービスのワーカー ロール作成する必要はありませんが、パフォーマンスの問題があると思われる場合は検討する必要があります。Web ロールで実行することもできます。OnStart() または Run() からスレッドを開始するだけです。単一のスケジューラのみが実行されていることを確認する必要があります。Windows Azure でスケジューラを実行することについては、このような質問が多数あります。また、この質問のように、quartz.net の使用に関する質問もあります。

共有されているクラウド ドライブについて: ある役割が別の役割とドライブ文字を共有することはできません。また、クラウド ドライブでは、ライターは 1 つしか存在できません。実際、各ロール インスタンスには独自のクラウド ドライブが必要です。これは、共通ファイル ストレージとして BLOB ストレージを検討する必要がある領域です。

UI を持たない worker ロールについての言及によると、Visual Studio では web アプリを worker ロールに簡単に追加できませんが、それは可能です。さらに重要なことは、worker ロールは単なる Windows Server VM であるため、代替 Web サーバー (tomcat、jetty、jboss など) をいくつでも実行することを妨げるものは何もないということです。スタートアップ スクリプトから、またはプロセスを起動して OnStart() からこれらを実行するだけで済みます。また、必要に応じて入力エンドポイントを作成する必要があります (例: http ポート 80、https 443)。これらのサーバーを Web ロールで簡単に実行できます (さらに、tcp、udp、http、または https をサポートする他のタイプのポート サーバーを実行できます)。

スタートアップ プロジェクトについて: クラウド プロジェクトがスタートアップ プロジェクトになります。Web ロール インスタンスと worker ロール インスタンスは並行して起動します。

于 2012-07-20T12:29:12.080 に答える