mod_proxy vs mod_proxy_ajp vs mod_jk


9

Ci stiamo preparando per la migrazione dal seguente ambiente:

Apache 2.0.2 --AJP -> JBoss4.2.2

per

Apache 2.2.3 - ??? -> JBoss 5.1.0

Come uniresti i due insieme?

Le opzioni sono:

  1. AJP classico (significa costruire mod_jk per Apache)
  2. mod_proxy (inoltro di richieste HTTP a JBoss)
  3. mod_proxy_ajp

L'opzione 2 è la soluzione più popolare al momento perché sembra significare meno elaborazione a causa della non necessità più di tradurre le risposte di JBoss da AJP e il tempo della CPU è qualcosa che dobbiamo tenere d'occhio nella nostra infrastruttura. Le opzioni 2 e 3 vengono fornite anche con la build Apache supportata da Red Hat.

Al momento non riesco a vederci scegliere l'opzione 1, poiché otteniamo AJP "gratuitamente" con l'opzione 3.

Pertanto, quali sono i pro e i contro delle opzioni 2 e 3? La preoccupazione per il carico della CPU è davvero qualcosa di cui dobbiamo preoccuparci? Cosa perdiamo nell'elaborazione dei dati binari (traffico AJP) in una larghezza di banda e IO ridotti?

La nostra infrastruttura sarà Apache in grado di supportare fino a 9 JBoss fortemente sintonizzati (ma di solito circa la metà) tutti sullo stesso computer RHEL 5, che è virtualizzato in un cloud privato.

Grazie in anticipo per eventuali suggerimenti / consigli.

Ricco

Risposte:


8

2 mod_proxy_http, a meno che non sia necessaria l'intestazione Host dal client.

Non consiglio il classico mod_jk perché la sua funzionalità è stata sostituita da mod_proxy_ajp e, come hai detto tu stesso, richiede di costruire e mantenere quel modulo da solo.

Penso che mod_proxy_http sia una soluzione molto pulita e toglie il controllo. Tuttavia, dovresti essere consapevole di alcuni avvertimenti per passare da Ajp a http. Se hai bisogno di accedere alle intestazioni del server esattamente come sono state ricevute da apache (inclusa l'intestazione Host), dovresti usare ajp. JBoss vedrà una nuova richiesta http proveniente da apache, non dal client originale. Se hai solo bisogno dell'IP remoto del client, puoi comunque ottenerlo con un'intestazione speciale che apache può impostare sulle nuove richieste. Tuttavia, se stai eseguendo un hosting virtuale dal livello dell'applicazione, stai meglio con ajp.

Per quanto riguarda le prestazioni, ajp o http richiedono l'elaborazione da parte di JBoss e del traffico TCP socket locale. Dovrai provare entrambi per vedere quale è più efficiente, ma penso che nel complesso sia una percentuale molto piccola del carico totale del server. Http è un protocollo più complicato e ajp è specificamente progettato per essere efficiente tra i livelli Web e app, quindi teoricamente ajp è probabilmente migliore. Detto questo, ho scoperto che http è spesso meglio supportato al di fuori della linea del server di app Tomcat.

Uso mod_proxy_ajp e mod_proxy_http e non ho avuto nessun problema.


L' Hostintestazione verrà passata correttamente se si utilizzaProxyPreserveHost On
Derf

Quando si lavora con Apache mod_proxy, consultare httpd.apache.org/docs/2.4/mod/mod_proxy.html#x-headers . Se si configura RemoteIpValve come parte del servlet Tomcat, il codice dell'applicazione può ottenere la maggior parte delle informazioni in modo trasparente tomcat.apache.org/tomcat-8.0-doc/config/…
Scott Markwell,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.