背景情報: ファイル レプリケーションは不十分です
現在、大規模でトラフィックの多い ASP.NET Web アプリケーションが、8 つの異なる IIS サーバー間で負荷分散されています。サイトの性質上、.aspx ファイルと .ascx コントロールへのマイナーな変更は 1 日を通して頻繁に発生し、テストされてライブに公開された後、定期的に xcopy 展開を通じて各パブリック Web サーバーにレプリケートされます。 10分。
もちろん、これは非常に非効率的です。各サーバーにはサイト全体の冗長コピーが必要であり、10 分間の公開の遅れをなくしたいと考えています。
可能な改善: 共有ストレージからのホスティング
iSCSI インターフェースを備えた集中型ストレージを使用してサイト全体を集中的にホストするオプションがあり、各サーバーはリモート ストレージがローカル ドライブであると認識しています。パブリッシュは瞬時にシステム全体で行われます。
注: UNC 共有からドライブをホストすることはできません。サイト構造には非常に多くの異なるディレクトリがあり、それぞれが変更を監視するために ASP.NET の FileSystemWatcher を必要とするため、SMB の最大コマンド数にすぐに達してしまいます。はい、MaxCmds および MaxMpxCt レジストリ設定については把握しています。
問題: Web.config の変更が大規模な再コンパイルを引き起こす
私たちが予見する問題は、ファイル システム構造に特定の変更を加えると、コンパイルされたほぼすべての .aspx または .ascx を再コンパイルする必要が生じ、要求がキューに入れられ、サーバーがダウンしていると認識される可能性があることです。ほとんどのリソースはシステム全体で使用されるわけではないため、変更時にそれらを再コンパイルしてもリソースはほとんど変化しません。サイトのすべてのページで使用されるグローバル マスター ページが原因である可能性がありますが、これはコードで簡単に管理できます。
主な原因は web.config ファイルです。web.config ファイルを変更すると、Web アプリケーション全体がリサイクルされ、再コンパイルが発生します。そのため、現在、web.config の変更はレプリケートされません。web.config を変更する場合は、Web サーバーをロード バランサーから切り離し、変更を適用 (およびテスト) してから、ロード バランサーに戻す前にサーバーをジャンク リクエストでウォームアップする必要があります。
ただし、Web アプリケーションの残りのディレクトリ構造と同様に、web.config ファイルが集中ストレージに配置されている場合、ファイルのコピーは 1 つしかなく、個々のサーバーにパッチを適用してウォームアップすることはできません。
質問
ASP.NET Web アプリケーションが Web.config という名前のファイル以外のソースから行進命令を取得する方法はありますか?
サーバーごとに 1 つのファイルが存在するのが理想的です。たとえば、次のようになります。
- default.aspx
- グローバル.asax
- Web-ServerA.config
- Web-ServerB.config
- ...
- Web-ServerN.config
とにかく「web.config」という名前はどこに定義されていますか? サーバーごとに設定できるレジストリ設定はありますか? 使用するファイルを指定するために、machine.config またはグローバル web.config で作成できるエントリはありますか?
範囲外のもの
明確にするために、デバッグ、テスト、およびライブ用に異なる AppSettings を使用する方法を尋ねているわけではありません。これをカバーする他のトピックがあり、ほとんどの場合、すべての web.configs は同じです。それらを変える必要があるのは、更新が実行されているときだけです。
appSettings 情報には web.config を使用していません。これは、アセンブリ参照、httpHandler 定義、およびデータベース化できないその他の system.web 設定など、非常に重要なもののためのものです。
アップデート
レジストリで Web.config を検索してみましたが、最近 web.config ファイルを編集したことを示すアプリケーション以外には何も見つかりませんでした。そこに助けはありません。