mod_proxy vs mod_proxy_ajp vs mod_jk

9

Przygotowujemy się do migracji z następującego środowiska:

Apache 2.0.2 - AJP -> JBoss 4.2.2

do

Apache 2.2.3 - ??? -> JBoss 5.1.0

Jak dołączysz do nich razem?

Dostępne opcje to:

  1. Klasyczny AJP (oznacza budowanie mod_jk dla Apache)
  2. mod_proxy (przekazywanie żądań HTTP do JBoss)
  3. mod_proxy_ajp

Opcja 2 jest obecnie najbardziej popularnym rozwiązaniem, ponieważ wydaje się, że oznacza to mniej przetwarzania, ponieważ nie trzeba już tłumaczyć odpowiedzi JBossa z AJP, a czas procesora jest czymś, czego musimy uważnie obserwować w naszej infrastrukturze. Opcje 2 i 3 są również dostarczane z wersją Apache obsługiwaną przez Red Hat.

W tej chwili nie widzę, że wybieramy opcję 1, ponieważ otrzymujemy AJP „za darmo” z opcją 3.

Jakie są zatem zalety i wady opcji 2 i 3? Czy niepokój związany z obciążeniem procesora jest czymś, o co musimy się martwić? Co tracimy w przetwarzaniu danych binarnych (ruch AJP), czy odzyskujemy zmniejszoną przepustowość i IO?

Naszą infrastrukturą będzie Apache obsługujący do 9 dokładnie dostrojonych JBosses (ale zwykle około połowy tego) na tym samym komputerze RHEL 5, który jest zwirtualizowany w prywatnej chmurze.

Z góry dziękuję za wszelkie wskazówki / porady.

Bogaty

Bogaty
źródło

Odpowiedzi:

8

2 mod_proxy_http, chyba że potrzebujesz nagłówka Host od klienta.

Nie polecam klasycznego mod_jk, ponieważ jego funkcjonalność została zastąpiona przez mod_proxy_ajp i jak sam powiedziałeś, sam musisz zbudować i utrzymywać ten moduł.

Myślę, że mod_proxy_http jest bardzo czystym rozwiązaniem i usuwa ajp z obrazu. Należy jednak pamiętać o kilku zastrzeżeniach dotyczących przejścia z ajp na http. Jeśli potrzebujesz dostępu do nagłówków serwera dokładnie tak, jak zostały odebrane przez apache (w tym nagłówek Hosta), powinieneś użyć ajp. JBoss zobaczy nowe żądanie HTTP pochodzące z apache, a nie z oryginalnego klienta. Jeśli potrzebujesz tylko zdalnego adresu IP klienta, możesz go uzyskać za pomocą specjalnego nagłówka, który apache może ustawić dla nowych żądań. Jeśli jednak wykonujesz wirtualny hosting z poziomu warstwy aplikacji, lepiej skorzystaj z ajp.

Jeśli chodzi o wydajność, zarówno ajp, jak i http będą wymagały przetwarzania przez JBoss i trochę lokalnego ruchu TCP przez gniazdo. Musisz spróbować obu, aby zobaczyć, która jest bardziej wydajna, ale myślę, że ogólnie jest to bardzo niewielki procent całkowitego obciążenia serwera. Http jest bardziej skomplikowanym protokołem, a ajp jest specjalnie zaprojektowany do wydajnego przełączania między warstwami sieci i aplikacji, więc teoretycznie ajp jest prawdopodobnie lepszy. To powiedziawszy, stwierdziłem, że http jest często lepiej obsługiwany poza linią serwera aplikacji Tomcat.

Używam mod_proxy_ajp i mod_proxy_http i nie miałem żadnych problemów.

e_tothe_ipi
źródło
HostNagłówek będzie przejdzie przez poprawnie, jeśli używaszProxyPreserveHost On
DERF
Podczas pracy z Apache mod_proxy spójrz na httpd.apache.org/docs/2.4/mod/mod_proxy.html#x-headers . Jeśli skonfigurujesz RemoteIpValve jako część serwletu Tomcat, Twój kod aplikacji może uzyskać przejrzystość większości informacji tomcat.apache.org/tomcat-8.0-doc/config/…
Scott Markwell