GH GambleHub

कनेक्शन पूल और विलंबता

कनेक्शन पूल और विलंबता

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

कनेक्शन महंगे हैं (टीसीपी/टीएलएस हैंडशेक, प्रमाणीकरण, वार्म-अप)। पूल अनुमति देता है:
  • TTFB के नीचे रेडी-मेड कनेक्शन (रखने-रहने) → फिर से उपयोग करें।
  • नियंत्रण संगति और पीछे हटने के हिमस्खलन के बजाय बैकप्रेशर देना।
  • सही आकार और टाइमआउट के कारण p95/p99 पूंछ को कम करें।

मुख्य जोखिम: पूल में प्रतीक्षा कतारें, हेड-ऑफ-लाइन अवरुद्ध, कनेक्शन के लिए सामग्री और पीछे हटने का तूफान।

2) गणित आधार: पूल का आकार कैसे गिनें

हम लिटिल के नियम का उपयोग करते हैं: 'L = × W'। एक पूल के लिए, इसका मतलब है:
  • 'ć' औसत अनुरोध स्ट्रीम (RPS) है।
  • 'डब्ल्यू' औसत कनेक्शन प्रति अनुरोध व्यस्त है (सेवा समय, नेटवर्क विलंबता और दूरस्थ सेवा संचालन सहित)।
  • न्यूनतम पूल का आकार 'N _ min × × W' है।
  • विविधताओं और p99 के लिए एक मार्जिन जोड़ें: हेडरूम 20-50%।
  • उदाहरण: 300 आरपीएस, औसत होल्ड-टाइम 40 ms 'N _ min = 300 × 0। 04 = 12`. 50% के मार्जिन के साथ, 18 कनेक्शन हैं।

यदि पूंछ बड़ी हैं: महत्वपूर्ण रास्तों के लिए 'W _ p95' या 'W _ p99' पर विचार करें - पूल बढ़ ते हैं।

3) सामान्य डिजाइन सिद्धांत

1. संक्षिप्त डेटा पथ: पुन: उपयोग (जीवित रखें, HTTP/2/3 मल्टीप्लेक्सिंग)।

2. समानतावाद की सीमा: बैकएंड को भूनने की तुलना में जल्दी से (429/503) मना करना बेहतर है।

3. टाइमआउट> रिट्रीट: छोटे टाइमआउट और दुर्लभ जिटर रिट्रीट सेट करें।

4. क्लाइंट कतारें सर्वर कतारों (तेजी से फेल-फास्ट) से कम हैं।

5. Backpressure: जब पूल भरा होता है - तुरंत NACK/त्रुटि/collbeck "बाद में।"

6. लक्ष्य द्वारा पूल का अलगाव: डीबी, कैश, बाहरी पीएसपी - उनकी सीमा।

4) HTTP/1। 1 बनाम HTTP/2/3, जीवित रखें

HTTP/1। 1: एक समय में एक कनेक्शन अनुरोध (व्यावहारिक रूप से); प्रति मेजबान कई कनेक्शन के साथ एक पूल की आवश्यकता है।

HTTP/2: एक टीसीपी में स्ट्रीम मल्टीप्लेक्सिंग; कम कनेक्शन, लेकिन पैकेट खो जाने पर टीसीपी पर एचओएल-ब्लॉकिंग संभव है।

HTTP/3 (QUIC): UDP पर स्ट्रीमिंग स्वतंत्रता - कम HOL समस्याएं, तेजी से पहली बाइट्स।

सेटिंग्स जो मदद करती हैं:
  • 30-90 (प्रोफाइल द्वारा), कनेक्शन के अनुरोधों की सीमा (सुंदर रीसायकल) रखना।
  • कार्यकर्ता की शुरुआत में प्रीकनेक्ट (प्रीकनेक्ट)।
  • अधिकतम प्रवाह प्रति HTTP/2 (उदा। 100-200).
NGINX (अपस्ट्रीम कीपलाइव):
nginx upstream backend {
server app-1:8080;
server app-2:8080;
keepalive 512;
keepalive_requests 1000;
keepalive_timeout 60s;
}
proxy_http_version 1. 1;
proxy_set_header Connection "";
दूत (HTTP/2 पूल):
yaml http2_protocol_options:
max_concurrent_streams: 200 common_http_protocol_options:
idle_timeout: 60s max_connection_duration: 3600s

5) डीबी पूल: Pgbouncer, HikariCP, ड्राइवर

लक्ष्य प्रतिस्पर्धी लेनदेन को सीमित करना और छोटा कनेक्शन रखना है।

5. 1 Pgbouncer (PostgreSQL)

मोड: 'सत्र '/' लेनदेन '/' कथन'। एपीआई के लिए - अधिक बार लेनदेन।

महत्वपूर्ण पैरामीटर 'पूल _ size', 'min _ pool _ size', 'reserve _ pool _ size', 'server _ idle _ timeout', 'query _ wate _ timeout' हैं।

