जिटर के साथ एक्सपोनेंशियल बैकऑफ: लचीला सिस्टम के लिए एक शक्तिशाली उपकरण

Apr 19 2023
आज की दुनिया में, कंप्यूटर सिस्टम विश्वसनीय होना चाहिए। प्रौद्योगिकी पर निर्भर अधिक से अधिक व्यवसायों के साथ, किसी भी डाउनटाइम के परिणामस्वरूप महत्वपूर्ण वित्तीय नुकसान हो सकता है।

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

घातीय बैकऑफ़ क्या है?

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

घातीय बैकऑफ़ का उदाहरण

मान लीजिए कि आपके पास एक ऐसी स्क्रिप्ट है जो किसी ऐसी सेवा के लिए API कॉल करती है जो कभी-कभी नेटवर्क कनेक्टिविटी समस्याओं या थ्रॉटलिंग के कारण त्रुटि दे सकती है। आप एक पुनर्प्रयास रणनीति लागू करना चाहते हैं जो बढ़ते विलंब समय के साथ एपीआई कॉल को 5 गुना तक पुनः प्रयास करता है।

एक्सपोनेंशियल बैकऑफ़ रणनीति को लागू करने का तरीका यहां दिया गया है:

घातीय बैकऑफ़

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

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

जिटर के साथ एक्सपोनेंशियल बैकऑफ़ क्या है?

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

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

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

जिटर के साथ एक्सपोनेंशियल बैकऑफ़ का उदाहरण

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

जिटर के साथ एक्सपोनेंशियल बैकऑफ़

जैसा कि आप देख सकते हैं, पेश किए गए घबराहट के कारण वास्तविक विलंब समय थोड़ा भिन्न होता है। यह एक साथ होने वाले पुनर्प्रयास की संभावना को कम करता है और सेवा को ओवरलोड होने से रोकता है।

जिटर के साथ एक्सपोनेंशियल बैकऑफ़ का उपयोग करना आपके एप्लिकेशन को अधिक लचीला और भरोसेमंद बना सकता है, क्षणिक त्रुटियों को बेहतर ढंग से संभाल सकता है और उपयोगकर्ता अनुभव में सुधार कर सकता है।

AWS S3 सेवा के साथ जिटर के साथ घातीय बैकऑफ़ लागू करना

मान लें कि आपके पास एक पायथन स्क्रिप्ट है जो Boto3 लाइब्रेरी का उपयोग करके S3 बकेट में फ़ाइल अपलोड करती है। कभी-कभी, नेटवर्क समस्याओं या अन्य क्षणिक विफलताओं के कारण अपलोड विफल हो सकता है। विफलताओं के मामले में अपलोड को पुनः प्रयास करने के लिए आप जिटर के साथ घातीय बैकऑफ़ को कार्यान्वित करना चाहते हैं।

यहां जिटर के साथ एक्सपोनेंशियल बैकऑफ़ को लागू करने के लिए स्क्रिप्ट को संशोधित करने का तरीका बताया गया है:

import boto3
import random
import time

# Create an S3 client
s3 = boto3.client('s3')

# Define the upload function with Exponential Backoff and Jitter
def upload_file_with_retry(bucket, key, filename, max_retries=5, base_delay=1.0, max_delay=60.0, jitter_range=0.5):
    retry_count = 0
    delay = base_delay
    while True:
        try:
            print(f'Uploading {filename} to s3://{bucket}/{key}')
            s3.upload_file(filename, bucket, key)
            print(f'Upload complete!')
            return True
        except Exception as e:
            print(f'Upload failed: {str(e)}')
            if retry_count >= max_retries:
                print(f'Retries exhausted. Aborting upload.')
                return False
            else:
                jitter = random.uniform(-jitter_range, jitter_range)
                delay *= 2
                delay = min(delay + jitter, max_delay)
                print(f'Retrying in {delay} seconds...')
                time.sleep(delay)
                retry_count += 1

# Call the upload function with retry
upload_file_with_retry('my-bucket', 'my-file.txt', '/path/to/my-file.txt')

  • upload_file_with_retry फ़ंक्शन S3 बकेट नाम, कुंजी (फ़ाइल पथ), स्थानीय फ़ाइल नाम और पुनर्प्रयास सेटिंग के लिए वैकल्पिक पैरामीटर लेता है
  • फ़ंक्शन में थोड़ी देर का लूप होता है जो फ़ाइल को तब तक अपलोड करता रहता है जब तक कि सफल या पुनर्प्रयास की अधिकतम संख्या तक नहीं पहुंच जाता।
  • यदि कोई अपलोड प्रयास विफल हो जाता है, तो फ़ंक्शन एक त्रुटि संदेश प्रिंट करता है और अगले पुनर्प्रयास विलंब की गणना करता है। विलंब आधार विलंब (इस उदाहरण में 1.0 सेकंड) से शुरू होता है और अधिकतम विलंब (इस उदाहरण में 60.0 सेकंड) तक पहुंचने तक प्रत्येक पुन: प्रयास के साथ दोगुना हो जाता है।
  • जिटर पेश करने के लिए, फ़ंक्शन नेगेटिव और पॉज़िटिव जिटर रेंज (इस उदाहरण में 0.5 सेकंड) के बीच एक रैंडम फ्लोट संख्या उत्पन्न करता है और इसे अगले रिट्रीट विलंब में जोड़ता है। यह सुनिश्चित करता है कि वास्तविक विलंब थोड़ा भिन्न होता है और एक साथ होने वाले पुनर्प्रयास की संभावना को कम करता है।
  • अगले पुन: प्रयास से पहले गणना की गई देरी के लिए फ़ंक्शन सोता है।

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

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

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