mod_proxy vs mod_proxy_ajp vs mod_jk


9

เรากำลังเตรียมการโยกย้ายจากสภาพแวดล้อมต่อไปนี้:

Apache 2.0.2 --AJP -> JBoss4.2.2

ถึง

Apache 2.2.3 - ??? -> JBoss 5.1.0

คุณจะเข้าร่วมทั้งสองด้วยกันได้อย่างไร?

ตัวเลือกคือ:

  1. Classic AJP (หมายถึงการสร้าง mod_jk สำหรับ Apache)
  2. mod_proxy (ส่งต่อคำขอ HTTP ไปยัง JBoss)
  3. mod_proxy_ajp

ตัวเลือก 2 เป็นโซลูชันที่ได้รับความนิยมมากที่สุดในขณะนี้เนื่องจากดูเหมือนว่าจะหมายถึงการประมวลผลที่น้อยลงเนื่องจากไม่จำเป็นต้องแปลคำตอบของ JBoss จาก AJP อีกต่อไปและเวลา CPU เป็นสิ่งที่เราต้องจับตาในโครงสร้างพื้นฐานของเรา ตัวเลือกที่ 2 และ 3 มาพร้อมกับ Apache build ที่ Red Hat รองรับ

ในขณะนี้ฉันไม่เห็นเราจะเลือก 1 เนื่องจากเราได้ AJP 'ฟรี' พร้อมตัวเลือก 3

ดังนั้นข้อดีและข้อเสียของตัวเลือกที่ 2 และ 3 คืออะไร? ความกังวลเกี่ยวกับภาระของ CPU เป็นสิ่งที่เราต้องกังวลหรือไม่? สิ่งที่เราสูญเสียไปในการประมวลผลข้อมูลไบนารี (ทราฟฟิก AJP) เรากลับไปใช้แบนด์วิดท์ที่ลดลงและ IO ได้อย่างไร

โครงสร้างพื้นฐานของเราจะเป็น Apache ให้เห็น JBosses ที่ปรับจูนได้มากถึง 9 (แต่มักจะประมาณครึ่งหนึ่ง) ทั้งหมดในเครื่อง RHEL 5 เดียวกันซึ่งถูกจำลองเสมือนในคลาวด์ส่วนตัว

ขอบคุณล่วงหน้าสำหรับคำแนะนำ / คำแนะนำใด ๆ

รวย

คำตอบ:


8

2 mod_proxy_httpยกเว้นว่าคุณต้องการส่วนหัวโฮสต์จากไคลเอ็นต์

ฉันไม่แนะนำ classic mod_jk เพราะฟังก์ชั่นถูกแทนที่ด้วย mod_proxy_ajp และอย่างที่คุณบอกว่าตัวเองต้องสร้างและดูแลโมดูลนั้นด้วยตัวเอง

ฉันคิดว่า mod_proxy_http เป็นวิธีแก้ปัญหาที่สะอาดมากและใช้ ajp จากภาพ อย่างไรก็ตามคุณควรตระหนักถึงคำเตือนเล็กน้อยสำหรับการย้ายจาก ajp ไปยัง http หากคุณต้องการเข้าถึงส่วนหัวของเซิร์ฟเวอร์ตรงตามที่ apache ได้รับ (รวมถึงส่วนหัวของโฮสต์) คุณควรใช้ ajp JBoss จะเห็นคำขอ http ใหม่มาจาก apache ไม่ใช่ไคลเอ็นต์ดั้งเดิม หากคุณต้องการ IP ระยะไกลของไคลเอนต์เท่านั้นคุณยังสามารถรับสิ่งนี้ได้ด้วยส่วนหัวพิเศษที่ apache สามารถตั้งค่าบนการร้องขอใหม่ อย่างไรก็ตามถ้าคุณทำโฮสติ้งเสมือนจากเลเยอร์แอปพลิเคชันคุณจะดีขึ้นด้วย ajp

เท่าที่เกี่ยวข้องกับประสิทธิภาพ ajp หรือ http จะต้องมีการประมวลผลโดย JBoss และปริมาณการใช้ TCP ซ็อกเก็ตท้องถิ่น คุณจะต้องลองทั้งสองวิธีเพื่อดูว่ามีประสิทธิภาพมากขึ้น แต่ฉันคิดว่าโดยรวมแล้วเป็นเปอร์เซ็นต์ที่น้อยมากของการโหลดเซิร์ฟเวอร์ทั้งหมด Http เป็นโปรโตคอลที่ซับซ้อนยิ่งขึ้นและ ajp ได้รับการออกแบบมาโดยเฉพาะเพื่อประสิทธิภาพระหว่างเว็บและแอปดังนั้นระดับ ajp ในทางทฤษฎีน่าจะดีกว่า ที่กล่าวว่าฉันพบว่า http มักจะได้รับการสนับสนุนที่ดีขึ้นนอกบรรทัดเซิร์ฟเวอร์แอป Tomcat

ฉันใช้ mod_proxy_ajp และ mod_proxy_http และฉันไม่มีปัญหาใด ๆ


Hostส่วนหัวจะได้รับการส่งผ่านได้อย่างถูกต้องถ้าคุณใช้ProxyPreserveHost On
Derf

เมื่อทำงานร่วมกับ Apache mod_proxy ดูที่httpd.apache.org/docs/2.4/mod/mod_proxy.html#x-headers หากคุณกำหนดค่า RemoteIpValve เป็นส่วนหนึ่งของ Tomcat Servlet รหัสแอปพลิเคชันของคุณสามารถรับข้อมูลส่วนใหญ่ได้อย่างชัดเจน tomcat.apache.org/tomcat-8.0-doc/config/ …
Scott Markwell
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.