ini
[databases]
appdb = host=pg-primary port=5432 dbname=appdb

[pgbouncer]
pool_mode = transaction max_client_conn = 5000 default_pool_size = 100 min_pool_size = 20 reserve_pool_size = 20 query_wait_timeout = 500ms server_idle_timeout = 60 server_reset_query = DISCARD ALL

5. 2 HikariCP (जावा)

छोटे, तेज कनेक्शन, कठिन समय।

properties dataSourceClassName=org. postgresql. ds. PGSimpleDataSource maximumPoolSize=30 minimumIdle=5 connectionTimeout=250 validationTimeout=200 idleTimeout=30000 maxLifetime=1800000 leakDetectionThreshold=5000
नियम:
  • 'maximumPoolSize ≈ RPS × W × हेडरूम'।
  • 'connimesteout' hundreds मिलीसेकेंड्स, सेकंड नहीं।
  • रिसाव का पता लगाना सक्षम करें।

5. 3 गो/नोड/पायथन - उदाहरण

जाओ http। क्लाइंट (पुन: उपयोग + टाइमआउट):
go tr:= &http. Transport{
MaxIdleConns:    512,
MaxIdleConnsPerHost: 128,
IdleConnTimeout:   60 time. Second,
TLSHandshakeTimeout: 2 time. Second,
}
c:= &http. Client{
Transport: tr,
Timeout:  2 time. Second ,//general
}
नोड। जेएस रखने वाला एजेंट:
js const http = require('http');
const agent = new http. Agent({ keepAlive: true, maxSockets: 200, maxFreeSockets: 64, timeout: 60000 });
Psycopg/SQLAlchemy (अजगर):
python engine = create_engine(
url, pool_size=30, max_overflow=10, pool_recycle=1800, pool_pre_ping=True, pool_timeout=0. 25
)

6) प्रतीक्षा कतारें और पूंछ-विलंबता

पूंछ तब होती है जब:
  • पूल '× × W' से छोटा है - कनेक्शन कतार बढ़ रही है।
  • बफर और सीमा के बिना असमानता (फटना) लोड करें।
  • लंबे अनुरोध कनेक्शन लेते हैं और एक HOL बनाते हैं।
प्रतिवाद:
  • अनुरोध प्रकार (तेज/धीमी) द्वारा अलग पूल।
  • क्लाइंट-साइड टाइमआउट लागू करें। यदि समाप्त हो गया - तेजी से NACK।
  • मार्गों पर बाहरी पहचान और सर्किट-ब्रेकिंग (दूत, HAProxy)।
  • "भारी" मार्गों के लिए कोटा, रिपोर्ट/निर्यात के लिए एक अलग पूल।
दूत सर्किट ब्रेकर (उदाहरण):
yaml circuit_breakers:
thresholds:
- priority: DEFAULT max_connections: 200 max_pending_requests: 100 max_requests: 1000 max_retries: 2

7) टाइमआउट और रिट्रीट (सही क्रम)

1. कनेक्ट टाइमआउट (संक्षिप्त: 50-250 एमएस डीसी के अंदर)।

2. TLS हैंडशेक टाइमआउट (500-1000 ms вне DC)।

3. अनुरोध/पढ़ें समय समाप्ति (मार्ग एसएलओ के करीब)।

4. पुनरावृत्ति: अधिकतम 1 समय, केवल अज्ञात विधियों के लिए; जिटर + बैकऑफ।

5. रिट्रे बजट: आरपीएस के प्रतिशत के रूप में वैश्विक सीमा (उदाहरण के लिए, ≤ 10%)।

8) जीवित रखें, नागल, प्रोटोकॉल

छोटे संदेश RPC के लिए Nagle (TCP_NODELAY) अक्षम करें।

जहाँ भी संभव हो, HTTP रखने को सक्षम करें.

TIME_WAIT - ट्यून 'पुन: उपयोग '/' रीसायकल' केवल तभी देखें जब आप परिणामों को समझते हैं; बेहतर - पुन: उपयोग कनेक्शन, कर्नेल ट्यूनिंग नहीं।

TLS - सत्र फिर से शुरू और ALPN का उपयोग करें।

9) ओएस/कर्नेल ट्यूनिंग (सावधानी के साथ)

'नेट। कोर। somaxconn ',' नेट। ipv4। ip_local_port_range', 'नेट। ipv4। tcp_fin_timeout'।

वर्णन: 'नोफाइल' ≥ 64k प्रति प्रॉक्सी प्रक्रिया।

आईआरक्यू बैलेंस, जीआरओ/एलआरओ - ट्रैफिक प्रोफाइल द्वारा।

प्राथमिकता - प्रोफ़ाइल मैट्रिक्स के बिना ट्यूनिंग अक्सर हानिकारक होती है।

10) अवलोकन: क्या मापना है

पूल उपयोग: व्यस्त/कुल, p50/p95 कनेक्शन लंबित।

इन-फ्लाइट अनुरोध और उनके होल्ड-टाइम (रूट स्लाइस)।

