web-dev-qa-db-ja.com

1つのサイトの下にある2つのアプリケーションプールまたはルート仮想ディレクトリ

これは非常に馬鹿げた質問のように聞こえるかもしれません。最初に何を達成したいのかを述べてから、このような機能をどのように想定するかについての質問に進みます。

IIS(ユーザーやアクティブな接続を中断することなく)へのWebアプリケーションの完全にシームレスな展開を実現しようとしています。

私がこれが機能することを想像する方法は、同じサイトを共有する2つのルート仮想ディレクトリを持つことです。ルート仮想ディレクトリとは、IISが内部で作成し、それを各サイトまたはWebアプリケーションのルートに割り当てるディレクトリを意味します。ここを除いて、2つのそのようなルートvdir(それぞれが独自にバインドされている)が必要です。アプリプールですが、どちらも異なるフォルダーからまったく同じアプリケーションを参照しています。通常の操作中は、vdirの1つが非アクティブになります。

展開を行うときは、2番目の(非アクティブな)vdirによって参照される別のフォルダーに新しいコードを配置し、それをアクティブとしてマークします。私が達成したいのは、IISすべての新しい接続(同じサイトを要求する)をその2番目のvdirに送信し始めることです。新しいコードですが、古いコードへの残りの接続がすべて停止するまで、古いコードも存続してアクティブに保ちます(ファイルのアップロードなど、一部は長時間実行される可能性があります)。残りの接続がすべて停止すると、古いvdir/appプールは非アクティブで、新しいコードを持つ2番目のものが唯一のアクティブなものになります。

これが理にかなっていることを願っています。

そうでない場合は、例を挙げて説明する別の試みを次に示します。

--- Web Site ("mysite.com")
    --- Root VDir#1 (IIS Internal, App Pool: AppPool#1, Virtual Path: /, Physical Path: C:\inetpub\MySite.v1084\). ACTIVE
    --- Root VDir#2 (IIS Internal, App Pool: AppPool#2, Virtual Path: /, Physical Path: NONE). INACTIVE

展開中に、ルートVDir#2がアクティブになり、その物理パスがC:\ inetpub\MySite.v1085に変更されます。これがデフォルトのvdir IISがすべての新しい接続に使用されます。ルートVDir#1へのすべてのアクティブなセッション/接続が終了すると、それは非アクティブになります。

このようなことは可能ですか?このようなことを行う別の方法はありますか(IIS( "Web Farms"?)には何らかの形の組み込みの負荷分散があることは知っていますが、あまり詳しくありません)。

4
Ruslan

あなたが提案しているのは、A/Bスワップのように聞こえます。 ( 同様の質問

IISアドインツール Web Deploy と呼ばれるMicrosoftのツールがあります。ほとんどの場合自動化されます。更新されたコードをIISにデプロイする物理的な動きの一部ですが、ファイルトランザクションが長時間実行されるため、シームレスな移行の要件が問題になります。これを処理する最善の方法は、負荷をかけることです。バランサー。サイトの2つの本番インスタンスで同時に実行し、更新をステージングするための3番目のインスタンスを用意します。

(ところで、Azureは「クラウドサービス」でこのようなことを行っています。これを正確に行うための「スワップ」コマンドがあります。)

特定の設定に戻って、次の構成を検討してください。

1つのIISマシン、2つのWebサイト。WebサイトAとWebサイトB。同じファイルを指していません。独自のフォルダーがあります。WebサイトAはオンラインであり、本番環境のユーザーにサービスを提供しています。 、WebサイトBがオフラインのとき。更新する準備ができたら、WebサイトBを更新し、WebサイトAのオン/オフを切り替えます。これでBがオンラインになり、Aがオフラインになります。これはA/Bローテーションです。次の更新を行い、Aを更新してから、オン/オフをBと交換します。これでAがオンラインになり、Bがオフラインになります。

その正確な瞬間、スワップすると、トラフィックが失われる可能性があります そしておそらくそれらのファイル転送を強制終了します)が、アプリのボリュームが小さい場合、おそらく誰も気付かないでしょう(あなたが決める)。ただし、これがミッションクリティカルで大量のサイトである場合は、ロードバランサーを入手して、他の人が説明しているように使用してください。

WebDeployが(私が知る限り)行わないのは、オン/オフサイトAとサイトBを交換することです。そのためには、スクリプトを作成して---()する必要があります。コマンドラインで実行します

Web Deploy +スクリプトの利点は、最終的にこれを自動化し、継続的デプロイメントシステムに結び付けることができることです。

この設定では、長時間実行されるファイル転送を保存することはおそらく不可能です。もう1つの課題は、アプリのメモリ内の状態です。 Webアプリがメモリ内データを使用して設計されている場合、A/Bスワップを実行するとデータが失われます。プログラマーがセッションを使用している場合は、セッションサービスをオンにできる場合があります。セッションデータはアプリの他の部分と同じプロセスにはならず、A/Bスワップ後も存続する可能性があります。アプリがメモリ内データを管理する方法について、プログラマーに相談してください。多分それは実際には何も持っていません。アプリがリロードされると簡単に再作成できるかもしれません-(データベースからのキャッシュの再構築など)

1
010110110101