2009-06-02 6 views
5

Nous avons configuré une infrastructure dans laquelle les serveurs Web sont regroupés et non les serveurs d'applications. Les serveurs Web acheminent la requête vers les serveurs d'applications en fonction de la stratégie Round-Robin.Réplication de session sur les machines virtuelles Java dans WebSphere

Dans ce scénario, les données de session disponibles dans un serveur d'applications ne sont pas disponibles dans l'autre serveur d'applications. Existe-t-il un moyen par lequel les données de session du premier serveur d'application peuvent être disponibles dans la deuxième application? Les deux serveurs d'applications sont des boîtes physiquement séparées dans différentes cellules. Une approche pourrait être d'utiliser la base de données - y a-t-il d'autres moyens d'accomplir cette réplication de session?

+0

Je crois que vous pouvez les configurer en tant que cluster dans la console WAS, non? –

Répondre

1

peut-être vous pouvez regarder 'terracota'. son un cadre de mise en cache, ce qui peut mettre en cache des sessions et fonctionne sur un serveur séparé

4

Dans WebSphere il y a essentiellement deux façons de répliquer les données de session:

  1. Persistance à une base de données
  2. mémoire à la mémoire des transferts

Laquelle convient à vos besoins dépend fortement de votre scénario d'application:

Quelle est l'importance de la pe rsistance de vos données de session, lorsque tous vos serveurs d'applications tombent en panne? Combien d'objets de session avez-vous à la fois simultanément?

Dans une base de données vous pouvez stocker beaucoup de sessions sans trop de problèmes, l'autre option est toujours une question de quantité de mémoire disponible.

Je voudrais aller avec la base de données, si vous avez déjà une configuration, que tous les serveurs d'applications utilisent quand même.

Voici le lien vers le WebSphere Information Center avec les détails nécessaires.

+0

Merci pour votre réponse dertoni.Nous utilisons beaucoup de données de session - nous avons convenu que c'était une mauvaise pratique, mais étant une application de maintenance, cela a été un cas si loin de tout. S'il nous arrive d'enregistrer des données dans la base de données, nous devrions les récupérer et repeupler les objets d'application pour réafficher la page attendue qui serait un défi ici. – Subramanian

+0

Savez-vous si websphere réplique des données de session bien que dans le fichier web.xml de l'application Web, la balise 'distributable' ne soit pas présente? http://stackoverflow.com/questions/26043080/does-websphere-replicate-the-session-although-the-web-xml-has-no-distributable-t –

0

ne pas oublier la cohérence oracle.

2

Une solution évidente consiste à activer la mise en cluster de vos serveurs d'applications. Je présume que d'après la façon dont vous avez formulé votre question, vous avez rejeté cette option. Une autre option consiste à modifier le routage utilisé par les serveurs Web pour utiliser l'affinité de session (les demandes de la même session vont sur le même serveur d'applications).

Autre que cela, je seconderais la réponse par dertoni.

+0

Affinité de session serait la solution pauvre-homme à ce problème dans la plupart des circonstances. – Rick

1

Il existe deux options de clustering dans WebSphere, la réplication de session ou la base de données. Si vous avez des objets de session volumineux, il vaut mieux utiliser la base de données car cela vous permet de décharger les sessions périmées sur le disque. Si elles sont ensuite représentées, elles peuvent être extraites de la base de données. Si vous utilisez la réplication de session, ces sessions doivent rester en mémoire non seulement sur votre serveur cible mais également sur les autres serveurs du groupe de réplication. Avec de grandes sessions, cela peut conduire à une condition de mémoire insuffisante.

Avec la gestion de session de base de données, il est également très personnalisable et ne fonctionne pas sensiblement dans les environnements que je l'ai utilisé.

Questions connexes