Logo GH

पुनः प्रयास और बैकऑफ नीतियां

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

1) बुनियादी सिद्धांत

1. पहले टाइमआउट/डेडलाइन, फिर पीछे हटना। समय सीमा के बिना दोहराना केवल विफलता को लंबा करता है।

2. रिट्रे - केवल सुरक्षित/निष्क्रिय संचालन के लिए। असुरक्षित लोगों के लिए - पहचान-कुंजी और लेनदेन की गारंटी के माध्यम से।

3. बैकऑफ अनिवार्य है। एक्सपोनेंशियल या जीसीआरए जैसी तरंगों को डिसिंक्रोनाइज़करने के लिए जिटर के साथ।

4. प्रयासों की संख्या और कुल बजट समय को सीमित करें। उपयोक्ता का SLO न छोड़ें।

5. बुनियादी ढांचे के संकेतों का सम्मा '429/503' + 'रेट्री-आफ्टर', सर्किट ब्रेकर स्थिति, कतार की सीमा।

2) टाइमआउट और डेडलाइन (समय सीमा प्रसार)

समय समाप्ति का अनुरोध करें

टाइमआउट रचना: कुल (पहला प्रयास + बैकऑफ + बाद में) ≤ उपयोगकर्ता की समय सीमा।

रीड/रिकॉर्ड के लिए अलग-अलग समय: रिकॉर्ड छोटे और सख्त हैं; पढ़ें हेजिंग की अनुमति देता है।

3) पहचान और सुरक्षित दोहराता है

पढ़ ता है (GET/idempotent RPC): '5xx', 'UNAVAILABLE', नेटवर्क टाइमआउट के साथ सुरक्षित रूप से दोहराया गया।

रिकॉर्ड्स:
  • सीमा पर 'Idempotency-Key' (HTTP) या अनुरोध-ID का उपयोग करें; सर्वर को डीडुप्लिकेट करना होगा।
  • पहचान करने वाले हैंडलर लिखें: "अपसर्ट", "कम से कम-एक बार" + मुआवजा (गाथा)।
  • बाहरी भुगतान/बस्तियां - केवल पहचान कुंजी और लेनदेन लॉग के साथ।

4) बैकऑफ एल्गोरिदम

घातीय: 'आधार 2 ^ प्रयास', 'max _ backoff' से घिरा हुआ है।

सजाया गया जिटर (पूर्ण/समान जिटर) - ग्राहकों को डिसिंक्रोनाइज़करने के लिए रेंज में यादृच्छिकता।

GCRA/टोकन-बकेट जैसी देरी: दर सीमा के अनुरूप।

सीमाएँ: 'प्रारंभिक _ बैकऑफ' (50-200 एमएस पढ़ ता है; 200-500 ms रिकॉर्ड), 'max _ backoff' (1-5 s), 'max _ elapsed' (उदाहरण के लिए, 3-10 s)।

अनुशंसित पैटर्न घातीय बैकऑफ + फुल जिटर है।

5) दोहराएं/निर्णय न दोहराएं

हम इस पर दोहराते हैं:
  • नेटवर्क त्रुटियां/टाइमआउट, '429' (सम्मानजनक रूप से 'रेट्री-आफ्टर'), "सॉफ्ट" '5xx' ('502/503/504'), gRPC 'UNAVAIBLE/DEAMEMENT _ EX'।
दोहराएँ नहीं जब:
  • '4xx' (कुछ परिदृश्यों में '409/429/408' को छोड़ कर), व्यापार त्रुटियां, '401/403', सत्यापन त्रुटियां, स्पष्ट 'DoNotRetry' flag।
स्मार्ट अपवाद:
  • '409 संघर्ष' - कभी-कभी सर्वसम्मति/ताले के बाद देरी के साथ दोहराया जाता है।
  • '404' for स्थायी रूप से लगातार पढ़ ता है - एक या दो बार एक छोटे बैकऑफ के साथ।

6) कॉन्सुरेंसी कैप और "रेट्रे स्टॉर्म"

एक साथ रिट्रे प्रति-क्लाइंट/प्रति-किरायेदार/प्रति-समापन बिंदु सीमित करें।

प्रति अनुरोध प्रयासों की कुल सीमा (उदा। 2-3).

प्रवेश नियंत्रण के माध्यम से गर्म समापन बिंदुओं को धीमा करें ताकि कतारें न बढ़ें।

