Répartition de charge d'une web-app [JSP-Servlet] - Java - Programmation
Marsh Posté le 13-01-2003 à 17:11:11
non le problème est loin d'etre banal et c'est le serveur qui doit s'en occuper.
Typiquement un WAS en intégration horizontale offre ce type de fonctionnalités pour peu que tu utilise la session IBM machin chose, en gros une sous classe de HttpSession (et donc tu perds la généricité de ton code). Je ne sais pas avec WAS 4 ou 5 mais en WAS 3.5 tu étais obligé en tout cas.
Regarde si tomcat offre ce genre de fonctionnalité. Quel système de répartition des charges utilises tu?
Marsh Posté le 13-01-2003 à 17:35:17
il me semble pas que tomcat gère ca mais je peux me tromper.
En théorie, c'est plutot au frontal de gérer ca mais ca signifie qu'il doit être capable de repérer lorsqu'une requête fait partie d'une session ouverte et d'adresser le bon moteur de servlet derrière.
C'est loin d'être évident...
Marsh Posté le 13-01-2003 à 17:37:13
benou a écrit : il me semble pas que tomcat gère ca mais je peux me tromper. |
ah oui mais ca c'est différent hein C'est pour ca que je te demandais quel système de répartition de charge tu utilisais. Ton problème est intéressant cela dit, si j'y pense ce soir je jetterai un coup d'oeil
Marsh Posté le 13-01-2003 à 17:42:20
pkoi tu dis que c'est différent ? c'est en plein dans le problème non ?
Marsh Posté le 13-01-2003 à 17:47:08
Je suis en train de me renseigné sur le système de répartition des charges utilisé (c pas ds ma boite).
Ms je trouve bisare que le problème ne soit pas déja archi connu, plusieurs serveurs pour une web-app, j'imaginais que c'était assez courant...
Marsh Posté le 13-01-2003 à 18:10:04
ben si c'est mod_jk (ce qui est fort probable), il assure le suivi de session. En fait il concatène le nom du worker a la session et le relit a chaque requete, pour le filer au même que précédement.
Si c'est bien ca que tu utilises, je peux te donner plus de détails, je m'étais amusé a lire le source
Marsh Posté le 13-01-2003 à 19:03:55
benou a écrit : pkoi tu dis que c'est différent ? c'est en plein dans le problème non ? |
bin non. Dans le cas de WAS par exemple c'est géré au niveau interne c'est pas le répartissuer de charge qui route la requete sur le bon serveur.
Marsh Posté le 13-01-2003 à 22:49:17
lol
c hyper courant ton truc......
la repartition des charges elle fonctionne comment?
la phrase qui me perturbe, et une session ouverte sur le serveur A est EVIDEMENT inexistante sur le serveur B
c pas possible de cloner les sessions?
je deconne bien sur.
enfin c qd même bizarre que le repartiteur de charge ne gère pas les sessions des serveurs avec. c quoi ce repartiteur suit trés curieux
bahhh dis moi le nom que je note.
ON VEUT CONNAITRE L'ARCHITECTURE DE TES SERVEURS
c hyper interessant ton sujet
ben tu l'as testé ton appli web?
ça fait quoi alors quand tu te connectes sur A, et B ensuite
heuuuuuu au fait IIS c bien?
Apache c pas mieux au fait?
Marsh Posté le 13-01-2003 à 23:51:06
ReplyMarsh Posté le 14-01-2003 à 03:00:26
ReplyMarsh Posté le 14-01-2003 à 09:06:37
Les clients n'ont pas encore répondu au mail ds lequel je demande comment est gérée leur répartition de charge. Mais en fait, g ma petite idée quand au pb. J'imagine que leur répartition de charge est faite au niveau d'IIS, avec un truc qui ne "connait" même pas l'existance de Tomcat (il n'y connaissent vraiment pas grand chose, c tjs moi qui dois leur dire comment faire quoi !). Ds ce cas là, ce ne serait pas étonnant que les sessions de Tomcat (Servlet/JSP) ne soient pas maintenues d'un serveur à l'autre, non ?
Marsh Posté le 14-01-2003 à 09:13:37
einstein2 a écrit : |
G testé mon appli web. J'vois pas l'rapport.
Qd j'me connecte sur A et que B répond !? g pas essayé (g lu un rapport du client!), ms ça me parait évident que, d'un coup, le client à une réponse comme quoi il est pas connecté.
IIS, si c bien. J'en sais rien. Moi je l'utilise que pour test. Pour tests il fonctionne, Apache aussi !
Marsh Posté le 14-01-2003 à 10:27:48
il me semble qu'en substance, le gusse te disais qu'il fallait que tu gères des sessions partagés. Ca signiffie mettre en place de la distribution d'objet, etc ...
Si il t'avais fillé des liens de produit qui gérait ca, son poste aurait été nettement plus utile !
Marsh Posté le 14-01-2003 à 10:45:58
benou a écrit : il me semble qu'en substance, le gusse te disais qu'il fallait que tu gères des sessions partagés. Ca signiffie mettre en place de la distribution d'objet, etc ... |
sans doute ouais, parce que là...
Marsh Posté le 14-01-2003 à 13:49:32
lorill a écrit : ben si c'est mod_jk (ce qui est fort probable), il assure le suivi de session. En fait il concatène le nom du worker a la session et le relit a chaque requete, pour le filer au même que précédement. |
Pr l'instant, je sais pas ce que le client utilise. Mais peut être que si c pas le cas, on peut lui imposer d'utiliser ça. ça m'interresse énormément ce que tu me dis là. Tu peux approfondir ?
Marsh Posté le 14-01-2003 à 13:55:53
El_gringo a écrit : |
ben en fait j'y crois plus trop la... C'est un module apache qui fait la redirection vers le worker tomcat quivabien(tm), mais s'ils utilisent IIS, ca doit pas être ca... a moins que ca marche aussi, faut que je verifie
Marsh Posté le 14-01-2003 à 13:56:00
El_gringo a écrit : |
Ha... ça m'interresse qd même, me je suis qd même vachement déçu. Apparement, mod_jk, c ce qui fait le lien entre Tomcat4 et le serveur web Appache. G dit que le client utilisait (pour l'instant) IIS et Tomcat4... :-(
Marsh Posté le 14-01-2003 à 13:57:35
aparement y'a aussi jk pour iis, cf
http://jakarta.apache.org/tomcat/t [...] howto.html
Marsh Posté le 14-01-2003 à 13:57:52
lorill a écrit : |
J'en doute ! Pour la redirection IIS-Tomcat aussi on utilise une module. Mais celui-ci est écrit en C++. Je doute qu'il ai sont mot à dire sur les sessions et compagnie. Et mon avis, il se contente de prendre l'html généré par Tomcat et de le brancher sur IIS...
Marsh Posté le 14-01-2003 à 13:59:41
lorill a écrit : aparement y'a aussi jk pour iis, cf |
Ho !? miracle... c ce que j'utilise.
Et comment tu configure pour cette séparation dont tu parles !?
Marsh Posté le 14-01-2003 à 14:05:58
Le config du module IIS ressemble à celle de mod_jk pour Apache ?
Marsh Posté le 14-01-2003 à 14:06:42
comme ca :
http://jakarta.apache.org/tomcat/t [...] howto.html
avec ca et l'url précédente tu devrais t'en tirer, mais je peux te rassurer, c'est le module qui assure le suivi de session.
Marsh Posté le 14-01-2003 à 14:07:30
El_gringo a écrit : Le config du module IIS ressemble à celle de mod_jk pour Apache ? |
chais pas, jamais utilisé IIS, mais vu que c'est fait par les mêmes, au sein du même projet, doit bien y'avoir des trucs identiques (style la definition des workers)
Marsh Posté le 14-01-2003 à 14:15:47
lorill a écrit : comme ca : |
J'étais déja en train de lire ça, merci.
ça m'a l'air bon tout ça, très bon. Lorill, je sent que tu vas être mon sauveur...
Marsh Posté le 14-01-2003 à 14:18:07
El_gringo a écrit : |
faut dire merci aux gens qui maintiennent JK.
ca fait toujours plaisir
Marsh Posté le 14-01-2003 à 14:32:09
Ha... merde, ce que j'étais en train de lire, j'pense pas que ça soit vraiment ce que je cherche. Ils expliquent comment créer plusieurs worker (1 par instance de Tomcat j'imagine). Mais ça, ça permet de répartir la charge selon l'url demandée, tu crois pas ?
|
Toi t'avais rien à configurer pour que le mécanisme dont tu parlais fonctionne ?
"il concatène le nom du worker a la session et le relit a chaque requete, pour le filer au même que précédement"
Marsh Posté le 14-01-2003 à 14:38:04
Ms en fait, j'y pense, pour le mécanisme dont tu parlais, il faut n'avoir qu'une seule instance du serveur web (Apache ou IIs), et autant d'instance de Tomcat qu'on veut, non ?
Je suis sur qu'ils font tourner 2 IIS à la fois. C impossible que ça marche comme ça !
Marsh Posté le 14-01-2003 à 14:53:42
Apparement, que ce soit pour servir Apache ou IIS, on s'en fout. Ma question est : comment paramètrer plusieurs "worker", ou chaque "worker" correspond à une instance de Tomcat. Ces worker étant utilisés pour répartir la charge, ils seront utilisés indifférement de l'url demandée.
Lorill, tu sais répondre à cette question simplement ou pas ?
Marsh Posté le 14-01-2003 à 15:00:57
ha bon j'ai ecrit que des conneries?
ben j'attend les explications alors ...
les sessions doivent etre prises en charge par le repartiteur, c le mieux amha, car c'est le seul élément de l'architecture qui coordonne les taches sur les serveurs, les serveurs eux recoivent une requete mais le fait que l'on rajoute un serveur est transparent pour lui.
aprés que la requete aille sur a, b, c ....ou x on s'en contre balance si le repartiteur a bien fait son boulot tous les serveurs connaissent le USER.
moi je vois un ordinateur Frontal qui distribue avec des serveurs derrière....pkoi vous voyez koi vous?
si ça existe pas, faut le faire, le programmer koi!
Marsh Posté le 14-01-2003 à 15:34:17
El_gringo a écrit : comment paramètrer plusieurs "worker", ou chaque "worker" correspond à une instance de Tomcat. Ces worker étant utilisés pour répartir la charge, ils seront utilisés indifférement de l'url demandée. |
je peux essayer
pour plus de détails faudra attendre ce soir (si je retrouve mon rapport de stage, c'est pas gagné).
En gros, tu as un fichier workers.properties dans lequel tu mets la config des workers : nom, incrément de charge (pour pouvoir diriger plus de trafic sur un que sur l'autre), port, host, ...).
Un worker est bel et bien une instance de tomcat.
Apres, dans la config d'apache (je sais pas pour iis), tu précise s quels sont les chemins (urls) a traiter avec jk. Par exemple JkMount /mawebapp/* malistedeworkers.
Quand apache recoit une requete sur /mawebapp/ il appelle le module, qui traite la requete.
Marsh Posté le 14-01-2003 à 16:26:30
lorill a écrit : |
ça g déja vu comment faire pour déclarer plusieurs worker. Ce qui me pose pb, c'est : comment dire à jk d'utiliser tel ou tel worker de telle ou telle façon. parce que ds l'exemple que g vu, ils font ça (ds uriworkermap.properties) :
|
ce qui dit d'utilise tel ou tel worker selon l'url. ça m'interresse pas ça. C que je voudrais c'est ce dont tu parles : l'incrément de charge.
lorill a écrit : |
Cette partie est déja faite, elle fonctionne nickel.
Si tu peux me parler plus de ça, j'pense que t'as compris que ça m'interresse vraiment très très beaucoup...
@+
Marsh Posté le 14-01-2003 à 16:31:12
El_gringo a écrit :
|
ben si tu précises de worker par url il fait la répartition de charge de base : 50% des requetes sur le premier, 50% sur le deuxieme, a peu pres.
l'incrément de charge (lbfactor dans la doc jk) sert juste a biaser la répartition, pour avoir 75% sur l'un et 25% sur l'autre, par exemple.
Marsh Posté le 14-01-2003 à 16:51:23
lorill a écrit : |
Comment ça !? moi j'aurais dit que, ds le cas que je te présente, "worker1" va prendre 100% des requêtes du contexte "/example/" et "worker2" va prendre 100% des requêtes sur "/webpages/".
Je cherche pas ça moi...
Marsh Posté le 14-01-2003 à 16:53:26
El_gringo a écrit : |
j'ai mal lu, désolé.
en fait ca doit etre un truc style :
/mmawebapp/*=worker1,worker2
je verifie ce soir
Marsh Posté le 14-01-2003 à 17:28:48
lorill a écrit : |
c cool. Merci.
Marsh Posté le 15-01-2003 à 11:05:22
El_gringo a écrit : t'as pas u l'temps de voir Lorill ? |
j'y ait pas pensé, désolé
t'as essayé de mettre
chemin=listedesworkers ?
Marsh Posté le 15-01-2003 à 11:42:07
Non, ms j'fais d'autre trucs en ce moment, j'demandais ça comme ça. Si t'as pas l'temps, j'pense que j'me débrouillerais.
Marsh Posté le 15-01-2003 à 16:55:39
Fiou, c pas simple tout ça.
Ms bon, g trouvé.
En fait, si on a 2 worker de type ajp13 (worker simple correspondant à une instance de Tomcat4.x ou 5.x, il faut un autre worker, de type lb (loadBalancer), qui ne correspond pas à une instance de Tomcat, mais qui à pour but d'équilibrer les requêtes entre les 2 worker ajp13.
Personne ne m'écoute, ms c pas grave. Voila la solution à mon pb :
|
Marsh Posté le 13-01-2003 à 17:08:07
Alors, voila mon pb. Je suis sur qu'une solution existe, surement dans J2EE.
J'ai une web-app, qui utilise le système de sessions de l'API de servlets. Tomcat4, IIS, jdk1.4
On fait tourner ma web-app sur 2 serveurs différents (donc 2 moteurs de servlet, 2 serveurs web). On utilise un système de répartition des charges, qui répartie chacune des requètes sur un des 2 serveurs.
Le problème est le suivant : Quand un utilisateur ouvre une session sur le serveur A, rien ne guaranti que celui-ci n'émmettra de requêtes, ni ne recevra de réponses QUE sur ce même serveur A. Et une session ouverte sur le serveur A est évidement inexistante sur le serveur B. D'ou : problème si la requète n'abouti pas sur le même serveur.
Le problème doit être assez banal, qqn saurait me dire comment le résoudre ?