Question mod_proxy vs mod_proxy_ajp vs mod_jk


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

Apache 2.0.2 --AJP -> JBoss4.2.2

à

Apache 2.2.3 - ??? -> JBoss 5.1.0

Comment voulez-vous joindre les deux ensemble?

Les options sont:

  1. AJP classique (signifie construire mod_jk pour Apache)
  2. mod_proxy (transfert de requêtes HTTP vers JBoss)
  3. mod_proxy_ajp

L'option 2 est la solution la plus populaire pour le moment, car elle semble entraîner moins de traitement du fait de la nécessité de ne plus traduire les réponses de JBoss à AJP, et le temps de calcul est une chose que nous devons surveiller de près dans notre infrastructure. Les options 2 et 3 sont également fournies avec la version Apache prise en charge par Red Hat.

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

Par conséquent, quels sont les avantages et les inconvénients des options 2 et 3? Est-ce que le problème de la charge du processeur nous préoccupe vraiment? Ce que nous perdons dans le traitement des données binaires (trafic AJP), est-ce que nous obtenons en bande passante réduite et en IO?

Notre infrastructure sera frontale Apache Jusqu'à 9 JBoss fortement optimisés (mais généralement environ la moitié) sur la même machine RHEL 5, virtualisée dans un cloud privé.

Merci d'avance pour tout pointeurs / conseils.

Riches


8
2017-09-17 12:44


origine




Réponses:


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

Je ne recommande pas classic mod_jk car ses fonctionnalités ont été remplacées par mod_proxy_ajp et, comme vous l'avez dit vous-même, il est nécessaire de construire et de maintenir ce module vous-même.

Je pense que mod_proxy_http est une solution très propre et qu’elle supprime le travail en ajp. Cependant, vous devez être conscient de quelques mises en garde pour passer de ajp à http. Si vous avez besoin d'accéder aux en-têtes du serveur exactement comme ils ont été reçus par Apache (y compris l'en-tête Host), vous devez utiliser ajp. JBoss verra une nouvelle requête http venant d'Apache, pas du client d'origine. Si vous n'avez besoin que de l'adresse IP distante du client, vous pouvez toujours l'obtenir avec un en-tête spécial que Apache peut définir pour les nouvelles demandes. Toutefois, si vous effectuez un hébergement virtuel à partir de la couche d'application, il vaut mieux utiliser ajp.

En ce qui concerne les performances, ajp ou http nécessitera un traitement de JBoss et du trafic TCP de socket local. Vous devrez essayer les deux pour voir ce qui est le plus efficace, mais je pense que dans l’ensemble, 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écifiquement conçu pour efficacement entre le Web et les applications, donc théoriquement, ajp est probablement meilleur. Cela dit, j’ai constaté que le protocole http est souvent mieux pris en charge en dehors de la ligne du serveur d’applications Tomcat.

J'utilise mod_proxy_ajp et mod_proxy_http et je n'ai rencontré aucun problème.


7
2017-09-17 17:11



Quand on travaille avec Apache, mod_proxy regarde httpd.apache.org/docs/2.4/mod/mod_proxy.html#x-headers. Si vous configurez RemoteIpValve dans le cadre de votre servlet Tomcat, votre code d'application peut obtenir la plupart des informations de manière transparente. tomcat.apache.org/tomcat-8.0-doc/config/… - Scott Markwell


le Host en-tête sera passé correctement si vous utilisez ProxyPreserveHost On


3
2018-06-12 18:08