Tomcatのセッションレプリケーションでスティッキーセッションを使用する場合を評価しています。私の最初の評価から、セッションレプリケーションを有効にすると、1つのTomcatノードで開始されたセッションが他のすべてのTomcatノードにコピーされるため、セッションを続行するためにスティッキーセッションは必要なく、どのノードでもリクエストを取得できると思いました。
ただし、セッションレプリケーションは通常、スティッキーセッションで使用されるようです。それ以外の場合は、リクエストが他のノードに送信されるたびにセッションIDを変更する必要があります。 ref: http://Tomcat.Apache.org/Tomcat-6.0-doc/cluster-howto.html#Bind_session_after_crash_to_failover_node
スティッキーセッションを有効にする必要がある場合、誰でもセッションレプリケーションの実際の使用方法を説明できますか?そのため、特定のセッションIDを持つ要求が常に同じノードに送信される場合、各ノードのセッションを不必要にコピーすることになります。これは、ノードがクラッシュした場合に有益ですが、それが頻繁に発生することはなく、そのためにのみセッションレプリケーションを使用するのはやり過ぎのようです。
本当の利点は、あまり考えずにTomcatインスタンスをシャットダウンできることです。これは特に、ノードが実際に頻繁にオン/オフできるクラウドの世界(Amazon AWSスポットインスタンスと考えてください)に当てはまります。これに代わる方法は、ノードのドレインをサポートする適切なロードバランサーを購入することです。しかし、まともなロードバランサーは高価であり、排出には時間がかかります。
私が考えることができるもう1つのシナリオは、アイテムがHttpSession
に保持されているショッピングカート(の貧弱な実装)であり、シャットダウンすると、ユーザーがそれらを再購入する必要があります(これにより、販売が失われる可能性があります)。
しかし、ほとんどの場合、あなたの言うとおりです。スティッキーセッションとセッションレプリケーションの両方を使用するメリットはほとんどありません。
Mindasが前にそれを説明したように:
ロードバランシングを使用すると、Tomcatのインスタンスがいくつかあり、負荷を分割する必要があります。
Mod_jkを使用した「すべて」の基本構成でのJBoss 5.Xの構成の問題を明確にするためです。 workers.propertiesファイルでのスティッキーセッションの設定
worker.list=loadbalancer
... nodes configuration omitted
worker.loadbalancer.balance_workers=node1,node2
worker.loadbalancer.sticky_session=True
セッションの複製を妨げません。 JBossでセッションレプリケーションをオフにするには、$ JBOSS_HOME\server\YOUR_NODE_NAME\deploy\cluster\jboss-cache-manager.sar\META-INF\jboss-cache-manager-jboss-beans.xml cacheMode
パラメータを設定する必要がありますLOCAL
に。
通常、スティッキーセッションシナリオでは、セッションを複製するために必要な大量のI/O操作に関連する追加のオーバーヘッドが必要ないため、セッションの複製は必要ありません。
実際、スティッキーセッションを使用する場合、JBossを「すべて」の構成で実行する必要はありません。「デフォルト」または「標準」ベースの構成を使用する場合があります。
実行する必要があるのは、$ JBOSS_HOME/server/YOUR_NODE_NAME/deploy/jbossweb.sar/server.xmlの変更だけです。
<Engine name="jboss.web" defaultHost="localhost" jvmRoute="YOUR_NODE_NAME">