गाइड

बड़ी मात्रा वाले बैच जॉब के लिए समझदारी भरे टाइमआउट सेट करें

जो टाइमआउट मान एक पते के लुकअप के लिए ठीक काम करता है, वह कुछ हज़ार आइटम वाले बल्क अनुरोध को सर्वर के सबको प्रोसेस करने से काफ़ी पहले ही काट देगा, जो विफलता जैसा दिखता है, भले ही पर्याप्त समय मिलने पर अनुरोध पूरा हो जाता।

बल्क अनुरोधों को ज़्यादा समय क्यों चाहिए

बल्क array का हर आइटम अपने आप में एक लुकअप है, इसलिए 2,000 आइटम वाले अनुरोध में एक लुकअप की तुलना में लगभग 2,000 गुना प्रोसेसिंग होती है, भले ही आपकी ओर से यह एक ही HTTP कॉल हो। एक या दो सेकंड का टाइमआउट, जो एक पते के लिए ठीक है, इतने बड़े अनुरोध के लिए बिल्कुल भी काफ़ी नहीं है।

टाइमआउट को बैच के हिसाब से बढ़ाना

अपने क्लाइंट का टाइमआउट भेजी जा रही array के आकार के अनुपात में सेट करें, सामान्य उतार-चढ़ाव के लिए कुछ गुंजाइश के साथ, बजाय इसके कि आपका कोड हर अनुरोध के लिए, छोटा हो या बड़ा, एक ही तय मान इस्तेमाल करे।

timeout_seconds = max(5, item_count * 0.05)

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

एक बहुत बड़े अनुरोध के बजाय छोटे हिस्सों को प्राथमिकता देना

लगातार बड़े होते एक ही अनुरोध के लिए टाइमआउट मान बढ़ाते जाने के बजाय, बहुत बड़े काम को कुछ सौ से लेकर कुछ हज़ार आइटम वाले हिस्सों में बाँटें। छोटे हिस्सों को छोटे और ज़्यादा अनुमान लगाने लायक टाइमआउट चाहिए, और बीच में विफलता होने पर आपका सिर्फ़ मौजूदा हिस्सा जाता है, पूरा काम नहीं।

जब टाइमआउट हो ही जाए तो क्या करें

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

टाइमआउट सेटिंग से लागत पर कोई असर नहीं पड़ता

टाइमआउट पूरी तरह क्लाइंट-साइड सेटिंग है कि आप कितनी देर इंतज़ार करने को तैयार हैं। इसका अनुरोध की लागत पर कोई असर नहीं होता, जो अब भी प्रोसेस हुए हर आइटम के लिए एक अनुरोध है, चाहे आपके क्लाइंट ने पूरा समय इंतज़ार किया हो या पहले ही हार मान ली हो।

टाइमआउट को बैच के आकार से मिलाना, और एक बहुत बड़े अनुरोध के बजाय कई छोटे हिस्सों को प्राथमिकता देना, बड़े कामों को भरोसेमंद भी रखता है और कुछ गड़बड़ होने पर दोबारा शुरू करने में आसान भी। बड़े कामों के लिए हिस्सों में बाँटने और कोटे की रणनीति रेट लिमिट दस्तावेज़ में आगे विस्तार से दी गई है।