(これはおそらくあなたが探している以上のものですが、投稿されました)
あなたはベストプラクティスについて言及しているので、セッション状態のアイデアを少しでも引き出すために使用できるいくつかのプロジェクト/技術を調べることができます。複数のサーバー間で水平方向にWebアプリケーションをスケーリングする一般的な落とし穴の1つは、それらの間のセッション状態を維持することです。 (ユーザーAは、ユーザーのセッションを格納しているサーバーAにログインしますが、次の要求でサーバーBはユーザーAのセッションについて知らないサーバーBをヒットします)
私はいつも自分自身同僚だけでは、たとえそのデータが事実上非常に過渡的であっても、セッション自体は実際にはデータを保存するのに最適な場所ではないということです。 Webサーバーは、要求/応答システムであり、データストアではありません。それは前者に高度に調整されていますが、後者にはそれほど大きくないとは限りません。
このように、アプリケーションのセッションデータ(またはWebのRESTfulステートレスな性質の中で実際に最低限の状態に保たれるステートフルなデータ)をWebサーバーや別のシステムに外部化する方法があります。 Memcachedはこのための非常に一般的なツールです。また、SQLやMySQLのようなデータベースにセッションを保存するドロップインセッションの置き換え(またはさまざまなフレームワーク/環境用の設定可能なセッションオプション)もあります。
私は最近、NoSQLデータベースでセッションデータ(災害時に失われても問題ない任意の一時的なデータ)を保存することを考えています。 CouchDBとMongoDBは私の現在の選択肢ですが、他にもオプションがありません。 CouchDBは優れた水平スケーリング機能を備えており、MongoDBは完全にメモリ内で実行されると非常に高速です。
少なくとも私の場合、このようなものの大きな利点の1つは、展開が簡単に非イベントになることです。任意のサーバ上のウェブサービスを再開することができ、その中のアプリケーションをステートフルデータを失うことなく再初期化することができる。データがディスクに永続化されている(つまり、メモリ内で完全には実行されていない)場合は、サーバーを失うことなく再起動することもできます。サーバー/サービスはファーム内外にドロップすることができ、ユーザーはその違いを知ることができません。
さらに、このデータを外部化することで、潜在的に有用な方法でデータを分析することができます。他のWebアプリケーションや完全にオフラインのツールなどを介してそれと照らし合わせて、それと照らし合わせることができます。プロジェクトが複雑になるにつれて、実際にオプションが開きます。
(これは本当にあなたの質問に答えるつもりではなく、役に立つと思う情報を追加することです。私の同僚と私は遅れています。あなたの質問は良いそれに言及する場所)。
「ベストプラクティス」の回答を得るには質問が広すぎるとは思われませんか? –