2011-02-26 14 views
4

ラウンドロビンによっていくつかのtomcat-instanceにリクエストが提供される構成で、tomcat-instancesを実行したいとします。私は内部クラスタマネージャを使用したくない。ラウンドロビンモードでのTomcatの使用

すべてのリクエストが別のtomcatsによって提供されているかぎり、未知のsessionIdがtomcatに到着するため、新しいセッションを作成して古いsessionIdを上書きすることになります。したがって、リクエストごとに新しいセッションが作成されます。これはオーバーヘッドのようです。

私の見解は正しいですか? tomcatsセッション管理を無効にする方法はありますか?アプリケーションは、単にそれにアクセスいけない、セッションを必要としないので、もしあなたのコードがセッションを要求したら

よろしく、 マイケル

+0

代わりにServerFaultでこの質問をすることがありますか?プログラミングよりもシステム管理に関連しています。 –

答えて

-1

セッションにのみ作成されます。中のgetSession()のセクションをチェックアウトしたHttpServletRequest

http://download.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html#getSession(boolean

私はあなたが、あなたが使用できるセッションのない一部のユーザーの状態を必要とする場合が異なるのTomcatインスタンス間でセッションを複製する方法があるかどうかわかりません代わりにクッキー。

編集:セッションを複製する必要がある場合は、おそらくこのTomcatドキュメントを読むことから始めることができます。 http://tomcat.apache.org/tomcat-5.5-doc/cluster-howto.html

1

通常、Tomcatインスタンス全体のリクエストの負荷を分散するために、Apache Webサーバーの背後にあるmod_jkのTomcatを使用しました。

sticky sessionsとすると、ユーザーは最初の要求時にのみセッションを取得し、その後はセッションが開始された場所のTomcatに常に誘導されます。したがって、すべてのTomcatにセッションを複製する必要はなく、要求はTomcatにも分散されます。

もちろん、これはあなたが求めていた何らかのラウンドロビンを保証しません。彼らはいずれかのTomcatのノードが到達可能になるよう

1)あなたのセッションを複製:

3

は、基本的には2つの選択肢があります。ソリューション:Tomcat Clustermemcached-session-manager、おそらくその他。

2)ロードバランサを使用し、スティッキセッションを実装します。最初の要求はラウンドロビン単位でランダムにルーティングされますが、後続の要求は同じサーバーに固定されます。ソリューション:mod_proxy、ハードウェアトラフィックマネージャ。

第1の選択肢の欠点は、セッションレプリケーションが高価で、信頼性が高くなく、しばしばデータをセッションに入れることだけであることです。

第2のアプローチの欠点は、メンテナンスのためにTomcatをシャットダウンすると、ユーザーは強制的に再度ログインすることになります。

「要求ごとに新しいセッションが作成される」と誤って想定しています。新しいセッションは、同じサーバー上で前に作成されていない場合、または作成されたが期限切れになっている場合にのみ作成されます。