→ विलंबता प्रौद्योगिकी और बुनियादी ढांचा और एपीआई प्रतिक्रिया अनुकूलन
विलंबता और एपीआई प्रतिक्रिया अनुकूलन
1) "विलंबता" क्या है और यह क्यों मायने रखता है
विलंबता - कुल अनुरोध देरी: नेटवर्क (DNS + TCP + TLS + RTT), बैलेंसर/गेटवे, अनुप्रयोग, DB/caches/कतारें, बाहरी एकीकरण। P95/P99 व्यवसाय के लिए महत्वपूर्ण हैं, औसत नहीं: यह "पूंछ" है जो यूएक्स, सीआर और एसएलओ को नष्ट करती है।
बेसिक एसएलआई:- 'SLI _ latency _ P95 = P95 (report _ time)' 5/30 मिनट में
- 'SLI _ latency _ P99 = P99 (प्रतिक्रिया _ समय)'
- 'SLI _ कतार _ time = P95 (कार्यकर्ता _ कतार _ समय)'
- 'SLI _ ext _ call _ P95 = P95 (बाहरी _ प्रदाता _ विलंबता)'
2) विलंब स्रोत मानचित्र (और कहाँ खुदाई करना है)
1. नेटवर्क और प्रोटोकॉल: डीएनएस, टीसीपी हैंडशेक, टीएलएस, हेड-ऑफ-लाइन (HTTP/1। 1), पैकेट हानि, बीबीआर/ईसीएन।
2. गेटवे/बैलेंसर: धीमी गति से स्वास्थ्य-जांच, अमान्य समय, गर्म बोतलें।
3. आवेदन: ताले, जीसी/स्टॉप-द-वर्ल्ड, समकालिक I/O, विवाद।
4. भंडार: धीमा डेटाबेस प्रश्न, कोई सूचकांक नहीं, ठंडे पृष्ठ।
5. बाहरी सेवाएं: पीएसपी/केवाईसी, तृतीय पक्ष एपीआई (संकीर्ण एसएलए)।
6. कतारें और पृष्ठभूमि जैब: अतिभारित श्रमिक, कोई बैकप्रेशर नहीं।
7. कैश/एज: कैश मिस, कमजोर टीटीएल, अवैध विकलांगता।
3) नेटवर्क और प्रोटोकॉल
3. 1 डीएनएस/टीसीपी/टीएलएस
डीएनएस प्रीफेच/प्रीकनेक्ट सामने, लंबे समय तक आईपी से पीएसपी तक।
क्लाइंट में अलाइव/कनेक्शन पूलिंग रखें; सर्वर पर - कुल कनेक्शन।
टीएलएस: फिर से शुरू/सत्र टिकट, एक आधुनिक सिफर पैकेज; असुरक्षित अज्ञात कार्यों के लिए 0-RTT से बचें।
टीसीपी: चैट/छोटे पैकेट के लिए नागल ('TCP _ NODELAY') अक्षम करें; ट्यून 'इनिशियल विंडो', बीबीआर को जहां उपयुक्त हो सक्षम करें।
3. 2
HTTP/2: मल्टीप्लेक्सिंग HTTP/1 HOL ताले को कम करता है। 1; धागे की प्राथमिकताओं की निगरानी
HTTP/3/QUIC: नुकसान/आरटीटी का कम प्रभाव; मोबाइल/अंतर्राष्ट्रीय नेटवर्क पर उपयो
शीर्षिका संपीड़न: HPACK/QPACK, लेकिन एक उचित शीर्षिका आकार रखें.
3. 3 संतुलन/मार्ग
स्थानीयता-जागरूक (ज़ोनिंग), EWMA/कम से कम-अनुरोध बनाम गर्म उदाहरण।
चिपके सत्र - केवल तभी जब कोई राज्य हो; अन्यथा स्टेटलेस + साझा कैश/सत्र।
4) प्रारूप, पेलोड, संपीड़न
निचोड़: Brotli (पाठ), Gzip फॉलबैक के रूप में; द्विआधारी प्रारूप: gRPC/आंतरिक API के लिए Protobuf/Avro।
पेलोड कम करें: चयनात्मक फ़ील्ड ('फ़ील्ड =...'), पृष्ठभूमि, सशर्त GET (ETag/if-None-Match), डेल्टा प्रतिक्रियाएँ.
GraphQL: प्रश्नों को बनाए रखा, "वसा" टुकड़ों का निषेध, गहराई और जटिलता की सीमा।
N + 1 से बचें: Joyns/preposition, समुच्चय के लिए कसाई समापन बिंदु।
5) टाइमआउट, रिट्रीट, आइडेम्पोटेंस
चेन टाइमआउट क्लाइंट <गेटवे बैकऑफ + जिटर के साथ रेट्राई, केवल अस्थायी त्रुटियों के लिए; रेट्रेस पर बजट को उजागर करें। पहचान: क्वेरी कुंजी/टोकन + सहेजें परिणाम; रिट्रीट को संचालन (विशेष रूप से वित्त) की नकल नहीं करनी चाहिए। सर्किट ब्रेकर: अपमानित होने पर खोलें; पूंछ के लिए हेज/बैकअप अनुरोध (P95 के माध्यम से डुप्लिकेट भेजें)। 6) कतारें, अतुल्यकालिक और बैकप्रेशर तुल्यकालिक पथ को अवरोधित न करें: भारी संचालन (केवाईसी स्कैन, रिपोर्टिंग) - पृष्ठभूमि में। Backpressure: कतार से खपत को सीमित करें, संगामिति को ठीक करें। बैचिंग/कोलेसिंग - छोटे लेनदेन को मिलाएं (उदाहरण के लिए, एकत्रीकरण के साथ संतुलन को अद्यतन करना)। आउटबॉक्स/इनबॉक्स: असफलताओं के मामले में घटनाओं की गारंटीकृत डिलीवरी। 7) आवेदन: रनटाइम और पूल डेटाबेस/कैश/एचटीटीपी से कनेक्शन के पूल; उन्हें सीमित करें ताकि बैकएंड को "गला घोंट" न सकें। JVM: प्रोफ़ाइल GC (G1/ZGC), बड़े आवंटन से बचें; .NET - थ्रेडपूल/एसिंक; नोड। js - इवेंट लूप को ब्लॉक न करें, सीपीयू-हैवी को बाहर निकालें। अजगर: अतुल्यकालिक ड्राइवर (asyncpg/httpx), uvloop; कार्यकर्ता-पूल के माध्यम से सीपीयू कार्य करता है। वार्म-अप: जेआईटी/कैश गर्म करें, चोटियों के लिए "गर्म पूल" उदाहरण। 8) डेटाबेस और कैश सूचकांक और योजनाएं: नियमित 'EXPLUM', ऑटो-वैक्यूम/विश्लेषण, स्कैन सीमा। कनेक्शन पूलिंग (PgBouncer/Multiplexing), लघु लेनदेन। कैश रणनीतियाँ: रीड-थ्रू, राइट-थ्रू/राइट-बैक; घटना द्वारा टीटीएल + विकलांगता। शार्डिंग/प्रतिकृतियाँ: दासों से पढ़ ना, "हॉट कीज़" - स्थानीय कैश (पास-कैश)। 9) कैचिंग और एज स्थिर/निर्देशिका के लिए सीडीएन/एज, कैश एपीआई प्रतिक्रियाएँ (यदि सुरक्षित हो) 'कैश-नियंत्रण', 'ईटैग' के लिए. UX-स्थिरता के लिए बासी-जबकि-पुनर्नवीनीकरण और बासी-यदि-त्रुटि। भू-आवंटन: निकटतम आरआरआर/क्षेत्र आरटीटी को कम करता है। 10) वास्तुशिल्प पैटर्न बनाम P99 पूंछ Heded अनुरोध - दहलीज के बाद एक और उदाहरण के लिए एक धीमी अनुरोध की नकल करें। अनुरोध ढहने: डेटाबेस के लिए एक "अग्रणी" अनुरोध, बाकी परिणाम की प्रतीक्षा कर रहे हैं (तूफान से बचा जाता है)। प्राथमिकता: वीआईपी/महत्वपूर्ण संचालन - समर्पित पूल/प्राथमिकता। सुंदर गिरावट: अतिभारित होने पर मामूली क्षेत्र/विजेट ट्रिम करें। 11) कॉन्फ्रेंस (लगभग) 11. 1 NGINX (टाइमआउट/कम्प्रेशन) 11. 2 दूत (हेज + रीट्री बजट) 11. 3 जीआरपीसी (ग्राहक) 12) अवलोकन: सही तरीके से मापना RED/USE मेट्रिक्स + ओटेल ट्रेल्स: गेटवे-सर्विस-डेटाबेस-बाहरी एपीआई के माध्यम से 'ट्रेस _ आईडी'। व्यक्तिगत लेबल: 'api _ version', 'क्षेत्र', 'पार्टनर', 'समापन बिंदु'। डैशबोर्ड: P50/P95/P99, कतार का समय, त्रुटि मिश्रण, पुनरावृत्ति दर, कैश हिट। लक्ष्य देशों/ASN (TR/BR/EU) और महत्वपूर्ण रास्तों (reg→depozit, भुगतान) से सिंथेटिक्स। 13) FinOps - विलंबता मिलीसेकंड पैसे के लायक हैं: सीआर/एआरपीपीयू में $/एमएस जीत का अनुमान लगाएं। राइट-साइज़िंग: हमेशा तेज़ - अधिक महंगा; सक्षम कैश/प्रारूप सस्ता और तेज हैं। एग्रेस/एज: सीडीएन आरटीटी और क्षेत्र से निवर्तमान यातायात की लागत को कम करता है। 14) अनुकूलन चेकलिस्ट (चरण दर चरण) 1. एसएलओ सेट करें और समापन बिंदुओं/क्षेत्रों/भागीदारों द्वारा पूंछ (P95/P99) को मापें। 2. चालू करें HTTP/2/3, TLS फिर से शुरू, लंबे समय तक जीवित कनेक्शन। 3. निचोड़ें और वजन कम करें: Brotli/Gzip, मांग पर क्षेत्र, तमाशा, ETag। 4. टाइमआउट/रिट्रीट/ब्रेकर सेट करें; पहचान जोड़ें। 5. कैश/एज: हिट-रेट और सही टीटीएल; बासी मोड। 6. डीबी: इंडेक्स, प्लान, पूल, प्रतिकृतियां; N + 1 को खत्म करें। 7. भारी अतुल्यकालित करें: कतारें, कसाई, बैकप्रेशर। 8. महत्वपूर्ण रास्तों के लिए हेज/पतन/प्राथमिकता। 9. पिक्स (टूर्नामेंट/मैच) के लिए वार्म-अप और भविष्यवाणी स्केलिंग। 10. P99 और कतार समय पर सिंथेटिक्स और अलर्ट; नियमित पर्फ समीक्षा। 15) एंटी-पैटर्न एक वैश्विक समय "सभी के लिए" और अनियंत्रित रिट्रेज़ (डीडीओएस स्वयं)। गर्म नोड्स की आवश्यकता के बिना सत्र चिपके हुए। संपीड़न और क्षेत्र फिल्टर के बिना बड़े JSONs। "हॉट पाथ" में बाहरी एपीआई को धीमा करने के लिए तुल्यकालिक कॉल। डेटाबेस में सूचकांक/सीमाओं की अनुपस्थिति; ओआरएम में एन + 1। कोई कैश/एज और ETag; लगातार पूर्ण प्रतिक्रियाएं। एक "वापस लेने योग्य" टोकरी में व्यवसाय और तकनीकी त्रुटियों का मिश्रण। 16) iGaming संदर्भ/फिनटेक: व्यावहारिक नोट्स Reg→depozit (सीआर): मार्ग प्राथमिकता, व्यक्तिगत पूल, 'P99 ≤ 500 मिलियन'; गिरावट - UI को अक्षम करें "सजावट। PSP एकीकरण: संगति सीमा, समय कोड द्वारा रिट्रेज़, गर्म कनेक्शन, क्षेत्रीय अनुगामी-आईपी। वीआईपी संचालन: गारंटीकृत पूल/प्राथमिकता, सार्वजनिक कतारों को दरकिनार करना। टूर्नामेंट/घटनाएँ: भविष्यवाणी का पैमाना, कैश वार्म-अप, प्रीफेच। रिपोर्टिंग: ताजगी पर एसिंक और एसएलए, उत्पादन पथ को अवरुद्ध नहीं करता है। विलंबता अनुकूलन संतुलन का एक अनुशासन है: नेटवर्क (HTTP/2/3, TLS), प्रोटोकॉल और कैश, टाइमआउट/रिट्रे साथ मूर्तिकला, डीबी/कैश, अतुल्यकालिक पैटर्न और P95/P99 अवलोकन। पूंछ पर ध्यान केंद्रित करके और "संकीर्ण गर्दन" को समाप्त करके, आप प्रतिक्रिया को स्थिर करते हैं, रूपांतरण में सुधार करते हैं और प्रति मिलीसेकंड लागत कम करते हैं - जहां यह वास्तव में व्यवसाय को प्रभावित करता है।nginx proxy_connect_timeout 1s;
proxy_send_timeout 2s;
proxy_read_timeout 2s;
send_timeout 2s;
gzip on;
gzip_types application/json text/plain text/css application/javascript;yaml
RetryPolicy:
retry_on: 5xx,reset,connect-failure num_retries: 2 per_try_timeout: 300ms retry_back_off: { base_interval: 50ms, max_interval: 200ms }
retry_priority:
name: envoy. retry_priorities. previous_priorities
HedgePolicy:
hedge_on_per_try_timeout: true initial_requests: 1 additional_request_chance: 0. 2json
{
"methodConfig": [{
"name": [{"service": "payments. Service"}],
"timeout": "0. 8s",
"retryPolicy": {
"maxAttempts": 3,
"initialBackoff": "0. 05s",
"maxBackoff": "0. 2s",
"backoffMultiplier": 2. 0,
"retryableStatusCodes": ["UNAVAILABLE","DEADLINE_EXCEEDED"]
}
}]
}
कुल