5

サービス層で Memcached を使用して、負荷分散された Web サーバー環境で ASP.NET および WCF サービスを使用しています。

また、ASP.NET State Server (セッション状態用) の使用を Memcached に置き換えたいと考えていました。私が理解していることから、Memcachedは状態サーバーではなくキャッシュサーバーであるため、これは良いことではないのではないかと心配しています。それは本当ですか?

私の理解が正しければ、Memcached は Memcached ファーム内の他のノードにデータを配布していません。代わりに、特別なハッシュ アルゴリズムを使用して、ファーム内のどのノードに要求されたキーのデータが含まれているかを判断します。一方、ASP.NET ステート サーバーは、データが追加されるとすぐにデータを配布して、単一障害点を防ぎます。

つまり、Memcached はパフォーマンス上の理由でのみ使用する必要があります。Memcached に格納されているデータは、新しいオブジェクト用のスペースを確保するために項目が削除された場合、または実際にデータを格納している単一のマシンが失われた場合に備えて、常に再作成可能である必要があります。下。

では、セッション状態データを保存するためだけに Memcached に頼ることはできないのでしょうか? それができない場合、Memcached がどのように比較され、ScaleOut StateServer と ASP.NET State Server を使用する代替手段として見なされているのか理解できません。これらは実際には状態サーバーであるためです。これは別のことですよね?

Web サーバー ファームで高パフォーマンスの分散セッション状態を実現するための最善のアプローチは何かについて、少し確信が持てません。

ありがとう

4

3 に答える 3

4

http://www.codeplex.com/memcachedprovidersには、memcached に値を格納する asp.net 用のセッション状態プロバイダーがあります。' SQL Server のセッション データをバックアップする機能を提供します。yogman が言ったように、セッション データは 1 つの値として保存されます。エビクションが発生すると、そのユーザーのセッション全体が失われ、ユーザーはログイン画面に誘導されます。Memcached は、新しいデータを保持するためのスペースが不足していない限り、有効期限が切れる前にデータを削除しません。

于 2008-12-31T22:25:35.230 に答える
1

Memcached は現在、データ ミラーリングをサポートしていません。エントリを複数のサーバーに分割して、サーバーが一杯になるのを防ぐ機能のみを提供します。これは、キーをサーバーのアドレスでハッシュするか、一貫したハッシュ アルゴリズム (libketama) を使用することによって機能します。

ただし、一般的には、Memcached を永続的なストレージ レイヤーと見なすべきではなく、ほとんどの場合、キャッシュ内のデータはデータベース内のデータと同じにする必要があります。ユーザーのセッション データを変更してキャッシュする場合は、Memcached で更新し、その後すぐにデータベースで更新します。本当に注意したい場合は、単純なジャーナリング システムを実装して、システム障害が発生した場合にこのデータの一貫性を保つことができます。

ただし、Memcached は間違いなくセッションのキャッシュに使用されています。作成者は、Jinux Journal の記事で同様のことを述べています。実際には、読み取り操作の最適化のみを目的としています。結局のところ、関心のあるデータはすべてデータベースに保存する必要があります。

于 2008-11-14T19:29:16.657 に答える
0

理想的な状況では、セッション データは、ユーザー ID の内部数値表現である単一の値のみです。これは、ユーザーが正しいパスワードを入力してログイン ページを正常に通過したことを意味します。

しかし、他のユーザーについてはどうでしょうか。たとえば、stackoverflow を例にとると、ユーザーに応じたページ上の動的データ: ユーザーのニックネーム、評判の数値、獲得したバッジ、コメントを残す許可などです。多くの場合、複数のデータベース テーブルにまたがる複数の JOIN の結果です。

memcached を使用しない場合、これらのクエリはほとんど常にディスクからデータを読み取ります。これは非常に遅く、スケーラブルな操作ではありません。データベース内のキャッシュ?データベースがセッション データの管理以外のことを行っていることを考えると、ヒット率はどのくらいになると思いますか? メモリから読み取ることができるのに、なぜディスクから読み取らなければならないのですか?

もちろん、関連するユーザー情報への書き込みは、memcached の対応するセッションを無効にする必要があります。

于 2008-11-14T21:45:24.697 に答える