7) सर्किट ब्रेकर और सीमाओं के साथ बातचीत

यदि सीबी खुला है, तो सीधे रिट्रे प्रदर्शन न करें - फॉलबैक पर जाएं या 'आधे-खुले' नमूनों की प्रतीक्षा करें।

'429' पर - 'रेट्री-आफ्टर' का सम्मान; यदि नहीं, तो "सॉफ्ट" बैकऑफ का उपयोग करें।

रिट्रेज़तनाव बढ़ा सकता है; अनुकूली थ्रेसहोल्ड (एक घटना के लिए निचला 'मैक्स _ प्रयास') लागू करें।

8) प्रोटोकॉल और अनुबंध

HTTP

कोड: '408/429/5xx'।

हेडर: 'रेट्री-आफ्टर', परिवार 'रेटलिमिट-', 'आइडेम्पोटेंसी-की', 'रिक्वेस्ट-आईडी'।

क्लाइंट को 'एक्स-रिक्वेस्ट-टाइमआउट '/' डेडलाइन-एट' (यदि हां) भेजना होगा।

gRPC

समय सीमा के साथ संदर्भ का उपयोग करें; 'UNAVELABLE', 'DEADEMY _ EXCEEED', प्रति विधि नीतियों का सम्मान करें।

Idempotent RPC के लिए, retrays शामिल करें; उत्परिवर्तन के लिए - केवल पहचान समर्थन के साथ।

9) कतारें, पृष्ठभूमि कार्य और एकीकरण

कम से कम-एक बार हैंडलर - पहचान क्रियाएं, प्रमुख कमी।

प्रयासों के बीच बैकऑफ के लिए देरी कतार (उदाहरण के लिए, 5s/30s/2m)।

प्रयासों और मैनुअल प्रसंस्करण की सीमा के साथ मृत-अक्षर कतार (DLQ)।

आउटबॉक्स/सीडीसी - ताकि रिप्ले लेन-देन की अखंडता से समझौता न करें।

10) हेजिंग बनाम रेट्रीज़

हेजिंग पूंछ विलंबता में अत्यधिक महत्वपूर्ण पढ़ ने के लिए उपयोगी है।

सीमा: एक्स% से अधिक अनुरोध, स्टार्ट-ग्रेस देरी (उदाहरण के लिए, p95 विलंबता), हारने वालों का रद्द करना।

मजबूत पहचान के बिना संक्रियाओं को लिखने के लिए हेजिंग लागू न करें।

11) टेलीमेट्री और अवलोकन

Теги: 'किरायेदार _ id', 'समापन बिंदु', 'प्रयास', 'निर्णय' (पुनरावृत्ति/स्किप), 'कारण', 'बैकऑफ _ एम्स', 'डेडलाइन _ एम्स', 'idempotency _ key'।

मेट्रिक्स: रिट्रीट का हिस्सा, रिट्रीट के बाद सफलता, p95/p99 "एंड-टू-एंड", पार की गई समय सीमा की संख्या, सीबी ट्रिगर।

ऑडिट लॉग: ऊपरी एन "शोर" कुंजियाँ/समापन बिंदु, 429/503 के साथ सहसंबंध।

12) परीक्षण और अराजकता

प्रोफाइल: "देखा" (फट-लुल्ल), "तूफान" (बड़ेपैमाने पर समय), "चिपचिपा" त्रुटियां (हर Nth), विलंबता पूंछ।

टोरस लिमिटर/कैश/कतार विफलताएं, घड़ी-तिरछा।

जाँच करता है कि कुल अवधि (प्रयास + बैकऑफ़) एसएलओ में फिट बैठता है।

13) नीति स्यूडोकोड

pseudo handle(req, deadline):
attempt = 0 backoff = initial()
while attempt < MAX_ATTEMPTS and now() < deadline:
attempt += 1 with timeout(per_attempt_timeout(deadline, attempt)):
try:
resp = call(req)
if isRetryableStatus(resp): raise Retryable(resp. status)
return resp except Retryable as e:
if circuit. isOpen(dep) or! isIdempotent(req): break sleep(jitter(backoff))
backoff = min(exp(backoff), MAX_BACKOFF)
except NonRetryable:
break return fail_or_fallback(req)

14) कॉन्फ़िगरेशन टेम्पलेट (उदाहरण)

