2009-04-20 5 views
20

私はasp.net/learnのASP.NET学習ビデオを見ています。このチュートリアルでは、クイズエンジンを構築しています。ある時点で、ナレーターはセッションオブジェクトを使用して各ページ間の状態を維持することを説明しています(各ページには質問と4つの回答が含まれています)。彼は「これは交通量の少ないウェブサイトだから」というのはセッションを使っても大丈夫だと言っており、より洗練された方法を実装する時間がないという。トラフィックの多いWebサイトにStateを格納するためにSessionを使用するのはなぜ悪い考えですか?

私は、代わりの方法が何を示唆しているのか疑問に思っていますか?そして、トラフィックの多いWebサイトでセッションが悪い理由は何ですか?

答えて

19

データをデータベースに保存するか、クッキーなどの方法でWebサーバーのメモリに直接接続しないでください。

セッションは負荷に加えて、ファーム全体でセッションを同期する必要があるか、またはセッションを固定してスケーラビリティに影響する可能性があるため、ファームを使用する機能に問題が生じます。

+0

私が同意すると、私たちはセッション状態を使用して同じことをしました。 +1 – John

4

セッションデータはサーバーのRAMに保存されます。大量のトラフィックを処理するサイトがあり、最後にデータがディスクにスワップされている場合は、セッションデータがサーバーのRAMに保存されます。

gaijin42によれば、クッキーまたはDBが代わりです。

+0

セッションデータはデフォルトでメモリに保存されますが、データベースに保存することはできます。 –

2

交通量の多いウェブサイトでは、Memcachedを見ている可能性があります。これは、リモートコンピュータのRAMに格納されているキャッシュのメカニズムです。ちょうど最近、win32ポートがライブラリで作られました(以前はLinuxでしか使えませんでした)。

1

ここで既に述べたことを繰り返すつもりはありませんが、もう1つの選択肢はApplicationハッシュです。これは、Adamが既に述べたようにWebサーバー上のメモリを消費するため、すべてのユーザーに共通のものをキャッシュするのに適しています。

これにより、他の人が既に求めている可能性が最も高い情報を取得するためにデータベースに戻る必要がなくなります。

アプリケーションの別の代替類似し

は、それがリリースされる、期間の面でより多くの柔軟性を持っているキャッシュなどここで

であるあなたが興味を持っている場合、いくつかのリンクです:として ASP NET CachingApplication State

4

セッションいくつかの理由から高トラフィックシステムでは状態記憶方法が大まかである。

デフォルトのセッション保存方法はインプロセスであり、負荷分散されたWebファームを使用している場合は、ユーザーが別のサーバーから配信されるページを取得するたびにSession情報が常に失われます。

アプリケーションプールがリサイクルされると、in-procセッションサーバーも停止します。これは、トラフィックの多いサーバーで頻繁に発生します。セッションデータの

スケーラビリティオプションが

  1. 自由に利用できるASP.NET セッションサーバーを使用して、セッションデータを保存すること
  2. 使用SQL Serverのでは、すべての アプリケーションを指しています。

一般的にセッションデータの性質上、これらはどちらもハードウェアに無制限に投げることができない限り、非常に高いトラフィックサイトにとって非常に良いオプションです。

1

大量のトラフィックや大きなセッション状態になるデータベースを使用します。代わりに、データベースレコードを指し示す実際のセッション状態にポインタを格納します。次に、Webサーバーとデータベースサーバーの間の帯域幅は、指定されたユーザーとWebサーバーの間の帯域幅よりもはるかに小さくなります。

+0

ウェブサーバーからクライアントへの速度が遅いとみなされるのに対して、データベースへのウェブサーバーは高速であると考えられています。セッションはどのようにデータベースに保存されていますか? – MedicineMan

+1

イントラネットアプリケーションを使用している場合を除き、ほとんどの場合、クライアントがインターネットを経由するため、データベースの設計が不適切であっても、Webサーバーをクライアントに実行する可能性が高くなります。データベースサーバーとWebサーバーが同じ物理的な場所にある可能性が高く、そうでない場合でも、2つのサーバー間の高速通信に最適化されたネットワーク上にある可能性があります。このようにしたもう一つの理由は、あなたの国家があなたを他のコンピュータに追いかけることができるようにすることでした。 – John

6

代替品については、記事Nine Options for Managing Persistent User State in Your ASP.NET Applicationを読むことができます。

記事では、著者はそれぞれの方法の賛否両論について説明しています。

要約から:

ASP.NETは、ユーザー要求の間でデータを永続化するさまざまな方法 を提供します。 Applicationオブジェクト、 のCookie、隠しフィールド、セッションまたは キャッシュオブジェクト、および多くのその他の メソッドを使用できます。 のそれぞれをいつ使用するかを決めるのは時には難しいことがあります。この の記事では前述の技術を で紹介し、使用する際のガイドラインは となります。 これらのテクニックの多くは古典的なASPに存在していましたが、それらを使用するためのベストプラクティス が の.NET フレームワークの導入で変更されました。 ASP.NETでデータを保持するには、 を処理する前に、 ASPで状態を処理する必要があります。

関連する問題