13

ASP.NET Webファームを作成する方法、つまり、ASP.NETアプリケーション(最初は単一のWebサーバーで動作するように設計されています)を2、3、10などのサーバーで動作させる方法に関する情報を探していますか?

たとえば、同時に500人のユーザーがいる場合に正常に機能するWebアプリケーションを作成しました。しかし今、私たちはそれを10,000人のユーザーのために機能させる必要があります(同時にWebアプリを操作します)。

したがって、 20台のWebサーバーをセットアップし、1万人のユーザーがWebブラウザーに「www.MyWebApp.ru」と入力してWebアプリを操作できるようにする必要があります。ただし、要求は20台のWebサーバーによって処理されます。彼らはそれを知っています。

1)ASP.NET Webファームを作成するための特別な標準ソフトウェアはありますか?

2)または、 (ASP.NET / C#を使用して)異なるWebサーバー間で要求を手動で転送することにより、自分でWebファームを作成する必要がありますか?

ASP.NET WebファームとWeb上のスケーラビリティに関する情報はほとんど見つかりませんでした。ほとんどの場合、スケーラビリティに関する記事では、ASP.NETアプリを最適化して実行速度を上げる方法について説明しています。しかし、 2つのWebサーバーで実行されているASP.NETWebアプリのような「Helloworld」の例は見つかりませんでした。

誰かが記事へのリンクを投稿できるか、より良いのは、ASP.NETの「Webファーミング」とスケーラビリティの問題への対処における自分の経験について話すことができれば素晴らしいことです。

ありがとう、ミハイル。

4

4 に答える 4

7

1)ASP.NET Webファームを作成するための特別な標準ソフトウェアはありますか?

いいえ。

2)または、(ASP.NET / C#を使用して)異なるWebサーバー間で要求を手動で転送することにより、自分でWebファームを作成する必要がありますか?

いいえ。

Webファームを構築するには、何らかの形の負荷分散が必要になります。最大8台のサーバーの場合、Windowsに組み込まれているネットワーク負荷分散(NLB)を使用できます。8台を超えるサーバーの場合は、ハードウェアロードバランサーを使用する必要があります。

ただし、負荷分散は実際には氷山の一角にすぎません。次のようなものを含め、対処する必要のある他の多くの問題があります。

  1. 状態管理(Cookie、ViewState、セッション状態など)
  2. キャッシュとキャッシュの無効化
  3. データベースのロード(ラウンドトリップ、パーティション分割、ディスクサブシステムなどの管理)
  4. アプリケーションプール管理(WSRM、プールリセット、パーティショニング)
  5. 展開
  6. モニタリング

役立つかもしれない場合は、これらの問題の多くを私の本で取り上げます。Ultra-Fast ASP.NET:ASP.NETとSQLServerを使用してUltra-FastおよびUltra-ScalableWebサイトを構築します

于 2009-11-30T00:05:02.897 に答える
3

基本的にすべてのリクエストをクラスターノード間で分割するNLBクラスター(ネットワーク負荷分散)を構成する必要があると思います(さらに、ダウンしているかどうかを検出し、リクエストの送信を停止するという利点もあります)。このためにウィンドウに組み込まれている機能がありますが、パフォーマンスやスケーラビリティの点でハードウェアデバイスとは比較されません。Windows 2008を使用している場合は、セットアップが非常に簡単です。これを行う場合は、共有マシンキーがあることを確認してください。そうしないと、ビューステートが無効であるという例外が発生し始めます(1つのサーバーがフォームを送信し、他のサーバーに投稿し、データのエンコードに異なるキーを使用している場合)。

DNSラウンドロビンを使用することもできますが、おそらく1つのデータセンターにある20台のサーバーでは、このようなクレイジーな長さにする意味はありません。複数のデータセンターがある場合、これは間違いなく検討する価値があります(NLBはデータセンター間で実際にはうまく機能しないため)。

また、ユーザーがサーバーを交換しても、セッションが失われないことを確認する必要があります。最も簡単な方法は、セッション状態データベースを使用することです(web.configで構成可能、またはIISの構成でサーバー全体で構成可能)。web.configのPagesディレクティブでセッションをオフにして、1日呼び出すだけですが、セッションを使用しない場合。セッション状態サーバーを使用することもできますが、私はこれについての経験がありません。

また、コードの最適化や静的コンテンツへのキャッシュディレクティブの追加に時間を費やすことを検討する価値があるかもしれません。これらのサーバーのいくつかの必要性を削減するだけでも、非常に費用対効果が高くなる可能性があります。

お役に立てば幸いです。

于 2009-11-29T21:18:00.050 に答える
2

サーバーをステートレスに保つ場合は、ラウンドロビンプロトコル(単一の公開サーバーIPへの各呼び出しを別のWebサーバーに送信する)を実装する優れたルーターを使用すると簡単です。

ステートレスでない場合(ログインが必要な場合、またはsslの場合など)、各セッションを同じサーバーに保持する必要があります。

MS Application RequestRoutingに関するいくつかの情報があります-そこにすべてがあります:

IISロードバランシング

于 2009-11-29T21:05:36.480 に答える
0

#2はお勧めしません。ロードバランサーを使用すると、はるかにうまくいくでしょう。

セッション状態管理に注意してください。各ユーザーを同じWebサーバー上に保持するようにロードバランサーを構成しない限り、セッション状態サーバーまたはデータベースを使用する必要があります。

また、コードでのアプリケーション変数とキャッシュ変数の使用法を確認してください。これらはすべてのWebサーバーで異なります。これらの値が静的である場合は、問題がない可能性があります。ただし、変更できる場合は、Webサーバーごとに異なる値になる可能性があります。

ここで説明されているように、1.xのViewStateには問題がありました。この問題がまだ存在するかどうかはわかりません。

次に、ここで説明するように、web.configのマシンキーに加える必要のある変更がいくつかあります。

于 2009-11-29T21:34:21.843 に答える