質問

現在、私のサイトは単一のサーバーで提供されていますが、すぐにサーバーの容量を増やす必要があると予想しています。 Webサイトを複数のサーバーに分割し、サーバー間でセッションを管理する代わりに、同じコードベースを持つ複数のWebサーバーを使用し、ルーターベースのラウンドロビンロードシェアリングを使用して各サーバーにユーザーを分散させます。また、ユーザーがWebサーバーにアクセスしたら、セッション全体を通してそのWebサーバーにとどまるようにします。私の知る限り、これを容易にするために特別なasp.netコードは必要ありません。

このアプローチについての警告やコメントはありますか?

役に立ちましたか?

解決

あなたが話していることは、スティッキーセッションまたはセッションアフィニティと呼ばれます。ルーターがこれをサポートしている場合、あなたは黄金色です。

唯一の問題は、負荷分散が完全ではないということです。同じサーバー上ですべてランダムに終了する高負荷のユーザーが数人いる場合、セッションが終了するまでそこにいることになります。

私は仕事でこの種の負荷分散を実装しており、実装に特別なasp.netコードは必要ありません。

他のヒント

ほとんどの(おそらくすべての)ロードバランサーには、「スティッキー」を強制する機能があります。同じIP上のユーザーがすべてのリクエストで同じWebサーバーにリダイレクトされるセッション。これを達成するために必要なコード変更はありません。 2つの注意点があります。

  1. スティッキーセッションを使用すると、スティッキーセッションを使用していない場合ほどトラフィックの負荷が均等に分散されません。ただし、配布は「十分」であるべきです。 IMO。
  2. プロキシサーバーを使用しているユーザーのうち、リクエストごとに異なるIPにアクセスするユーザーは非常に少ないでしょう。これらのユーザーは「奇妙な」体験をするかもしれません。異なるサーバーに渡されるときの動作。

この構成のもう1つの特徴は、サーバーがダウンすると、そのサーバー上のユーザーのセッションもセッションを失うことです。これは、ルーターがスティッキーセッションまたはセッションアフィニティをサポートしている場合、開発作業を必要としないため、最も一般的に使用されるセットアップの1つだと思います。

他の人が述べたように、ロードバランサーでスティッキーセッションを有効にできる必要があります。これにより、「1つのサーバーにとどまる」ことの大部分が処理されます。あなたのための問題。

ただし、セッション中に間違ったサーバーに着陸したユーザーに対処するための設定を行っておく必要があります。通常、スティッキーセッションはIPアドレスに基づいており、不運な場合はユーザーIPがセッション中に変更される可能性があります。またはサーバーがオフラインになる可能性があり、ユーザーは他のサーバーにリダイレクトされます。

MachineKeys が同じであることを確認する必要がありますすべてのサーバー-これにより、すべてのサーバーでビューステートを正しく復号化できます。

サーバーを所有している場合、machine.configでこれを行うことができます。それ以外の場合は、web.configでアプリケーションレベルで設定できます。詳細については、次の方法を参照してください。

  

ASP.NET 2.0でMachineKeyを構成

IIS 7.5で実行している場合、若干の違いがあります-Tess Ferrandezの最近の投稿" IIS 7.5のインストール後にフォーム認証が失敗する"。

他にすべきことは、 sessionState InProcからSqlまたはStateServerへ。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top