GH GambleHub

टाइमआउट и सर्किट नियंत्रण

1) आपको इसकी आवश्यकता क्यों है

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


2) बुनियादी परिभाषाएँ

2. 1 प्रकार के टाइमआउट (L7/L4)

टाइमआउट कनेक्ट करें - टीसीपी/टीएलएस कनेक्शन स्थापित करें।

TLS/हैंडशेक टाइमआउट - हैंडशेक - प्रस्तावना।

टाइमआउट लिखें - अनुरोध भेजें (शरीर सहित)।

टाइमआउट पढ़ें - प्रतिक्रिया और/या पूरे शरीर के पहले बाइट के लिए प्रतीक्षा करें।

आइडल/कीप-अलाइव टाइमआउट - निष्क्रिय कनेक्शन।

समग्र समय सीमा - पूरे अनुरोध के लिए "कठिन" समय सीमा (एंड-टू-एंड)।

2. 2 डेडलाइन बजट

लक्ष्य 'समय सीमा कुल' चुनें और चरणों के अनुसार विभाजित करें:
  • 'इंग्रेस (गेटवे) + ऑथजेड + ऐप + डीबी/कैश + आउटबाउंड पीएसपी'।
भुगतान 'POST' (400 ms लक्ष्य) के लिए उदाहरण:
  • प्रवेश द्वार: 30 एमएस,
  • आवेदन: 120 ms,
  • DB: 120 ms,
  • PSP: 100 ms,
  • मार्जिन: 30 एमएस।

2. 3 प्रचार और रद्द करना

'डेडलाइन '/' टाइमआउट' मस्ट को श्रृंखला (संदर्भ, हेडर, जीआरपीसी डेडलाइन) के नीचे पारित किया जाए। समाप्ति पर - पृष्ठभूमि संचालन रद्द करें (गर्भपात/सीटीएक्स रद्द), स्पष्ट ताले/सेमाफोर।


3) टाइमआउट सेटिंग रणनीतियाँ

1. टॉप-डाउन: SLO और p95 पर आधारित - सेट एंड-टू-एंड डेडलाइन, फिर उप-टाइमआउट में विभाजित।

2. "महंगे" रास्तों की पहचान करें (फ़ाइल डाउनलोड, रिपोर्ट, बाहरी पीएसपी) - व्यक्तिगत लंबे समय तक, लेकिन सीमित।

3. पहचान बनाम लिखना:
  • पहचान (GET/स्थिति पुनरावृत्ति) - छोटी, अधिक आक्रामक;
  • लेखन/मौद्रिक - थोड़ा लंबा, लेकिन एक एकल पुनरावृत्ति और पहचान के साथ।
  • 4. योजनाओं/किरायेदारों द्वारा स्नातक (उद्यम में अधिक समय हो सकता है, लेकिन कम समानतावाद)।


4) सर्किट ब्रेकर: मॉडल और पैरामीटर

4. 1 ट्रिगर नीतियां

असफलता दर - त्रुटि दर ≥ X% क्वेरी/टाइम N विंडो पर।

परिणामी विफलताएं: एम लगातार विफलताएं।

धीमी गति से कॉल दर - सीमा से अधिक कॉल का अनुपात टी।

त्रुटि वर्ग: टाइमआउट/5xx/कनेक्शन-रीसेट - "घातक", 4xx - ध्यान में नहीं लेते हैं।

4. 2 शर्तें

बंद - सब कुछ छोड़ देता है, आंकड़े जमा करता है।

तत्काल असफलता (संसाधनों को सहेजता है, निर्भरता को कुचलता नहीं है)।

"जल परीक्षण" के लिए आधा-खुला - छोटे "नमूने" (एन अनुरोध)।

4. 3 उपयोगी परिवर्धन

बल्कहेड: प्रति निर्भरता के अनुसार धागे/कनेक्शन का एक पूल ताकि कोई भी सब कुछ "चूसता" न हो।

अनुकूली संगति: मनाया विलंबता द्वारा स्वचालित संगति प्रतिबंध (AIMD/वेगास जैसे एल्गोरिदम)।

लोड शेडिंग: स्थानीय संसाधन की कमी के मामले में प्रारंभिक विफलता/गिरावट (कतारें, सीपीयू, जीसी ठहराव)।


5) बातचीत: टाइमआउट, रिट्रीट, लिमिट

पहले समय सीमा, फिर पीछे हटना: प्रत्येक पुनरावृत्ति को एक सामान्य समय सीमा में फिट होना चाहिए।

रिप्ले के लिए बैकऑफ + जिटर; 'रीट्री-आफ्टर' और रीट्री-बजट का सम्मान करें।

दर सीमित करना: ब्रेकर खुली - खुली सीमाओं के साथ ताकि तूफान को तेज न किया जा सके।

पहचान: लेखन संचालन पर अनिवार्य ("गूंगा" समय के साथ लेने से बचने के लिए)।

कहां पीछे हटना है: अधिमानतः अंदर गहरे के बजाय किनारे (ग्राहक/प्रवेश द्वार) पर।


