2011-01-31 20 views
7

メモリ内セッションの複製/クラスタリングを回避し、セッションをデータベースに格納する方法を模索しています。 TomcatのJDBCStoreを使用することは、サーバのメモリを節約するためにデータベース内の非アクティブなセッションのみを保存するため、この時点では役に立たない。 提案がありますか?Tomcat:セッションをデータベースに保存する

おかげで先行 ファビアン

+1

AmazonでElastic Beanstalkを見ましたか?スティッキセッションを提供します。 – stepanian

答えて

5

あなたはその後、全くそれを使用しないでください、使用されることを想定している方法でセッションを使用しない場合 - あなた自身のセッションオブジェクトを開発。これはまだHttpSessionを実装でき、HttpSessionの実装から拡張することもできます。

Filterを使用すると、リクエストをラップして標準のセッションオブジェクトではなくセッションオブジェクトを返すことができます。あなたのセッションでは、メモリの代わりに物事をDBに保存することができます。

DBに書き込む代わりに、Hazelcastを使用できます。分散コレクションを提供します。しかし、セッションレプリケーションを構成するのと同じ努力を要すると思います。そして、セッションの複製はそれほど難しいことではありません。それはすべてのコンテナでサポートされています。

これは大まかなガイドラインですが、その作業は簡単なことではありません。そして、私は標準的なセッションの使用パターンを守り、実際に必要な場合にのみDBに物事を格納することをお勧めします。

複製の必要性を避けるために、スティッキセッションを使用することができます。つまり、ユーザーがロードバランサによってサーバーに誘導された場合、そのユーザーによるその後の要求はすべて同じサーバーに送信されます。

+0

迅速な対応をありがとう。私の意図は、Microsoft AzureでいくつかのTomcatを動かすことです。スティッキセッションの問題は、Azureのロードバランサでサポートされていないことです。このクラウド環境でセッション複製を実現する最も簡単な方法は、セッションをdbに保存することです。 HttpSession拡張モジュールとフィルターのコードサンプルはありますか?あなたのお返事ありがとう – Fabe

+0

@Fabe - 私は例を持っていません、申し訳ありません。 – Bozho

3

this projectをご覧になりたいですが、私はむしろセッションをDBではなくmemcachedに保存することをお勧めします。

+0

私はそれをチェックアウトしました - 非常に興味深いですが、非粘着性のセッションバージョンはプロダクションでは準備ができていません( – Fabe

+0

興味深いプロジェクト、確かに+1 – Bozho

+1

btw、memcached-session-manager 1.4がリリースされました。 – MartinGrotzke

関連する問題