http अनुरोधों के लिए kubernetes / elb समय क्या हैं?


9

मेरे पास एक जावा एपीआई (एचटीटीपीएस अनुरोधों को स्वीकार करना) है और एक डॉकटर छवि में पैक किया गया है, और फिर इसे EC2s के शीर्ष पर k8s क्लस्टर का उपयोग करके तैनात किया गया है। मास्टर EC2 के सामने एक ELB है।

मैं उस जावा एपीआई को हिट करने के लिए ELB को कर्ल POST अनुरोध कर सकता हूं।

कभी-कभी मेरा कर्ल अनुरोध हमेशा के लिए प्रतिक्रिया के इंतजार में बैठता है, हालांकि जब मैं देखता हूं कि क्यूब लॉग्स प्रसंस्करण सफल था।

यह लगभग 40mins के बड़े अनुरोधों के लिए होता है, 25mins के अनुरोधों को एक प्रतिक्रिया ठीक मिल रही है।

आपको क्या लगता है कि टाइमआउट हो सकता है? किसी भी विशिष्ट विन्यास params मैं देखना चाहिए?

ग्राहक (कर्ल) -> ELB -> k8s -> पॉड एक जावा एपि छवि चला रहा है

मैंने सोचा कि यह प्रासंगिक होगा (मैं IdleTimeout सेट नहीं कर रहा हूं) ELB के लिए लेकिन डॉक्स कहता है कि डिफ़ॉल्ट 60s है, हालांकि मुझे 20min अनुरोधों के लिए प्रतिक्रिया मिल सकती है "ConnectionSettings": {"IdleTimeout"}


"40mins के आसपास के बड़े अनुरोध" आपका क्या मतलब है?
अर्घ्य साधु

यानी बड़ी फाइल अपलोड करते हुए, एपीआई इसे ईटीएल प्रक्रिया के साथ
40 मिलियन तक

मैं सोच रहा हूं कि आपके पास मास्टर के सामने एक एलबी क्यों है (आप एपि-सर्वर का मतलब है?), और आप उस एलबी को मारते हुए अपने एपीआई तक कैसे पहुंच सकते हैं।
सुरेन

जवाबों:


1

जैसा कि पम्पी ने अपने उत्तर में उल्लेख किया है, ईएलबी टाइमआउट केवल आइडल समय की गणना करता है। यह 1 से 4000 सेकंड के बीच हो सकता है और डिफ़ॉल्ट रूप से 60 सेकंड के लिए सेट है। आप CLI या कंसोल का उपयोग करके टाइमआउट बदल सकते हैं।

निम्नलिखित इसे 5 मिनट में बदलने के लिए CLI का उपयोग करने का एक उदाहरण है:

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

स्रोत: डॉक्स

जैसा कि आप 20-40 मिनट तक बड़ी फ़ाइलों को अपलोड कर रहे हैं, मैं अभी भी एक संदेश ब्रोकर का उपयोग करने के बारे में अन्य सुझावों की सलाह दूंगा जैसे कि खरगोश और कफका अपलोड और प्रसंस्करण को असिंक्रोनस रूप से संभालने के लिए।


0

ईएलबी टाइमआउट केवल "निष्क्रिय" समय के लिए गिना जाता है । इसका मतलब है कि जब तक आपका अपलोड अभी भी चल रहा है, यह बेकार नहीं है। जब फ़ाइल आपके सर्वर पर आई, तो आपको उस समय को मापने की आवश्यकता है जब तक कि आपका सर्वर प्रतिक्रिया न दे।

जब वह सही तरीके से मिल जाता है, तो सर्वर अनुरोध को संसाधित करेगा और ग्राहक को एक प्रतिक्रिया देगा। 60 सेकंड की डिफ़ॉल्ट टाइमआउट के साथ, आपके सर्वर में अपलोड की गई फ़ाइल को संसाधित करने और उत्तर देने के लिए ये 60 सेकंड हैं।

हो सकता है कि आपके सर्वर को आपके 25 मिनट के अपलोड को संसाधित करने के लिए 60 सेकंड से कम की आवश्यकता हो, लेकिन 40 मिनट के अपलोड को संसाधित करने के लिए और अधिक?


60 सेकंड कहां से आता है? मैं ELB पर डिफ़ॉल्ट IdleTimeout का उपयोग नहीं कर रहा हूं
tooptoop4

60 सेकंड ईएलबी का डिफ़ॉल्ट निष्क्रिय समय है। आप इसका उपयोग नहीं कर सकते। आप इसे 1 सेकंड और 60 मिनट के बीच संशोधित कर सकते हैं, लेकिन ईएलबी को यह बताने का कोई तरीका नहीं है कि कनेक्शन को समाप्त न किया जाए।
पम्पी

0

क्यों न आप फ़ाइल अपलोड करें और एक इवेंट को खरगोश जैसे मैसेज ब्रोकर को पुश करें। Kubernetes Job / CronJob ऑब्जेक्ट का उपयोग करके फ़ाइलों पर ETL को अतुल्यकालिक रूप से निष्पादित करें और तदनुसार क्लाइंट को सूचित करें।

इस तरह, आपको आने वाले अनुरोध को अधिक समय तक रोकना नहीं है। घटना प्रकाशित होने के बाद डाक अपलोड क्लाइंट को एक संदेश भेजती है कि अनुरोध संसाधित किया जा रहा है।


मैं अभी भी ढूंढना चाहता हूं कि टाइमआउट कहां है
tooptoop4

0

एक HTTP अनुरोध के लिए 25 मिनट काफी लंबा है। मैं पी एकंबरम से काफी सहमत हूं।

मुझे लगता है कि फ़ाइल के अपलोड होते ही (एंड क्विक होना चाहिए) जैसे ही एंडपॉइंट को अतुल्यकालिक और उत्तर देना बेहतर हो सकता है, उसी समय, मिडिलवेयर मैसेजिंग (RabbitMQ, Kafka or NATS) या वेबसाइनेट का उपयोग करें, जो किसी ईवेंट को एक बार पुश करें फ़ाइल सफलतापूर्वक आयात और संसाधित की जाती है।


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

CLI में इसका उपयोग मध्यांतर को 5 मिनट में बदलने के लिए करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.