yaml retries:
default:
max_attempts: 3 initial_backoff_ms: 150 max_backoff_ms: 2000 strategy: exponential_full_jitter respect_retry_after: true per_attempt_timeout_fraction: 0. 4 # 40% of remaining deadline hedging:
enabled: false read_heavy:
max_attempts: 4 initial_backoff_ms: 80 max_backoff_ms: 1200 hedging:
enabled: true start_after_p95_ms: 300 max_extra_requests_ratio: 0. 05 write_strict:
max_attempts: 2 initial_backoff_ms: 250 max_backoff_ms: 1000 idempotency_required: true

limits:
concurrent_retries_per_tenant: 100 concurrent_retries_per_endpoint: 20

15) प्री-सेल चेकलिस्ट

  • डेडलाइन कॉल के माध्यम से प्रचार; SLO ≤ की कुल अवधि।
  • जिटर के साथ बैकऑफ एल्गोरिथ्म; लोड परीक्षण द्वारा मान्य पैरामीटर।
  • IDempotence: रिकॉर्ड के लिए कुंजी/लॉग/मुआवजे।
  • रीड और रिकॉर्ड के लिए रिट्रे पॉलिसियां अलग-अलग हैं; 'रीट्री-आफ्टर' का सम्मान करें।
  • रिट्रे प्रतिस्पर्धा और प्रयासों की कुल संख्या सीमित है।
  • सर्किट ब्रेकर और दर सीमा के साथ एकीकरण विन्यस्त है।
  • टेलीमेट्री: टैग, मैट्रिक्स, कारण लॉग; डैशबोर्ड p95/p99, रीट्रे के बाद सफलता का हिस्सा।
  • "तूफान" और विलंबता पूंछ के परीक्षण, कार्यों के लिए डीएलक्यू।
  • ग्राहक प्रलेखन: कोड/शीर्षक, बैकऑफ और रद्द करने के उदाहरण।

16) विशिष्ट त्रुटियाँ

टाइमआउट/डेडलाइन के बिना रिप्ले "शाश्वत अपेक्षाएं" हैं।

बिना झटके के निश्चित ठहराव - तुल्यकालिक तरंगें और DDoS आत्म-तोड़फोड़।

निष्क्रियता के बिना असुरक्षित रिकॉर्ड की पुनरावृत्ति - डुप्लिकेट और desynchronization।

'रीट्री-आफ्टर' और सीबी सिग्नल की अनदेखी - बढ़ ती घटना।

टोपी और प्रवेश नियंत्रण की कमी के कारण कतारों में अड़ चनें।

रेट्रे के कारणों/समाधानों की टेलीमेट्री की कमी - "अंधी उड़ान"।

17) त्वरित व्यंजनों

सार्वजनिक एपीआई पढ़ ता है: 3 प्रयास, 'प्रारंभिक = 100 मीटर', 'अधिकतम = 1s', पूर्ण झटका, 5% तक यातायात।

महत्वपूर्ण रिकॉर्ड (भुगतान): 1-2 अधिकतम प्रयास, सख्त समय समाप्ति, अनिवार्य 'आइडेम्पोटेंसी-की', कोई हेजिंग नहीं।

बाहरी एकीकरण: '429/रीट्री-आफ्टर', 'मैक्स _ प्रयास = 3', 'मैक्स _ बैकऑफ = 2-5 एस', आउटगोइंग प्रवाह सीमा का सम्मान करें।

पृष्ठभूमि कार्य: देरी-बैकऑफ़ (5s → 30 → 2m), DLQ, पहचानने वाले हैंडलर।

निष्कर्ष

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

Contact

हमसे संपर्क करें

किसी भी प्रश्न या सहायता के लिए हमसे संपर्क करें।हम हमेशा मदद के लिए तैयार हैं!

Telegram
@Gamble_GC
इंटीग्रेशन शुरू करें

Email — अनिवार्य है। Telegram या WhatsApp — वैकल्पिक हैं।

आपका नाम वैकल्पिक
Email वैकल्पिक
विषय वैकल्पिक
संदेश वैकल्पिक
Telegram वैकल्पिक
@
अगर आप Telegram डालते हैं — तो हम Email के साथ-साथ वहीं भी जवाब देंगे।
WhatsApp वैकल्पिक
फॉर्मैट: देश कोड और नंबर (उदा. +91XXXXXXXXXX)।

बटन दबाकर आप अपने डेटा की प्रोसेसिंग के लिए सहमति देते हैं।