3

シナリオは次のとおりです。

  1. 3 つの Web サーバー A、B、C があります。
  2. アプリケーションを停止せずに、アプリケーションの新しいバージョンをリリースしたい
    (たとえば、「メンテナンスのため停止」ページを使用しない)。
  3. サーバー A は最新のコードで稼働します。
  4. サーバー B はオフラインになります。サーバー B のユーザーは、A と C にルーティングされます。
  5. Page1.aspx が新しいコントロールで更新されました。このページでサーバー B からサーバー A に移動
    したユーザーは、このページでアクションを実行するとビューステート エラーが発生します。これは私たちが防ぎたいことです。

この問題をどのように解決しますか?

ここにいくつかの考えがあります (ロードバランサーを使用できるかどうかはわかりません... ロードバランサーの構成に慣れていません [それは F5 です]):

より素朴なアプローチ:

サーバー A と B を停止し、更新します。C は古いコードを保持します。すべてのトラフィックは C に転送されますが、これは古いコードなので問題ありません。A と B が更新されたときに、可能であればロード バランサーに、アクティブなセッションを持つユーザーのみを C に保持し、すべての新しいセッションが A と B で開始されるように指示します。ユーザーがアプリケーションを使い続けると、長期間使用できなくなります。

あまり単純でないアプローチ:

変更されていないページである「安全な」ページについて (可能であれば) ロード バランサーに通知することを除いて、単純なアプローチと同様です。ユーザーが最終的に「安全な」ページにたどり着くと、そのユーザーはサーバー A または B にルーティングされます。理論的には、ユーザーはこれらのページのいずれにもアクセスしない可能性がありますが、このアプローチはリスクが少し低くなります (ただし、より多くの作業が必要になります)。 )。

4

1 に答える 1

7

ロード バランサーは、通常の操作中に個々のユーザーを Web ファーム内の同じサーバーに戻すように誘導していると思います。そのため、通常、この問題は発生せず、サーバー間でユーザーのリダイレクトを開始した場合にのみ発生します。

この仮定が正しければ、サーバー ファーム全体で一貫性のないマシンキーが問題である可能性があります。

クライアント側のユーザーによる改ざんを防ぐために、ViewState はサーバーのマシン キーに対してハッシュされます。マシン キーは IIS によって自動的に生成され、サーバーが再起動またはリセットされるたびに変更され、サーバーごとに一意になります。

ユーザーがサーバー間を移動するときにビューステートの検証の問題が発生しないようにするには、2 つの方法があります。

  1. enableViewStateMac 属性に false の値を指定して、個々のページで、または web.config ファイルの pages 要素でグローバルに、改ざん防止保護を無効にします。これは完全を期すためだけに言及したものです。本番用の Web サイトでは絶対にこれを行うべきではありません。

  2. 手動でマシン キーを生成し、各サーバーで同じ値を各アプリケーションで共有します (すべてのアプリケーションに同じキーを使用できますが、セキュリティを最大化するためにアプリケーションごとに 1 つのキーを使用するのが賢明です)。これを行うには、キーを生成する必要があります (インターネット上のデモで見られるようなものは使用しないでください。これは、一意のマシン キーの目的を無効にします)。これは、プログラムまたは IIS マネージャーで行うことができます ( http://www. codeproject.com/Articles/221889/How-to-Generate-Machine-Key-in-IIS7 )。Web サイトをすべてのサーバーに展開するときは、同じマシン キーを使用します。

100% のアップタイムを必要とするアプリケーションをアップグレードするためのベスト プラクティスについてはお答えできません。

于 2013-01-13T22:42:26.227 に答える