2

global.asax ファイルがサーバー ファームでどのように実行されるかについて、私は混乱しています。各サーバーには独自のインスタンスが実行されていますか、それとも共有インスタンスですか。

たとえば、Application_Start イベントの global.asax では、統計を収集し、統計を含むデータベース テーブルを更新するシングルトン オブジェクトを初期化します。次のうちどれが起こりますか?

シナリオ 1

  • サーバー 1 -> (Stat = 10) -> データベースを 10 で更新
  • サーバー 2 -> (Stat = 8) -> データベースを 8 で更新
  • サーバー 3 -> (Stat = 25) -> データベースを 25 で更新
  • サーバー 4 -> (Stat = 5) -> データベースを 5 で更新

各サーバーが独自のコレクションでデータベースを更新する最初の例

シナリオ 2

  • サーバー 1 -> (Stat = 10) -> データベースを 10 で更新
  • サーバー 2 -> (Stat = 10) -> データベースを 10 で更新
  • サーバー 3 -> (Stat = 10) -> データベースを 10 で更新
  • サーバー 4 -> (Stat = 10) -> データベースを 10 で更新

上記の例では、サーバーは同じコレクションにアクセスできます。これは可能ですか?

4

2 に答える 2

1

サーバーはお互いを認識しないため、global.asax ファイルはプロセスとサーバーごとに個別に実行されます。これは、同じサイトと同じマシンで複数のワーカー プロセスを許可するように IIS をセットアップした場合でも当てはまります。各ワーカー プロセスには、独自の global.asax がありApplication_Start()ます。

したがって、あなたの質問に直接答えるために、シナリオ 1 は Web ファームで実際に起こることをより厳密にモデル化します。

「シングルトン」をすべてのサーバーで共有する場合は、すべてのサーバーが共有できるサービスを実装する必要があります。

于 2012-07-05T17:51:05.300 に答える
0

もう 1 つの選択肢は、高可用性環境で使用されているScaleOut State Server (SOSS)を使用することです。

[これは] Web またはアプリケーション サーバー ファーム内のすべてのサーバーで実行され、ミッション クリティカルなワークロード データを格納します。ScaleOut StateServer のインメモリ データ グリッドとインメモリ分散キャッシュが統合されているため、重要だが急速に変化するデータへの非常に高速なアクセスが可能になり、ファームにサーバーを追加すると、そのパフォーマンスと容量が増加します。このソフトウェアは、格納されたデータをサーバー間で自動的にレプリケートするため、サーバーに障害が発生しても重要なデータが失われることはなく、スタンドアロン データベース サーバー (またはフェールオーバー データベース クラスター) では複製できないスケーラブルで可用性の高いアクセスが維持されます。Windows バージョンの ScaleOut StateServer を使用して、ASP.NET セッション状態を透過的に保存および取得することもできます。

于 2015-09-08T16:47:41.080 に答える