6) व्यावहारिक लक्ष्य मूल्य (बेंचमार्क)

पब्लिक रीड एपीआई: एंड-टू-एंड '200-500 एमएस', टाइमआउट '100-300 एमएस' पढ़ें।

महत्वपूर्ण लेखन (भुगतान): '300-800 ms' e2e; बाहरी PSP ≤ '250-400 ms'।

कनेक्ट/टीएलएस: '50-150 एमएस' (अधिक - नेटवर्क/सोल्डरिंग समस्या)।

आइडल: '30-90 एस' (मोबाइल क्लाइंट - बैटरी बचाने के लिए छोटा)।

p95/p99 और क्षेत्रों के लिए मान समायोजित करें।


7) कॉन्फ़िग और उदाहरण

7. 1 दूत (क्लस्टर + मार्ग, छद्म)

yaml clusters:
- name: payments_psp connect_timeout: 100ms type: STRICT_DNS lb_policy: ROUND_ROBIN circuit_breakers:
thresholds:
- priority: DEFAULT max_connections: 2000 max_requests: 2000 max_retries: 50 outlier_detection:
consecutive_5xx: 5 interval: 5s base_ejection_time: 30s max_ejection_percent: 50

routes:
- match: { prefix: "/api/v1/payments" }
route:
cluster: payments_psp timeout: 350ms        # per-request deadline idle_timeout: 30s retry_policy:
retry_on: "reset,connect-failure,refused-stream,5xx,gateways"
num_retries: 1 per_try_timeout: 200ms

7. 2 NGINX (परिधि)

nginx proxy_connect_timeout 100ms;
proxy_send_timeout  200ms;  # write proxy_read_timeout  300ms;  # read (первый байт/все тело)
keepalive_timeout   30s;
send_timeout     15s;

Быстрый отказ при перегрузке limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_conn addr 50;

7. 3 जीआरपीसी (ग्राहक, गो-स्यूडो)

go ctx, cancel:= context.WithTimeout(context.Background(), 350time.Millisecond)
defer cancel()
resp, err:= client.Pay(ctx, req) // Deadline передается вниз

7. 4 HTTP क्लाइंट (जाओ)

go client:= &http.Client{
Timeout: 350 time.Millisecond, // общий дедлайн на запрос
Transport: &http.Transport{
TLSHandshakeTimeout: 100 time.Millisecond,
ResponseHeaderTimeout: 250 time.Millisecond,
IdleConnTimeout: 30 time.Second,
MaxIdleConnsPerHost: 100,
},
}

7. 5 Resilience4j (जावा, छद्म)

yaml resilience4j.circuitbreaker.instances.psp:
slidingWindowType: TIME_BASED slidingWindowSize: 60 failureRateThreshold: 50 slowCallDurationThreshold: 200ms slowCallRateThreshold: 30 permittedNumberOfCallsInHalfOpenState: 5 waitDurationInOpenState: 30s

resilience4j.timelimiter.instances.psp:
timeoutDuration: 350ms

8) अवलोकन और सतर्कता

8. 1 मेट्रिक्स

'http _ client _ अनुरोध {समापन बिंदु, स्थिति}', 'क्लाइंट _ लेटेंसी _ बाल्टी'

'टाइमआउट _ टोटल {stage = कनेक्टपढ़ेंलेखनसमय सीमा} '
'सिर्किट _ राज्य {निर्भरता}': 0/1/2 (बंद/आधा/खुला)
'slow _ call _ rate', 'fallow _ rate'
'सक्रिय _ संगति {मार्ग, निर्भरता}'
'शेड _ अनुरोध _ कुल {कारण}' (लोड शेडिंग)
'retry _ total {court}', 'retry _ madge _ used'

8. 2 ट्रेल्स

स्पैन: इंग्रेस → हैंडलर → डीबी/रेडिस → बाहरी।

विशेषता: 'टाइमआउट _ ms _ targe', 'सर्किट _ state', 'कतार _ time _ ms'.

उदाहरण: विशिष्ट ट्रेस-आईडी के लिए p99 चोटियों को टाई करें।

8. 3 अलर्ट

'p99 _ latency {crictional}'> एक पंक्ति में X मिनट को लक्षित करता है.

'टाइमआउट _ रेट {डिपेंडेंसी}' हॉप्ड> Y%।

'ओपन '/' फ्लैपिंग' ब्रेकर के लिए बार-बार संक्रमण।

उच्च सीपीयू/जीसी के 'शेड _ अनुरोधों _ कुल' का विकास।


9) अनुकूली संगति और लोड शेडिंग

9. 1 आइडिया

स्वचालन समानता को कम करता है क्योंकि विलंबता पूंछ बढ़ ती है:
  • AIMD: धीरे-धीरे बढ़ें, तेजी से कमी करें।
  • वेगास जैसा: कतार का समय रखें।
  • टोकन-आधारित: प्रत्येक अनुरोध टोकन को "जला" देता है; मापी गई गति के आधार पर टोकन जारी किए जाते हैं।

