वितरित सेवाओं में "रिट्री स्टॉर्म" से कैसे बचें?


11

"रिट्री स्टॉर्म" तब होता है जब क्लाइंट्स को सेट अप करने से पहले कई बार सेट करने के लिए कॉन्फ़िगर किया जाता है, एक सर्विस के सामान्य ऑपरेशन में पैकेट लॉस होने की वजह से रिट्री पॉलिसी जरूरी होती है।

इस उदाहरण को लें:

नमूना वास्तुकला

उदाहरण के लिए यदि सेवाओं को प्रति सेकंड 80,000 अनुरोधों का समर्थन करने और क्षमता के लगभग 80% पर चलाने के लिए स्केल किया गया था, तो यातायात में एक स्पाइक जिससे सेवा प्रति सेकंड 101,000 अनुरोध प्राप्त करने का कारण बनी, उन अनुरोधों में से 1,000 विफल होने का कारण बने।

जब रीट्री पॉलिसीज़ किक करती हैं, तो आप अतिरिक्त 1,000+ अनुरोधों के साथ समाप्त हो जाते हैं, इस पर निर्भर करता है कि विफलता का पता कहाँ चला गया जो कि सेवा को पूरे 102,000 अनुरोध प्रति सेकंड के रूप में आगे बढ़ाएगा - वहाँ से आपकी सेवा मृत्यु संख्या में दोगुनी हो जाएगी। हर सेकंड में असफल अनुरोध।

अनुमानित पीक लेनदेन से परे सेवाओं के बड़े पैमाने पर ओवर-प्रोविजनिंग के अलावा, जो अक्षम होगा। "रिट्री स्टॉर्म" से बचने के लिए आप क्या रणनीति अपना सकते हैं?


यदि 100kQPS क्षमता का 80% है, तो 101kQPS का परिणाम 1k विफलताओं में नहीं होना चाहिए, इसका परिणाम शून्य विफलताओं में होना चाहिए - क्या यह ओवरप्रोविजनिंग की बात नहीं है?
एड्रियन

@ अपने अधिकार का पालन करते हुए, इस बिंदु को समझाने के लिए यह एक विरोधाभासी उदाहरण था - मैं काफी हद तक अपनी बात को स्पष्ट करने की कोशिश कर रहा था, बिना किसी सार के। मैंने "स्केल को 100,000 का समर्थन करने के लिए" को "80,000 का समर्थन करने के लिए बढ़ाया" ठीक कर दिया है।
रिचर्ड स्लेटर

जवाबों:


8

यह इस बात पर निर्भर करता है कि आप किस चीज से बचने की कोशिश कर रहे हैं।

अगर आप किसी ऐसी चीज़ के किसी सर्विस इंटरप्टन से बचने की कोशिश कर रहे हैं, जो वास्तव में क्रिटिकल सर्विस है (मैं सोच रहा हूं कि "अगर मेरा एपीआई कॉल उचित तरीके से नहीं दिया गया तो लोग मर जाएंगे") आपको भारी अक्षमताओं के लिए बस बजट की जरूरत है समर्पित संसाधनों के प्रावधान से बहुत अधिक है। और हाँ, उन्हें समर्पित होना चाहिए, इनमें से कोई भी ट्रैफ़िक स्पाइक्स सामान की अनुमति नहीं देता है, कई सेवाओं की स्पाइकिंग इस प्रकार एक आउटेज का कारण बनेगी।

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

में ग्राहक कोड समझदार पुन: प्रयास करें तर्क जो एक ऊपरी सीमा और शान से नाकाम रहने के लिए एक तंत्र है लिखें। इस तरह से आप अपने उपयोगकर्ताओं को असफल अनुरोधों के अनंत पाश में नहीं बांधते हैं और आप उन्हें बस एक त्रुटि देते हैं जो उन्हें यह बताने की कोशिश करते हैं कि उन्होंने कुछ ही समय में जो किया था।

आपके सर्वर साइड इंफ्रास्ट्रक्चर के लिए सबसे आसान उपाय है थ्रॉटल। अनुरोधों पर कठोर सीमाएँ, खासकर यदि आप अपने विशिष्ट उपयोग के मामले के आधार पर उन्हें तार्किक रूप से आज़मा सकते हैं और फैला सकते हैं (यानी यदि आपके पास एक केंद्रीकृत सेवा है तो कुछ कठिन निर्णय लें, क्या आप भौगोलिक रूप से दूर के अनुरोधों को रोकना शुरू करना चाहते हैं, जिसके परिणामस्वरूप धागे लटक सकते हैं सर्वर साइड? या क्या आप अपने अपरिहार्य अभी तक मामूली आउटेज को समान रूप से वितरित करना चाहते हैं? आदि) यह मूल रूप से इस तथ्य से उबता है कि गेटवे से जानबूझकर 503 लौटना एक बहुत सस्ता है, जो अनुरोध को जाने और 504 डॉलर भेजने की तुलना में बहुत सस्ता है। वैसे भी। मूल रूप से ग्राहकों को उस व्यवहार के लिए बाध्य करें जो आप वर्तमान में प्रदान कर सकते हैं और सही प्रतिक्रिया प्रदान कर सकते हैं ताकि ग्राहक उचित प्रतिक्रिया कर सकें।


5

बैकऑफ़ मैकेनिज़्म का उपयोग करके इन रिट्री तूफानों को रोकने का एक तरीका है।

स्केल गाइड के लिए Google App Engine Designing के पुन: प्रयास अनुभाग पर लागू बैकऑफ़ से :

आपका कोड विफलता पर पुन: प्रयास कर सकता है, चाहे वह क्लाउड डाटस्टोर जैसी सेवा या URL Fetch या सॉकेट API का उपयोग करके बाहरी सेवा हो। इन मामलों में, आपको हमेशा गड़बड़ी झुंड समस्या से बचने के लिए एक यादृच्छिक घातीय बैकऑफ़ नीति को लागू करना चाहिए । अधिकतम रीट्री सीमा समाप्त होने के बाद आपको कुल रिट्रीस की संख्या को भी सीमित करना चाहिए और असफलताओं को संभालना चाहिए।

ज्यादातर जीएई एपीआई में पहले से ही ऐसे बैकऑफ तंत्र / नीतियां हैं जो डिफ़ॉल्ट रूप से सक्षम हैं।


धन्यवाद, बैकऑफ़ तंत्र को लागू करना बहुत अच्छी सलाह है, मैं आमतौर पर क्षणिक दोष हैंडलिंग एप्लीकेशन ब्लॉक का उपयोग करके विन्यास योग्य बैकऑफ़ के लिए जाता हूं । हालांकि, एज़्योर में परिचालन अनुभव के 5 साल के हाइपर-स्केल अनुप्रयोगों के माध्यम से, यहां तक ​​कि "रिट्री स्टॉर्म" में तेजी से फैलने वाले बैकऑफ़ के साथ, अभी भी अक्सर होता है - मैं उनसे बचने के लिए एक व्यावहारिक रणनीति नहीं पा सका हूं।
रिचर्ड स्लेटर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.