mod_proxy vs mod_proxy_ajp vs mod_jk

9

Kami sedang mempersiapkan migrasi dari lingkungan berikut:

Apache 2.0.2 --AJP -> JBoss4.2.2

untuk

Apache 2.2.3 - ??? -> JBoss 5.1.0

Bagaimana Anda menggabungkan keduanya?

Pilihannya adalah:

  1. AJP Klasik (berarti membangun mod_jk untuk Apache)
  2. mod_proxy (meneruskan permintaan HTTP ke JBoss)
  3. mod_proxy_ajp

Opsi 2 adalah solusi yang paling populer saat ini karena sepertinya berarti lebih sedikit pemrosesan karena tidak perlu lagi menerjemahkan respons JBoss dari AJP, dan waktu CPU adalah sesuatu yang perlu kita perhatikan secara cermat dalam infrastruktur kita. Opsi 2 dan 3 juga datang dengan bangunan Apache yang didukung oleh Red Hat.

Saat ini saya tidak dapat melihat kami memilih opsi 1, karena kami mendapatkan AJP 'gratis' dengan opsi 3.

Karena itu, apa pro dan kontra dari opsi 2 dan 3? Apakah kekhawatiran tentang beban CPU benar-benar sesuatu yang perlu kita khawatirkan? Apa yang kita kehilangan dalam memproses data biner (lalu lintas AJP) yang kita dapatkan dalam mengurangi bandwidth dan IO?

Infrastruktur kami akan menjadi Apache yang menghadirkan hingga 9 JBos yang sangat disetel (tetapi biasanya sekitar setengah dari itu) semuanya pada mesin RHEL 5 yang sama, yang divirtualisasi dalam cloud pribadi.

Terima kasih sebelumnya atas petunjuk / saran.

Kaya

Kaya
sumber

Jawaban:

8

2 mod_proxy_http, kecuali Anda memerlukan header Host dari klien.

Saya tidak merekomendasikan mod_jk klasik karena fungsinya telah digantikan oleh mod_proxy_ajp dan seperti yang Anda katakan sendiri, itu memerlukan pembangunan dan pemeliharaan modul itu sendiri.

Saya pikir mod_proxy_http adalah solusi yang sangat bersih dan mengambil ajp keluar dari gambar. Namun, Anda harus mengetahui beberapa peringatan untuk berpindah dari ajp ke http. Jika Anda memerlukan akses ke header server persis seperti yang diterima oleh apache (termasuk header Host), Anda harus menggunakan ajp. JBoss akan melihat permintaan http baru yang berasal dari apache, bukan klien asli. Jika Anda hanya perlu IP jarak jauh dari klien, Anda masih bisa mendapatkan ini dengan header khusus yang apache dapat atur pada permintaan baru. Namun, jika Anda melakukan hosting virtual dari lapisan aplikasi, Anda lebih baik dengan ajp.

Sejauh menyangkut kinerja, baik ajp atau http akan memerlukan beberapa pemrosesan oleh JBoss dan beberapa lalu lintas soket TCP lokal. Anda harus mencoba keduanya untuk melihat mana yang lebih efisien, tetapi saya pikir secara keseluruhan itu adalah persentase yang sangat kecil dari total beban server. Http adalah protokol yang lebih rumit dan ajp dirancang khusus untuk secara efisien antara web dan tingkat aplikasi, jadi secara teoritis ajp mungkin lebih baik. Yang mengatakan, saya telah menemukan bahwa http sering lebih baik didukung di luar garis server aplikasi Tomcat.

Saya menggunakan mod_proxy_ajp dan mod_proxy_http dan saya tidak punya masalah apa pun.

e_tothe_ipi
sumber
The Hostsundulan akan bisa melewati dengan benar jika Anda menggunakanProxyPreserveHost On
Derf
Saat bekerja dengan Apache mod_proxy lihat di httpd.apache.org/docs/2.4/mod/mod_proxy.html#x-headers . Jika Anda mengonfigurasi RemoteIpValve sebagai bagian dari Tomcat Servlet, kode aplikasi Anda dapat memperoleh sebagian besar informasi secara transparan tomcat.apache.org/tomcat-8.0-doc/config/…
Scott Markwell