2

序文: 私は Java 開発者ではありません。

Tomcat / jBOSS およびその他の Java アプリケーション サーバーについて質問があります。セッション (セッション データ) はどこに保存されますか? PHP では、通常、セッションはデータベースに保存されます。つまり、負荷分散された環境でセッション データを簡単に共有できます。Tomcat およびその他のアプリケーション サーバーでは、セッションはデフォルトでメモリに保存されているように見えますが、負荷分散された環境には適用されません。PHP がデフォルトでセッションをファイルに保存するのは事実ですが、それを DB に接続するには数行かかります。アプリケーションサーバーにも同じことが言えますか?

基本的に、メモリ内でセ​​ッションをストーリー化する利点は何ですか? これはまだアプリケーション サーバーの標準的な方法ですか? 皆さんありがとう!

4

3 に答える 3

15

Tomcat / jBOSS およびその他の Java アプリケーション サーバーについて質問があります。セッション (セッション データ) はどこに保存されますか?

デフォルトでは、メモリ内で言うでしょう。詳細は実際には...アプリケーションサーバー固有の実装の詳細です。

PHP では、通常、セッションはデータベースに保存されます。つまり、負荷分散された環境でセッション データを簡単に共有できます。Tomcat およびその他のアプリケーション サーバーでは、セッションはデフォルトでメモリに保存されているように見えますが、負荷分散された環境には適用されません。

まあ、正確ではありません。これが意味することは、クラスタ化された環境でクライアント要求を同じノードに送信する必要があり (これは「セッション スティッキネス」と呼ばれます)、これは負荷分散の観点からは問題ではありません。ただし、これはフェイルオーバーの観点からの問題です。クラスター内のノードに障害が発生した場合、ノードによって管理されているセッション状態が失われる可能性があります。これを解決するために、ほぼすべてのアプリケーション サーバー プロバイダーがセッション フェイルオーバーを実装しています (インメモリ レプリケーション、JDBC ベースの永続性などのさまざまなメカニズムを使用)。ただし、繰り返しになりますが、実装の詳細はアプリケーション サーバー固有です。たとえば、TomcatまたはWebLogicがそれをどのように処理するかを参照してください。The Server Side のUnder the Hood of J2EE Clustering記事も非常に興味深い読み物です。

PHP がデフォルトでセッションをファイルに保存するのは事実ですが、それを DB に接続するには数行かかります。アプリケーションサーバーにも同じことが言えますか?

前述したように、すべてのアプリケーション サーバーが JDBC ベースの永続性を提供するわけではありません。そうは言っても、あなたの質問に答えるために、構成は一般的に簡単です。しかし、データベースを使用することは、実際には好ましい解決策ではありません (実際、私はそれを絶対に避けています)。

基本的に、メモリ内でセ​​ッションをストーリー化する利点は何ですか? これはまだアプリケーション サーバーの標準的な方法ですか?

簡単に言えば、パフォーマンス!データのシリアル化、データベースの呼び出し、ディスクへの書き込み、これらすべてにコストがかかります。インメモリ レプリケーションを使用すると、オーバーヘッドをある程度回避できます。しかし、それにもいくつかの制限があります。たとえば、WebLogic でのWAN HTTP セッション ステート レプリケーションは許可されません。しかし、まあ、これを必要とする人はごくわずかです:)

于 2009-12-17T18:23:24.283 に答える
3

提供されているセッション マネージャーを使用すると、セッションは常にメモリ内に保持されますが、セッションを JDBC ストアに永続化するためのマネージャーがあります。

http://tomcat.apache.org/tomcat-5.5-doc/config/manager.html

PHP とは異なり、セッションは引き続きメモリからアクセスされ、メモリ制限に達したとき、またはサーバーのシャットダウン時にのみ DB に永続化されます。したがって、これが機能するには、ロードバランサーにスティッキー ルーティングが必要です。

インメモリ セッションのメリットは、すべてのトランザクションでデータベース アクセスが発生しないため、パフォーマンスが向上することです。

独自のセッション マネージャーを記述して、PHP の動作をシミュレートできます。

于 2009-12-17T16:20:15.720 に答える
1

JavaEE 仕様はこれを規定していません。決定するのは個々の実装次第です。たとえば、Tomcat で負荷分散を処理する通常の方法は、複製されたセッションを使用することです。この場合、セッション データはノード間でマルチキャストされます。セッション データをデータベースに保存すると、パフォーマンスが大幅に低下します。Tomcat はそれをサポートしているかもしれませんが、私はあまりお勧めしません。

于 2009-12-17T14:14:23.897 に答える