3

背景情報: ファイル レプリケーションは不十分です

現在、大規模でトラフィックの多い 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 ファイルを編集したことを示すアプリケーション以外には何も見つかりませんでした。そこに助けはありません。

4

2 に答える 2

1

私の最初の質問は、web.config に何を保持しているか、データベースに移動できますか? すべての構成設定をデータベースのテーブルに保持し、machine.config を使用してデータベース接続情報を保存します。

あなたにとってどの程度の書き直しになるかはわかりませんが、問題を回避できます。

もう 1 つのオプションは、構成項目を外部ファイルに格納し、web.config から参照することです。そのファイルへの変更は、aspnet wp がリサイクルされるまで再読み取りされませんが、設定を変更してから、IISRESET を介して各サーバーを循環させることができます。

<configuration>
   <appSettings file="OtherFile.config">
...
于 2009-04-14T19:04:10.643 に答える
0
  1. 興味があるのですが、どのファイルシステムを使用していますか? NTFS は共有ストレージ ファイル システムではありません。つまり、一度に複数のノードがファイルシステムに書き込むことはできません。

  2. IIS のサイトの下にある仮想ディレクトリをお勧めします。これにはおそらく、コードのレイアウトを少し再構築する必要がありますが、それほど大がかりなものではありません。そのため、そのマシンに固有の web.config を持つサイトのルート ホーム ディレクトリと、セットアップした共有ファイル システム リソースにマップされた vdir があります。

于 2009-05-12T17:41:52.510 に答える