mod_proxy vs mod_proxy_ajp vs mod_jk

9

Wir bereiten die Migration aus der folgenden Umgebung vor:

Apache 2.0.2 --AJP -> JBoss4.2.2

zu

Apache 2.2.3 - ??? -> JBoss 5.1.0

Wie würden Sie die beiden zusammenbringen?

Optionen sind:

  1. Klassisches AJP (bedeutet, mod_jk für Apache zu erstellen)
  2. mod_proxy (Weiterleitung von HTTP-Anforderungen an JBoss)
  3. mod_proxy_ajp

Option 2 ist derzeit die beliebteste Lösung, da sie weniger Verarbeitung zu bedeuten scheint, da die Antworten von JBoss aus AJP nicht mehr übersetzt werden müssen. Die CPU-Zeit müssen wir in unserer Infrastruktur genau beobachten. Die Optionen 2 und 3 werden auch mit dem von Red Hat unterstützten Apache-Build geliefert.

Im Moment kann ich nicht sehen, dass wir uns für Option 1 entscheiden, da wir AJP mit Option 3 "kostenlos" erhalten.

Welche Vor- und Nachteile haben die Optionen 2 und 3? Ist die Sorge um die CPU-Auslastung wirklich etwas, worüber wir uns Sorgen machen müssen? Was wir bei der Verarbeitung von Binärdaten (AJP-Verkehr) verlieren, erhalten wir bei reduzierter Bandbreite und E / A zurück?

Unsere Infrastruktur wird Apache sein, das bis zu 9 stark abgestimmte JBosses (aber normalerweise etwa die Hälfte davon) auf derselben RHEL 5-Maschine installiert, die in einer privaten Cloud virtualisiert ist.

Vielen Dank im Voraus für Hinweise / Ratschläge.

Reich

Reich
quelle

Antworten:

8

2 mod_proxy_http, es sei denn, Sie benötigen den Host-Header vom Client.

Ich empfehle klassisches mod_jk nicht, da seine Funktionalität durch mod_proxy_ajp ersetzt wurde und wie Sie selbst sagten, das Modul selbst erstellt und gewartet werden muss.

Ich denke, mod_proxy_http ist eine sehr saubere Lösung und nimmt ajp aus dem Bild. Beachten Sie jedoch einige Einschränkungen beim Wechsel von ajp zu http. Wenn Sie genau so Zugriff auf die Server-Header benötigen, wie sie von Apache empfangen wurden (einschließlich des Host-Headers), sollten Sie ajp verwenden. JBoss sieht eine neue http-Anfrage von Apache, nicht vom ursprünglichen Client. Wenn Sie nur die Remote-IP des Clients benötigen, können Sie diese dennoch mit einem speziellen Header abrufen, den Apache für die neuen Anforderungen festlegen kann. Wenn Sie jedoch virtuelles Hosting über die Anwendungsschicht durchführen, sind Sie mit ajp besser dran.

In Bezug auf die Leistung erfordert entweder ajp oder http eine Verarbeitung durch JBoss und etwas lokalen Socket-TCP-Verkehr. Sie müssen beide versuchen, um herauszufinden, was effizienter ist, aber ich denke, insgesamt ist es ein sehr kleiner Prozentsatz der gesamten Serverlast. HTTP ist ein komplizierteres Protokoll, und Ajp wurde speziell entwickelt, um effizient zwischen Web- und App-Ebenen zu wechseln. Theoretisch ist Ajp wahrscheinlich besser. Trotzdem habe ich festgestellt, dass http außerhalb der Tomcat-App-Server-Linie häufig besser unterstützt wird.

Ich benutze mod_proxy_ajp und mod_proxy_http und hatte überhaupt keine Probleme.

e_tothe_ipi
quelle
Der HostHeader wird korrekt durchlaufen, wenn SieProxyPreserveHost On
Derf
Wenn Sie mit Apache mod_proxy arbeiten, besuchen Sie httpd.apache.org/docs/2.4/mod/mod_proxy.html#x-headers . Wenn Sie RemoteIpValve als Teil Ihres Tomcat-Servlets konfigurieren, kann Ihr Anwendungscode die meisten Informationen transparent abrufen. Tomcat.apache.org/tomcat-8.0-doc/config/…
Scott Markwell