web-dev-qa-db-ja.com

asp.netの負荷分散について

ロードバランサーの使用を開始するWebサイトを作成していて、頭を抱えようとしています。

  1. IISはすべてのバランシングを行いますか?
  2. 認証やその他の作業のように、サブサーバーに送信する前にいくつかの作業を行う分散サーバー上にある別のWebレイヤーがありますか?

私が読んでいる多くの記事は本当に私に正直な答えを与えていないようです、または私はそれらを正しく理解していないので、真の負荷分散が技術面からどのように機能するかを頭に入れたいです、誰かが共有するコードを持っているなら、それもいいでしょう。

キャッシングが問題になることは理解していますが、それは別のトピック、セッションでもあります。

20
dbarnes

IISにはデフォルトでロードバランサーはありませんが、少なくとも2つのMicrosoftテクノロジーを使用できます。

  • Application Request Routing IISと統合されます。理想的には、ルーティング作業を行うための別のWebレイヤーが必要です。
  • ネットワーク負荷分散 Microsoft Windows Serverと統合されているため、既存のサーバーをNLBクラスターに参加させることができます。

これらのテクノロジーはどちらもコード自体を必要としません。これはインフラストラクチャの問題です。ただし、もちろん、開発中の負荷分散環境について覚えておく必要があります。たとえば、真にバランスの取れたWebサイトを作成するには、ステートレスでなければなりません。そうでない場合は、クライアントとサーバーの間にいわゆるstickinessを提供する必要があるため、同じクライアントが常に同じサーバーに接続します。

サービスをステートレスにするには、サーバー上の状態(ASP.NET Webサイトの場合のセッションなど)を永続化せず、ファーム内のすべてのサーバー間で共有される外部サーバー上に保持します。したがって、たとえば、クラスター内のすべてのサイトで外部 ASP.NETセッションサーバー (StateServerまたはSQLServerモード)を使用するのが一般的です。

編集:

いくつかのことを明確にするために、言及された両方のテクノロジーについて一言:

  • [〜#〜] nlb [〜#〜]は、ネットワークレベルで(実際にはネットワークドライバーとして)機能するため、使用されるアプリケーションに関する知識がありません。いくつかのマシン/サーバーで構成される、いわゆるクラスターを作成し、それらを単一のIPアドレスとして公開します。次に、別のマシンがこのIPを他のIPとして使用できますが、接続はクラスターのマシンの1つに自動的にルーティングされます。各サーバーでクラスターが構成され、外部の追加のルーティングマシンはありません。すでに説明したように、クラスター設定に応じて、スティッキ機能を有効または無効にできます(ここではSingleまたはNone Affinityと呼ばれます)。 Load weightパラメータもあるので、重み付けされた負荷分散を設定して、たとえば最速のマシンにより多くの接続を送信できます。ただし、このパラメーターは静的であり、ネットワーク、CPU、その他の使用状況に基づいて動的に変更することはできません。実際、NLBはターゲットアプリケーションが実行されているかどうかに関係なく、ネットワークトラフィックを選択したマシンにルーティングするだけです。しかし、サーバーがオフラインになったことが通知されるため、そこにルーティングはありません。 NLBの利点は、非常に軽量で、追加のマシンを必要としないことです。
  • [〜#〜] arr [〜#〜]ははるかに洗練されており、IISの上にモジュールとして構築されており、ルーティングを決定するように設計されていますアプリケーションレベルで。ネットワーク負荷分散は、より完全なルーティングソリューションであるため、その機能の1つにすぎません。「ルールベースのルーティング、クライアントとホスト名のアフィニティ、HTTPサーバー要求の負荷分散、および分散ディスクキャッシング」を備えています。 Microsoftは、そこに作成します Server Farms ロードバランスアルゴリズム、負荷分散、クライアントスティッキなどの多くのオプションを使用します。ヘルステストとルーティングルールを定義して、リクエストを他のサーバーに転送できます。すべての欠点はARRがインストールされている専用のマシンが必要であるため、より多くのリソース(およびコスト)がかかります。
  • [〜#〜] nlb [〜#〜][〜#〜] arr [〜#〜]-単一のARRマシンを使用すると、失敗、 Microsoftの状態 ARRマシンのNLBクラスターを作成することは検討に値することです。
17
Konrad Kokosa

IISはすべてのバランシングを行いますか?

はい、設定した場合 Application Request Routing

ARR in IIS

分散サーバー上にある別のWebレイヤーはありますか

はい。

認証やその他の作業など、サブサーバーに送信する前に機能するものはありますか?

No 、ARRはかなり「ダム」です:

IIS ARRは事前認証を提供しません。事前認証が必要な場合は、Windows Server 2012 R2で利用可能なWebアプリケーションプロキシ(WAP)を確認できます。

構成時にキャッシングを追加しながら、リクエストを受け入れて転送する透過プロキシとして機能します。

認証については、Windows Server 2012の Web Application Proxy を参照してください。

10
CodeCaster

いくつかのヒント、およびおそらく自分自身を完全に理解するためのアイテム:

  • 上記のすべての回答が上記の状態にあるARRは、ユーザーからサーバーへのトラフィックを処理する「プロキシ」です。

  • Konradが指摘するようにStateを処理するか、ARRに「スティッキー」セッションを実行させることができます(クライアントが常に「このサーバー」に行くことを確認してください-おそらく状態を維持するサーバー) その特定のクライアント)。その答えについてのディスカッション/コメントを見てください-それは素晴らしいです。

  • 私はIT /サーバーハットをあまり長く着用していませんし、率直に言ってクラスタリングに触れていません(常に一部のプロバイダーによって「自動的に処理されます」)。そのため、ホストからこの質問をしました。私たちのクラスター/ファーム間の複製」は完了しましたか?」-質問は次のようなものをカバーしています

    • 私は1台のサーバーでのみ作業/設定を行っていますが、クラスター/ファーム内のX VM間で複製されますか?どのぐらいの間?
    • 動的に生成されたコードやユーザー生成ファイル(ファイルシステム)についてはどうですか? VM1のファイルシステム上にあり、10台の負荷分散されたVMがあり、クライアントがいつでもそれらのいずれかをヒットできる場合、...?
    • 暗号化はどうですか?例えばDPAPIを使用してweb.config要素(egdb conn文字列/セクション)を暗号化する場合、その影響は何ですか(それはマシンキーに基づいているためですが、当然、マシン(s)またはVM(s)RSA re-write ....?
  • [〜#〜] ssl [〜#〜]ARRもこれを処理できます 、それは素晴らしいことです!しかし、すべての力と同様に、 "con"が発生します-コード内でチェック/検証すると、 HttpRequest.IsSecureConnection まあ、それは常にfalseになります。サーバー/ VMには証明書がありませんが、ARRにはあります。暗号化されたconnはclientとARRの間にあります。サーバー/ VMへのARRはありません。リンクで説明されているように、逆の方法(オフロードなし)を使用したい場合は、...を実行できますが、すべてのサーバー/ VMに証明書が必要です(また、上記の「レプリケーション」に関連する方法で、頭)。

包括的であることを意味せず、メモリから物事をリストアップするだけです...

5
EdSF