3

スケーラブルなクラウド環境で使用できるように、Tomcat の HttpSessions をディスクに保持したいと考えています。ポイントは、(クラウド PaaS 内に) 多数の Tomcat ノードが稼働し、クライアントをそれらのいずれかに誘導できることです。共有ディスク装置からセッションを保持してロードしたいと考えています。

PersistentManager を次のように構成しました。

context.xml

<Manager className="org.apache.catalina.session.PersistentManager">
   <Store className="org.apache.catalina.session.FileStore" directory="c:/somedir"/>
</Manager>

問題は、セッションが明らかにディスクにフラッシュされないことです。

<Manager>maxIdleBackup を追加して構成を変更しました。

<Manager className="org.apache.catalina.session.PersistentManager maxIdleBackup="1">

このようにして、セッションがディスクに永続化されるまで、ほぼ 1 分かかります。奇妙なことに、ドキュメントには約 1 秒かかると記載されています。

maxIdleBackup : セッションに最後にアクセスしてから、セッション ストアに永続化できるようになるまでの時間間隔 (秒単位)、または -1 でこの機能を無効にします。デフォルトでは、この機能は無効になっています。

その他の構成:

ドキュメントに従って、システムプロパティを設定しました

org.apache.catalina.session.StandardSession.ACTIVITY_CHECK -> true

セッションをすぐにディスクにフラッシュする方法はありますか? セッションの変更もすぐに永続化することはできますか?

アップデート:

を使用してセッションのパッシベーションとディスクへのフラッシュを強制しようとしましたmaxIdleBackup="0" minIdleSwap="0" maxIdleSwap="1"が、それでも約 1 分かかります。

4

3 に答える 3

4

Tomcat ディストリビューションの一部であるこのバルブを使用することもできます (少なくともバージョン 8):

<Valve className="org.apache.catalina.valves.PersistentValve"/>

このノードは<Manager className="org.apache.catalina.session.PersistentManager">、ファイル内のノードの前に挿入する必要がありcontext.xmlます。

次に、ストアを使用して、各 http 要求でセッションを維持します。ドキュメントでは、同じクライアントによって一度に 1 つの HTTP リクエストのみが行われることを想定していることに注意してください。

これにより、Java ee サーバーの前で非スティッキー セッション ロード バランサを使用できるようになります。

于 2016-06-02T11:29:51.930 に答える