kubernetes / elb time outs สำหรับคำขอ http คืออะไร


9

ฉันมีจาวา API (ยอมรับ HTTPS คำร้องขอ _ บรรจุลงในอิมเมจ docker และจากนั้นจะถูกปรับใช้โดยใช้คลัสเตอร์ k8s ที่ด้านบนของ EC2s ต้นแบบ EC2 มี ELB อยู่ด้านหน้า

ฉันสามารถส่งคำขอ POST ไปที่ ELB เพื่อไปที่จาวา API นั้น

บางครั้งคำขอ curl ของฉันนั่งรอคำตอบตลอดไปแม้ว่าเมื่อฉันเห็น kube บันทึกการประมวลผลก็ประสบความสำเร็จ

สิ่งนี้เกิดขึ้นสำหรับคำขอที่มีขนาดใหญ่กว่าประมาณ 40 นาทีคำขอที่มี 25 นาทีจะได้รับการตอบสนองตกลง

คุณคิดว่าการหมดเวลาจะอยู่ที่ไหน พารามิเตอร์การกำหนดค่าเฉพาะใด ๆ ที่ฉันควรดู

ไคลเอนต์ (curl) -> ELB -> k8s -> พ็อดที่รันอิมเมจ java api

ฉันคิดว่าสิ่งนี้จะเกี่ยวข้อง (ฉันไม่ได้ตั้งค่า IdleTimeout) สำหรับ ELB แต่เอกสารระบุว่าค่าเริ่มต้นคือ 60s แม้ว่าฉันจะได้รับการตอบกลับคำขอ 20 นาที "ConnectionSettings": {"IdleTimeout"}


"ร้องขอขนาดใหญ่ประมาณ 40 นาที" คุณหมายถึงอะไร
Arghya Sadhu

เช่นการอัปโหลดไฟล์ขนาดใหญ่ api ใช้เวลา
40 นาที

ฉันสงสัยว่าทำไมคุณถึงมี LB ต่อหน้าอาจารย์ (คุณหมายถึง api-server?) และคุณจะไปถึง API ของคุณไปถึง LB ได้อย่างไร
suren

คำตอบ:


1

เช่นเดียวกับPampy ที่กล่าวถึงในคำตอบของเขาการหมดเวลาของ ELB จะนับเฉพาะเวลาว่าง ซึ่งสามารถอยู่ระหว่าง 1 ถึง 4000 วินาทีและตั้งค่าเป็น 60 วินาทีโดยค่าเริ่มต้น คุณสามารถเปลี่ยนการหมดเวลาโดยใช้ CLI หรือคอนโซล

ต่อไปนี้เป็นตัวอย่างของการใช้ CLI เพื่อเปลี่ยนเป็น 5 นาที:

aws elb modify-load-balancer-attributes --load-balancer-name my-loadbalancer --load-balancer-attributes "{\"ConnectionSettings\":{\"IdleTimeout\":300}}"

ที่มา: docs

ในขณะที่คุณกำลังอัปโหลดไฟล์ขนาดใหญ่ใช้เวลา 20-40 นาทีฉันยังคงแนะนำคำแนะนำอื่น ๆ เกี่ยวกับการใช้นายหน้าข้อความเช่น RabbitM หรือ Kafka เพื่อจัดการการอัปโหลดและประมวลผลแบบอะซิงโครนัส


0

การหมดเวลาของ ELB จะนับเฉพาะเวลา"ไม่ได้ใช้งาน" เท่านั้นเท่านั้น ซึ่งหมายความว่าตราบใดที่การอัปโหลดของคุณยังคงทำงานอยู่ก็จะไม่ได้ใช้งาน เมื่อไฟล์มาถึงเซิร์ฟเวอร์ของคุณคุณจะต้องวัดเวลาจนกว่าเซิร์ฟเวอร์ของคุณจะตอบสนอง

เมื่อได้รับอย่างถูกต้องเซิร์ฟเวอร์จะดำเนินการตามคำขอและส่งคืนการตอบกลับไปยังลูกค้าในภายหลัง ด้วยการหมดเวลาเริ่มต้น 60 วินาทีเซิร์ฟเวอร์ของคุณมีเวลา 60 วินาทีในการประมวลผลไฟล์ที่อัปโหลดและส่งคืนคำตอบ

บางทีเซิร์ฟเวอร์ของคุณต้องการเวลาน้อยกว่า 60 วินาทีในการประมวลผลการอัปโหลด 25 นาทีของคุณ แต่มากกว่านั้นในการประมวลผลการอัปโหลด 40 นาที?


60 วินาทีมาจากไหน ฉันไม่ได้ใช้
IdleTimeout

60 วินาทีเป็นค่าเริ่มต้นที่ไม่ได้ใช้งานของ ELB คุณไม่สามารถ "ไม่ใช้" ได้ คุณสามารถแก้ไขได้ภายใน 1 วินาทีถึง 60 นาที แต่ไม่มีวิธีใดที่จะบอกให้ ELB ไม่ยุติการเชื่อมต่อได้เลย
Pampy

0

ทำไมคุณไม่อัปโหลดไฟล์และผลักดันเหตุการณ์ไปยังนายหน้าข้อความเช่น rabbitMQ ดำเนินการ ETL บนไฟล์โดยใช้วัตถุ kubernetes Job / CronJob แบบอะซิงโครนัสและแจ้งให้ลูกค้าทราบ

ด้วยวิธีนี้คุณไม่จำเป็นต้องปิดกั้นคำขอที่เข้ามาเป็นเวลานาน โพสต์อัปโหลดหลังจากเหตุการณ์มีการเผยแพร่ส่งข้อความไปยังลูกค้าที่กำลังดำเนินการตามคำขอ


ฉันยังต้องการค้นหาว่าการหมดเวลาเป็นอย่างไร
tooptoop4

0

25 นาทีนั้นค่อนข้างยาวสำหรับคำขอ HTTP ฉันค่อนข้างเห็นด้วยกับ P Ekambaram

ฉันคิดว่ามันน่าจะดีกว่าที่จะสร้างจุดเชื่อมต่อแบบอะซิงโครนัสและตอบกลับทันทีที่อัปโหลดไฟล์ (ควรเร็วกว่า) ในเวลาเดียวกันใช้การส่งข้อความมิดเดิลแวร์ (RabbitMQ, Kafka หรือ NATS) หรือ Websocket นำเข้าและประมวลผลไฟล์สำเร็จแล้ว


0
 aws elb modify-load-balancer-attributes --load-balancer-name my-loadbalancer --load-balancer-attributes "{\"ConnectionSettings\":{\"IdleTimeout\":300}}"

ใช้สิ่งนี้ใน cLI เพื่อเปลี่ยนการหมดเวลาเป็น 5 นาที

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.