17

ASP.NET MVC アプリケーションを Web ファームに対応させる最も効率的な方法は何ですか。

最も重要なことは、現在のユーザーの情報 (コンテキスト) と (それほど重要ではありませんが) ルックアップ アイテム (都道府県、通りの種類、郡など) などのキャッシュされたオブジェクトを共有することです。

私は MemCache について聞いたり読んだりしたことがありますが、それを実装してテストする方法について簡単に適用できる方法 (ドキュメント) を見たことがありません。

4

1 に答える 1

21

要求コンテキスト
Webファームにヒットするすべての要求は、使用可能なIISサーバーによって処理されます。そこでコンテキストが作成され、リクエスト全体が同じサーバーによって処理されます。したがって、コンテキストは問題にはなりません。リクエストはステートレス実行パイプラインであるため、他のサーバーとデータを共有する必要はありません。最初から最後まで同じマシンで提供されます。
ユーザー情報はCookieから読み取られ、リクエストを処理するサーバーによって処理されます。完全なユーザーオブジェクトをどこかにキャッシュするかどうかによって異なります。

セッション
辞書 を使用する場合は、TempData辞書内に保存されていることに注意してくださいSession。サーバーファームでは、ファーム全体のIISサーバー間で共有されないため、InProcセッション以外の手段を使用する必要があります。DBまたは他のセッションマネージャー(状態サーバーなど)を使用する他のセッションマネージャーを構成する必要があります。

キャッシュキャッシュ
に関しては、話は別です。可能な限り効率的にするには、キャッシュも提供する必要があります。デフォルトではそうではありません。しかし、キャッシュを見ると、キャッシュがない場合は、キャッシュを読み取ってキャッシュに保存する必要があることを意味します。したがって、特定のサーバーファームサーバーにキャッシュオブジェクトがない場合は、それが作成されます。やがて、それらすべてが共有された公的に使用されるデータをキャッシュするようになります。または...(あなたが言ったように) memcached
のようなライブラリを使用して、共有キャッシュを利用することができます。ネット上には使い方の例がいくつかあります。

しかし、これらのソリューションはすべて、他に何もないとしても、いくつかのこと(ネットワークおよびサードプロセスの処理やデータのフェッチなど)の追加のオーバーヘッドをもたらします。したがって、デフォルトのキャッシュが最速であり、明示的に共有キャッシュが必要な場合は、共有キャッシュを決定します。本当に必要な場合を除いて、キャッシュを共有しないでください。

于 2010-08-11T22:14:54.443 に答える