2011-09-28 18 views
8

ASP.Netは負荷分散環境でセッションデータをどのように処理しますか? ユーザーが数ページを移動中に複数のリクエストを行ったとします。 すべての要求はロードバランサ内の同じサーバーに移動しますか?ASP.Net - 負荷分散環境でのセッションデータの処理

すべてが同じサーバーを指していない場合はどうすればよいですか?セッションデータをどのように扱うのですか?

答えて

4

NLBに「スティッキー」セッションを有効にする機能があることを確認する必要があります。

これがオプションでない場合は、ASP.Net Session Modesを使用して、セッションサーバーまたはSQL Serverのようなバッキングストアを構成する必要があります。

1

一般に、ほとんどのロードバランサは永続的な接続を試みますが、目的に応じて保証することはできません。状態を維持するためにSQLバックエンドのようなものを使用するか、セッションデータを管理する別のクラスを作成するのが最良です。どちらの場合でも、セッションデータが他のものとなることが予想されるときにnullになると、セッションデータを再構築できます。私はゲッターを使ってヌルをチェックし、必要に応じて再構築する傾向があります。実際には、私はどのくらいの頻度で再構築されているかを見るための測定基準は行っていませんが、あまり頻繁ではないと思います。彼らが言うように、申し訳ありませんよりも安全である方が良いです。

1

通常、インフラストラクチャ担当者がsticky sessionまたはsticky bitと呼ぶものを使用してロードバランサを構成できます。このタイプの環境では、要求がサーバーに割り当てられると、セッション中にそのサーバーにとどまります。

このような方法でロードバランサを構成しないと、ASP.NETにはいくつかのセッション状態プロバイダが用意されています。 1つの非常にポピュラーなものはSQL Server State Providerで、セッション情報をデータベースに格納できます。これを有効にするには、Sessionオブジェクトに配置されているすべてのオブジェクトを、表に格納できるようにSerializableにする必要があります。

私が言ったように、いくつかの選択肢があります。たとえば、memcachedなどの異なるアプローチを使用する方が好きです。

1

Windowsや他の製品(BIG-IP F5、HA Proxyなど)からNLBを使用することができます。

Out-of-Proc(State Server)を使用し、マシンキーの設定がすべてのサーバーで同じであることを確認してください。また、NASなどの共有ディスクドライブでIOを実行していることを確認してください。ここで

は、いくつかのより多くのヒントとのリンクです: Load Balancing and ASP.NET

関連する問題