tldr; คุณจะกำหนดค่าโมดูลเหตุการณ์ Apache MPM เป็นพร็อกซีย้อนกลับที่ใช้งานได้เมื่อทำงานเบื้องหลัง AWS Application Load Balancer ที่ให้ปริมาณงานสูงได้อย่างไร
เค้าโครง
AWS Application Load Balancer -> Apache 2.4.x -> AWS Internal TCP Load Balancer (NLB) -> เซิร์ฟเวอร์แอป Jetty
การใช้การตั้งค่าการกำหนดค่าที่แสดงด้านล่างโมดูลเหตุการณ์ Apache MPM จะไม่เสถียรหลังตัวจัดสรรภาระงานแอป AWS เวลาตอบสนองเพิ่มขึ้นอย่างมาก และคำขอล้มเหลวเป็นระยะสำหรับข้อผิดพลาด 502 ที่ส่งคืนโดย ALB
การกำหนดค่าผู้ปฏิบัติงาน
เซิร์ฟเวอร์ลิมิต 250
สตาร์ทเซิร์ฟเวอร์ 100
MinSpareThreads 75
MaxSpareThreads 250
เธรดลิมิต 64
กระทู้ต่อเด็ก 64
MaxRequestWorkers 8000
การกำหนดค่า ProxyPass
enablereuse=เมื่อได้รับ=10 หมดเวลาการเชื่อมต่อ=2 หมดเวลา=55 สูงสุด=400 ลองใหม่=0 Keepalive=เปิด
เหตุการณ์ MPM เทียบกับผู้ปฏิบัติงาน MPM
การเปลี่ยนไปใช้โมดูลผู้ปฏิบัติงาน MPM แสดงให้เห็นการปรับปรุงทันทีในเวลาตอบสนอง และข้อผิดพลาด 502 หายไปโดยสิ้นเชิง
การดีบัก
ฉันสามารถติดตามข้อผิดพลาด 502 ที่ส่งคืนโดย ALB ไปจนถึงข้อผิดพลาด 408 ที่ส่งคืนโดย Jetty ดูเหมือนว่าท่าเทียบเรือจะส่งข้อผิดพลาดเนื่องจากการหมดเวลาในการอ่านคำขอ
ใช้ Ubuntu 20.04 กับ Apache 2.4.41-4ubuntu3.8
บันทึกที่น่าสนใจ
- คำขอแม้ว่า AWS Network Load Balancer (NLB) ไปยังอินสแตนซ์ Apache เดียวกันจะตอบสนองอย่างรวดเร็วและไม่แสดงข้อผิดพลาด 502 ใดๆ