9. 2 कार्यान्वयन

स्थानीय सेमाफोर प्रति-मार्ग; लक्ष्य सीमा के नीचे 'कतार _ समय' रखना है।

गेटवे पर वैश्विक "फ्यूज" (सीमांत आरपीएस/प्रतिस्पर्धी)।

यदि सीपीयू/कनेक्शन की कमी है, तो तर्क निष्पादन से पहले प्रारंभिक विफलता ('रेट्री-आफ्टर' के साथ 429/503)।


10) परीक्षण और अराजकता परिदृश्य

विलंबता इंजेक्शन: कृत्रिम रूप से प्रति निर्भरता 50-300 एमएस जोड़ें।

पैकेट हानि/dup/drop (tc/tbf, toxiproxy)।

नॉब टर्निंग: कनेक्शन पूल को कम करें, संतृप्ति के लिए लोड बढ़ाएं।

किल/डिग्रेड एक ज़ोन/शार्ड (आंशिक अनुपलब्धता)।

चेक: रेट्रे तूफान को "विफल" नहीं करता है; ब्रेकर अनुमानित रूप से खुलता है; क्या कतार बढ़ रही है।


11) एंटीपैटर्न

विवरण कनेक्ट/टीएलएस/प्रति-चरण के बिना एक वैश्विक "रीड टाइमआउट"।

एक सामान्य समय सीमा की कमी - रिट्रेज़एसएलओ से परे है।

रेट्राई बिना जिटर के और बिना रीट्री-बजट के।

निष्क्रिय समय के बिना "अनन्त" कनेक्शन - लीक विवरणकर्ता।

ब्रेकर 4xx को घातक गलतियों के रूप में गिना जाता है।

क्लाइंट टाइमआउट के बाद कोई पूर्ववत/गर्भपात → पृष्ठभूमि कार्य जारी नहीं है

मोबाइल/अस्थिर नेटवर्क के लिए समय बहुत लंबा है।


12) आईगेमिंग/वित्त की विशिष्टताएं

क्रिटिकल राइट (डिपॉजिट/आउटपुट): आइडेम्पोटेंसी-की के साथ एक छोटा दोहराव, फिर अनंत अपेक्षाओं के बजाय '202 स्वीकृत' + मतदान।

पीएसपी/बैंकिंग: प्रदाता/क्षेत्र (कुछ धीमी) द्वारा अलग नीतियां।

जिम्मेदार भुगतान और सीमाएं: ताले/समीक्षाओं के लिए - तेजी से '423/409', "हैंगिंग" लेनदेन को न फैलाएं।

रिपोर्टिंग/एकत्रीकरण - अतुल्यकालिक रूप से चलाएँ (बैच + स्थिति संसाधन)।


13) प्रोड रेडीनेस चेकलिस्ट

  • एंड-टू-एंड क्रिटिकल रूट डेडलाइन (GET/POST) परिभाषित।
  • मंच द्वारा बजट; समय सीमा प्रसार सक्षम है।
  • गेटवे और क्लाइंट पर कनेक्ट/टीएलएस/रीड/राइट/इडल कॉन्फ़िग।
  • विफलता-दर और धीमी गति से कॉल थ्रेसहोल्ड के साथ सर्किट ब्रेकर; आधा खुला तर्क सही करें।
  • निर्भरता पर Bulkheads; प्रति-मार्ग संगामिति सीमा।
  • ओवरलोड के दौरान व्यापार तर्क निष्पादित होने से पहले लोड शेडिंग।
  • रिट्रीट के साथ एकीकरण: बैकऑफ + जिटर, रीट्री-बजट, 'रेट्री-आफ्टर' का सम्मान करें।
  • Idempotency लिखते हैं, 'Idempotency-Key' और घटनाओं के लिए आउटबॉक्स।
  • मेट्रिक्स: टाइमआउट/स्लो-कॉल/ब्रेकर/कतार समय/प्रतिस्पर्धी।
  • अराजकता परीक्षण: देरी/हानि/विफलताओं का इंजेक्शन, क्षेत्रों का क्षरण।
  • ग्राहक प्रलेखन: नमूना समय, प्रतिक्रिया कोड, फिर से युक्तियाँ।

14) टीएल; डीआर

प्रत्येक अनुरोध को एक कठिन समय सीमा दें, इसे चरणों में व्यवस्थित करें और इसे श्रृंखला के नीचे फैलाएं। सर्किट ब्रेकर + बल्कहेड्स + अनुकूली संगति + लोड शेडिंग के माध्यम से दोष प्रबंधित करें। रिप्ले - केवल समय सीमा के भीतर, जिटर और बजट के साथ; लिखना - केवल पहचानने वाला। टाइमआउट/स्लो-कॉल, ब्रेकर स्थिति और 'कतार _ टाइम' को मापते हैं, नियमित रूप से अराजकता परीक्षण चलाते हैं।

Contact

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

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

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

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

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

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