J'évalue le cas d'utilisation de sessions collantes avec la réplication de session dans Tomcat. Dès mon évaluation initiale, je pensais que si nous activions la réplication de session, alors la session démarrée dans un nœud Tomcat serait copiée sur tous les autres nœuds Tomcat. Nous n'avons donc pas besoin de session collante pour poursuivre les sessions et la requête peut être prise en charge par n'importe quel nœud. .
Mais il semble que la réplication de session soit généralement utilisée avec des sessions persistantes, sinon l'identifiant de session doit être modifié chaque fois que la demande est envoyée à un autre nœud. ref: http://Tomcat.Apache.org/Tomcat-6.0-doc/cluster-howto.html#Bind_session_after_crash_to_failover_node
Quelqu'un peut-il expliquer quelle est l'utilisation réelle de la réplication de session si vous devez activer une session collante? Dans ce cas, vous copiez inutilement la session sur chaque nœud, lorsque la demande portant un identifiant de session donné est toujours adressée au même nœud. Cela pourrait être bénéfique en cas de panne d’un nœud, mais cela ne se produit pas souvent et l’utilisation de la réplication de session uniquement pour des raisons qui semblent excessives.
Je pense que le seul avantage réel est de pouvoir fermer les instances de Tomcat sans trop y penser. Cela vaut en particulier aujourd'hui dans le monde du cloud (pensez aux instances ponctuelles d'Amazon AWS) lorsque les nœuds peuvent être très souvent allumés et éteints. Une alternative à cela serait d’acheter un équilibreur de charge décent qui supporte le drainage des nœuds. Mais les équilibreurs de charge décents coûtent cher, et le drainage prend du temps.
Un autre scénario auquel je peux penser est une (mauvaise mise en œuvre du) panier dans lequel les articles sont conservés dans la variable HttpSession
et où la fermeture obligerait l'utilisateur à les racheter (ce qui entraînerait probablement une perte de vente).
Mais dans la plupart des cas, vous avez raison: l'avantage d'avoir à la fois des sessions collantes et une réplication de session est très négligeable.
Comme Mindas l'expliquait auparavant:
Lorsque vous utilisez l'équilibrage de charge, cela signifie que vous avez plusieurs instances de Tomcat et que vous devez diviser les charges.
Juste pour clarifier les problèmes de configuration sur JBoss 5.X dans la configuration de base "all" avec mod_jk. Définition de sessions persistantes dans le fichier workers.properties
worker.list=loadbalancer
... nodes configuration omitted
worker.loadbalancer.balance_workers=node1,node2
worker.loadbalancer.sticky_session=True
n'empêche pas la réplication de session. Afin de désactiver la réplication de session sur JBoss, nous devons définir dans $ JBOSS_HOME\server\YOUR_NODE_NAME\deploy\cluster\jboss-cache-manager.sar\META-INF\jboss-cache-manager-jboss-beans.xml cacheMode
paramètre à LOCAL
.
Habituellement, dans le scénario persistant, nous ne voulons pas de réplication de session, car nous ne voulons pas de temps système supplémentaire lié à un nombre important d'opérations d'E/S nécessaires à la réplication de sessions.
En fait, si vous utilisez des sessions persistantes, il n'est pas nécessaire d'exécuter JBoss dans une configuration "all", vous pouvez utiliser une configuration "par défaut" ou "standard".
La seule chose à faire est de changer dans $ JBOSS_HOME/server/YOUR_NODE_NAME/deploy/jbossweb.sar/server.xml:
<Engine name="jboss.web" defaultHost="localhost" jvmRoute="YOUR_NODE_NAME">