2

私は現在MVC上に構築された新しいWebサイトを設計していますが、状態を管理する正しい方法は何でしょうか。
状態には、userIdとユーザー情報のいくつかの構造体が含まれている必要があり、ユーザーがログインしている間(http要求全体で)ユーザーのセッション全体を通じて保持される必要があります。

重要な基準:
1)スケーラビリティのサポート
2)パフォーマンス

簡単な方法はSessionオブジェクトを使用することですが、スケーラビリティはサポートされていません。セッション中に異なる要求が異なるIISサーバーを通過する場合、セッションは保持されません。単一のセッションのすべての要求を同じマシンにルーティングする負荷分散ツールについて聞いたことがありますが、それに依存するのが良い習慣かどうかはわかりません(そうではありませんか?)

私が読んだもう1つのオプションは、RAM DBを実行している特別な状態サーバー(Linuxの場合はCassandra、Windowsの場合はRedisなど)に状態データを保持することです。しかし、開発のこの段階ではやり過ぎのように思えます。

他に何か提案はありますか?現時点では単純なものから始めたいと思いますが、将来的にはより高度なソリューションに備えて設計を準備しておいてください。

ベストプラクティスまたはコード/設計の提案をいただければ幸いです。

ありがとう、
エディ。

4

2 に答える 2

3

(1) SQL Serverを使用してセッション状態を保存する

(2) Memcached をセッション状態プロバイダーとして使用する

(3)外部キャッシング プロバイダーでキャッシングを使用して独自のソリューションを作成します。ServiceStack Caching Frameworkなどの使用を検討してください。これを使用すると、Redis、Memcached、Azure、または AWS を使用してキャッシュを処理できます。

次に、特定のアイテムのキーの生成を処理する KeyFactory を作成します。アイテムのキーには UserId が含まれます (これは常にFormsAuthenticationUserId から取得されます ( を使用していると仮定しますFormsAuthentication)。次に、ユーザーのセッション データをキャッシュに保存します。このアプローチを使用すると、 の代わりにキャッシングを使用し、キャッシュを使用Sessionできます。複数のサーバーで共有できます。

注: ユーザーが新しいセッションを開始するたびに、ユーザーのデータを消去する方法はさまざまです。潜在的なアプローチには次のものがあります。

  • ユーザーのセッション開始日時を cacheKey に含め、エントリが最新でなくなったときにエントリを自動期限切れにする
  • ユーザーが新しいセッションを開始するときに、ユーザーのすべての潜在的なエントリを消去します
于 2013-02-11T20:57:09.587 に答える
0

.NET 4.5 を使用していて、ユーザーについて保持している情報の種類と量に依存している場合は、クレームを使用してユーザーに関する情報を格納することを検討することをお勧めします。.NET 4.5 では、すべてのプリンシパルがClaimsPrincipalから継承されます。ClaimsPrincipal は既にクレームを使用して、ユーザー名、ロール、およびその他の情報を格納しています。要求を変換する独自のサービスを作成できます。これにより、プリンシパル ユーザーに追加情報を追加できます。

于 2013-02-11T20:55:21.047 に答える