रिट्रे त्रुटि बजट: दोहराव का अनुपात।

कनेक्शन मंथन बनाएँ/बंद करें प्रति सेकंड।

TCP/TLS: SYN RTT, हैंडशेक, सत्र पुन: उपयोग।

Для БД: सक्रिय कनेक्शन, प्रतीक्षा, लंबे लेनदेन, ताले।

Графики: "आरपीएस बनाम पूल प्रतीक्षा", "होल्ड-टाइम वितरण", "पुन: उपयोग अनुपात", "सर्किट ट्रिप"।

11) केस रेसिपी

11. 1 एपीआई गेटवे → बैकएंड

HTTP/2 बैकएंड्स के लिए, 'max _ concurrent _ streams = 200'।

प्रति गेटवे नोड प्रति सेवा 20-40 कनेक्शन का एक पूल।

टाइमआउट: 100 एमएस कनेक्ट करें, प्रति-कोशिश 300-500 एमएस, 1-2 एस साझा किया, 1 जीटर के साथ रीट्री।

11. 2 Pgbounser के माध्यम से पोस्टग्रेस SQL → सेवा

सूत्र (RPS × W × 1) द्वारा 'पूल _ मोड = ट्रांजेक्शन', 'डिफ़ॉल्ट _ पूल _ साइज़'। 3).

'connectionTimeout≤250ms' में, लघु लेनदेन (<100 ms)।

भारी रिपोर्टिंग अनुरोध - अलग पूल/प्रतिकृति।

11. 3 जीआरपीसी आंतरिक

100-200 की थ्रेड सीमा के साथ एक चैनल (HTTP/2) प्रति लक्ष्य होस्ट।

SLO मार्ग पर RPC पर डेडलाइन, केवल पहचानने वाला।

लंबे आरपीसी नमूने और होल्ड-टाइम मैट्रिक्स का पता लगाते हैं।

12) कार्यान्वयन चेकलिस्ट (0-30 दिन)

0-7 दिन

प्रमुख मार्गों/ग्राहकों पर 'डब्ल्यू' (होल्ड-टाइम) मापते हैं।

'N _ min = × × W' and की गणना करें 30-50% हेडरूम जोड़ें।

संक्षिप्त कनेक्शन टाइमआउट रखना सक्षम करें.

8-20 दिन

अलग पूल (तेज/धीमा/बाहरी)।

सर्किट-ब्रेकर और रिट्रे बजट टाइप करें।

डैशबोर्ड जोड़ें: पूल प्रतीक्षा p95, पुन: उपयोग अनुपात, इन-फ्लाइट।

21-30 दिन

लोड फटने के साथ चलता है, अराजकता परीक्षण "बैकेंड का पतन।"

पूंछ अनुकूलन: भारी मार्गों का अलगाव, स्थानीय कैश।

दस्तावेज़ सूत्र और रनबुक 'एक्स में सीमाएँ।

13) एंटी-पैटर्न

पूल का आकार "यादृच्छिक पर" और कोई हेडरूम नहीं।

बड़े कनेक्शन वेटिंग टाइमआउट - तेज विफलताओं के बजाय लंबी पूंछ।

कई बिना किसी झटके और पहचान के पीछे हट जाते हैं - एक तूफान।

सभी अनुरोध प्रकारों के लिए एक साझा पूल।

लंबे लेन-देन कनेक्शन (डीबी) → बाकी की भुखमरी को बनाए रखते हैं।

विकलांग रखें-जीवित या बहुत छोटे निष्क्रिय - मंथन सीमा और टीटीएफबी विकास।

14) परिपक्वता मैट्रिक्स

पूल प्रतीक्षा p95 कुल p95 मार्ग का <10%।

आंतरिक HTTP के लिए पुनः उपयोग अनुपात (> 90%;> बाहरी के लिए 80%)।

DB txn समय p95 <100-200 ms; लंबे लेनदेन का प्रतिशत <1%।

पुन: प्रयास दर <5% (और ≤ बजट), टाइमआउट के कारण त्रुटियां स्थिर और अनुमानित हैं।

सभी महत्वपूर्ण ग्राहकों के लिए प्रलेखित पूल निप

15) निष्कर्ष

प्रभावी कनेक्शन पूलिंग कतार इंजीनियरिंग + टाइमआउट अनुशासन है। माप 'W', पूल की गणना करें × × W 'with एक मार्जिन, keep-alive/HTTP2 + को चालू करें, अलग धीमे रास्तों को चालू करें, शॉर्ट टाइमआउट रखें और जिटर के साथ न्यूनतम रेट्रा रखें। "पूल प्रतीक्षा बनाम विलंबता" अवलोकन और सर्किट-ब्रेकर जोड़ें - और आपको कम TTFB, नियंत्रित p99 पूंछ और ओवरहीटिंग बैकेंड्स के बिना उछाल प्रतिरोध मिलता है।

Contact

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

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

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

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

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

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