client पर connect और read timeouts साफ साफ सेट करें, क्योंकि कई Java HTTP clients डिफॉल्ट रूप से अनंत काल तक इंतजार करते हैं, और ऊपर से एक कुल request timeout भी रखें। उस host के लिए connection pool की हद बांधें, backoff और jitter के साथ सिर्फ idempotent calls retry करें, और circuit breaker लगाएं ताकि लगातार नाकामी पर जल्दी फेल हो जाए। fallback पहले से तय करें: कोई cached value, घटी हुई response, या साफ error, न कि अटकी हुई request।
इंटरव्यूअर यह क्यों पूछते हैं
इंटरव्यूअर जानना चाहते हैं कि आपने कभी डिफॉल्ट सेटिंग से चोट खाई है या नहीं। यह बताना कि कुछ clients हमेशा इंतजार करते रहते हैं, और साझा connection pool तथा धीमा host मिलकर कैसे एक dependency से असंबंधित endpoints रोक देते हैं, ऑपरेशनल तजुर्बा दिखाता है। फॉलो अप यह टटोलते हैं कि आप इस नाकामी को टेस्ट कैसे करेंगे, जिसका मतलब आमतौर पर fault injection proxy या देर से जवाब देने वाला stub होता है।
अपना जवाब कैसे स्ट्रक्चर करें
- हर timeout साफ साफ सेट करें और defaults पर कभी भरोसा न करें।
- उस dependency को उसके अपने सीमित connection pool से अलग रखें।
- retries सिर्फ वहीं जहां सुरक्षित हो, backoff और circuit breaker के साथ।
- घटी हुई सेवा का बर्ताव तय करें और लागू करें।
उदाहरण जवाब
मैं यह मानकर शुरू करता हूं कि defaults गलत हैं, क्योंकि कई clients read पर खुशी खुशी हमेशा इंतजार करते रहेंगे, और ठीक इसी तरह एक धीमी dependency मेरी service के हर थ्रेड को पार्क करा देती है। तो connect timeout छोटा, read timeout उनकी असली latency के बंटवारे के हिसाब से न कि किसी गोल आंकड़े पर, और ऊपर से एक कुल request timeout क्योंकि retries और redirects जुड़ जाते हैं। फिर अलगाव: उस dependency को अधिकतम सीमा वाला अपना connection pool मिलता है, ताकि उसके बिगड़ने पर वह बाकी calls की पूरी क्षमता न खा जाए। retries सिर्फ idempotent operations पर, ज्यादा से ज्यादा दो कोशिशें, exponential backoff और jitter के साथ, और आगे एक circuit breaker ताकि error rate किसी हद से ऊपर जाते ही मैं कुछ देर के लिए तुरंत फेल करूं, बजाय पहले से जूझ रही चीज पर requests ढेर करने के। आखिरी हिस्सा यह है कि यूजर को क्या मिलेगा, और वह पहले से तय होता है। एक shipping rates integration में हमने checkout फेल करने की जगह staleness के निशान के साथ cached rates दिए, और इससे vendor का outage खोए हुए orders की जगह सटीकता की मामूली दिक्कत बन गया। मैं इसे देरी डालने वाले proxy से टेस्ट करता हूं।
जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।
देखें यह कैसे काम करता हैफॉलो-अप सवाल जिनकी उम्मीद रखें
- read timeout की कीमत आप कैसे चुनेंगे?
- bulkheading क्या है, और यहां वह कैसे लागू होता है?
- आप कैसे टेस्ट करते हैं कि आपका fallback रास्ता सचमुच काम करता है?
Java डेवलपर के और सवाल
आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।
मेरे सवाल प्रेडिक्ट करें