ダウンタイムなしでアプリケーションの新しいバージョンを IIS アプリケーションに展開する

ダウンタイムなしでアプリケーションの新しいバージョンを IIS アプリケーションに展開する

イントラネット ネットワークのキオスクで実行される小さな AngularJS Web アプリケーションがあります。ダウンタイムなしで、Web インターフェースを使用してリモートで制御できる自動化された方法で展開することを任されています。小さなアプリケーションなので、ロード バランサーや同様の設定はありません。2 つのオプションを検討しました。

オプション1: アプリケーションのバージョンをフォルダーにダウンロードし、仮想ディレクトリの物理パスを新しいバージョンのフォルダー パスに変更します。これは、次のコードを使用して Microsoft.Web.Administration ライブラリを使用して実現できます。

            ServerManager sm = new ServerManager();
            Site site = sm.Sites["Default Web Site"];            
            site.Applications[virtualDirectory].VirtualDirectories["/"].PhysicalPath = newPath;
            sm.CommitChanges();

このアプローチでは、

  1. 切り替えはどのくらい早く反映されますか?
  2. 一部のキオスクが古いバージョンのアプリケーションでまだ動作している可能性はどれくらいですか?
  3. 切り替えが行われる短期間の間にダウンタイムが発生する可能性はありますか?
  4. この期間中に IIS に対して行われたリクエストはエラーを返しますか?

オプション2:IIS の URL 書き換え機能を使用します。基本的には、アプリケーションの web.config に新しい書き換えルールをプログラムで追加し、アプリケーションの新しいバージョンとなる別のサブフォルダーにリダイレクトします。

このアプローチでは、

  1. URL 書き換えルールが反映され、書き換えが開始されるまでの時間はどのくらいですか?
  2. 一部のキオスクが古いバージョンのアプリケーションでまだ動作している可能性はどれくらいですか?
  3. 書き換えルールが web.config に追加される期間の間にダウンタイムが発生する可能性はありますか?
  4. この期間中に IIS に対して行われたリクエストはエラーを返しますか?
  5. URL の書き換えによってパフォーマンスコストは発生しますか?

どうか助けてください。これらのアプローチは両方とも私のタスクには適していないのでしょうか? この要件を満たす他の代替手段はありますか?

答え1

MSDeploy は、自動化されたリモート展開部分を処理できる必要があります。別のサーバーや、アプリケーション トラフィックを別の仮想ディレクトリに自動的に送信する別の方法がない場合、ダウンタイムなしという要求は現実的ではありません。これは、車が 1 台あるが、修理中も運転し続けられるようにしたいと言っているようなものです。車が修理中の間、別の車を運転させたい場合、一時的なものでもそうでないものでも、別の車が必要になります。

関連情報