Tomcat / jBOSS およびその他の Java アプリケーション サーバーについて質問があります。セッション (セッション データ) はどこに保存されますか?
デフォルトでは、メモリ内で言うでしょう。詳細は実際には...アプリケーションサーバー固有の実装の詳細です。
PHP では、通常、セッションはデータベースに保存されます。つまり、負荷分散された環境でセッション データを簡単に共有できます。Tomcat およびその他のアプリケーション サーバーでは、セッションはデフォルトでメモリに保存されているように見えますが、負荷分散された環境には適用されません。
まあ、正確ではありません。これが意味することは、クラスタ化された環境でクライアント要求を同じノードに送信する必要があり (これは「セッション スティッキネス」と呼ばれます)、これは負荷分散の観点からは問題ではありません。ただし、これはフェイルオーバーの観点からの問題です。クラスター内のノードに障害が発生した場合、ノードによって管理されているセッション状態が失われる可能性があります。これを解決するために、ほぼすべてのアプリケーション サーバー プロバイダーがセッション フェイルオーバーを実装しています (インメモリ レプリケーション、JDBC ベースの永続性などのさまざまなメカニズムを使用)。ただし、繰り返しになりますが、実装の詳細はアプリケーション サーバー固有です。たとえば、TomcatまたはWebLogicがそれをどのように処理するかを参照してください。The Server Side のUnder the Hood of J2EE Clustering記事も非常に興味深い読み物です。
PHP がデフォルトでセッションをファイルに保存するのは事実ですが、それを DB に接続するには数行かかります。アプリケーションサーバーにも同じことが言えますか?
前述したように、すべてのアプリケーション サーバーが JDBC ベースの永続性を提供するわけではありません。そうは言っても、あなたの質問に答えるために、構成は一般的に簡単です。しかし、データベースを使用することは、実際には好ましい解決策ではありません (実際、私はそれを絶対に避けています)。
基本的に、メモリ内でセッションをストーリー化する利点は何ですか? これはまだアプリケーション サーバーの標準的な方法ですか?
簡単に言えば、パフォーマンス!データのシリアル化、データベースの呼び出し、ディスクへの書き込み、これらすべてにコストがかかります。インメモリ レプリケーションを使用すると、オーバーヘッドをある程度回避できます。しかし、それにもいくつかの制限があります。たとえば、WebLogic でのWAN HTTP セッション ステート レプリケーションは許可されません。しかし、まあ、これを必要とする人はごくわずかです:)