web-dev-qa-db-fra.com

mod_proxy vs mod_proxy_ajp vs mod_jk

Nous nous préparons à la migration de l'environnement suivant:

Apache 2.0.2 --AJP -> JBoss4.2.2

à

Apache 2.2.3 - ??? -> JBoss 5.1.0

Comment allez-vous rejoindre les deux ensemble?

Les options sont:

  1. AJP classique (signifie bâtiment mod_jk pour Apache)
  2. mod_proxy (transfert des demandes HTTP à JBoss)
  3. mod_proxy_ajp

L'option 2 est la solution la plus populaire pour le moment car elle semble signifier moins de traitement dû à une nécessité plus nécessaire de traduire les réponses de JBoss de l'AJP et que le temps de la CPU est quelque chose que nous devons garder un œil étroit dans notre infrastructure. Les options 2 et 3 sont également équipées de la construction Apache pris en charge par Red Hat.

Pour le moment, je ne peux pas nous voir aller pour l'option 1, car nous obtenons une AJP 'gratuitement' avec l'option 3.

Par conséquent, quels sont les avantages et les inconvénients des options 2 et 3? La préoccupation concernant la charge de la CPU est-elle vraiment quelque chose que nous devons nous inquiéter? Ce que nous perdons dans la transformation des données binaires (trafic AJP) nous revenons dans la bande passante réduite et io?

Notre infrastructure sera Apache fronting jusqu'à 9 Jbosses fortement réglées (mais généralement environ la moitié de cela) sur la même machine Rhel 5, qui est virtualisée dans un nuage privé.

Merci d'avance pour tous les pointeurs/conseils.

Riche

9
Rich

2 mod_proxy_http, sauf si vous avez besoin de l'en-tête d'hôte du client.

Je ne recommande pas classique mod_jk car sa fonctionnalité a été remplacée par mod_proxy_ajp et comme vous l'avez dit vous-même, cela nécessite de construire et de maintenir ce module vous-même.

Je pense que mod_proxy_http est une solution très propre et cela prend AJP hors de la photo. Cependant, vous devriez être au courant de quelques mises en garde pour passer d'AJP à HTTP. Si vous avez besoin d'accéder aux en-têtes de serveur exactement tels qu'ils ont été reçus par Apache (y compris l'en-tête d'hôte), vous devez utiliser AJP. JBoss verra une nouvelle demande HTTP venant d'Apache, pas du client d'origine. Si vous n'avez besoin que de l'IP distante du client, vous pouvez toujours l'obtenir avec un en-tête spécial que Apache peut définir sur les nouvelles demandes. Toutefois, si vous effectuez une hébergement virtuelle à partir du calque d'application, vous ferez mieux avec AJP.

En ce qui concerne les performances, AJP ou HTTP nécessitera un certain traitement par JBoss et une prise locale TCP Trafic. Vous devrez essayer les deux de voir ce qui est plus efficace, mais je pense que je pense que Globalement, il s'agit d'un très faible pourcentage de la charge totale du serveur. HTTP est un protocole plus compliqué et AJP est spécialement conçu pour fonctionner efficacement entre les niveaux Web et l'APP, de sorte que théoriquement ajp est probablement meilleur. Cela dit, j'ai trouvé que http est souvent mieux supporté. en dehors de la ligne Tomcat App Serveur.

J'utilise mod_proxy_ajp et mod_proxy_http et je n'ai eu aucun problème que ce soit.

8
e_tothe_ipi