GH GambleHub

डिजाइन दर सीमाएँ

1) दर सीमित क्यों

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

मुख्य उद्देश्य

आरपीएस स्थिरता और बैकएंड ओवरलोड सुरक्षा।

नियंत्रित "लोच" (फट भत्ता)।

ग्राहक भेदभाव (प्रति-उपयोगकर्ता/प्रति-संगठन/प्रति-कुंजी/प्रति-आईपी/प्रति-क्षेत्र)।

मूल्य मॉडल: विभिन्न लेनदेन के लिए अलग-अलग "कीमतें"।

2) सीमा प्रकार

आरपीएस सीमा: अनुरोध प्रति सेकंड/मिनट।

कोटा: प्रति अवधि (दिन/माह) कुल बजट।

प्रतिस्पर्धा: एक साथ संचालन (चेकआउट, भारी नौकरी)।

दर/पट्टी बाइट्स/सेक (लोड/अनलोड)।

भारित सीमाएं: जटिलता द्वारा अनुरोध की "लागत" (उदाहरण के लिए, ग्राफक्यूएल जटिलता, बैच आकार)।

अनुकूली: विसंगतियों (संदिग्ध गतिविधि/त्रुटियों 401/403/5xx) के मामले में कड़ा।

3) एल्गोरिदम और उन्हें कब लागू करना है

3. 1 फिक्स्ड विंडो काउंटर

सरल: प्रति अंतराल काउंटर (उदा। 100 r/min)।

पेशेवरों: न्यूनतम लागत। विपक्ष: खिड़की की सीमाओं पर "किनारा फटता है"।

कब: व्यवस्थापक पैनल, कम सटीकता, कम लागत।

3. 2 स्लाइडिंग विंडो (लॉग/काउंटर)

हाल के अनुरोधों के टाइमस्टैम्प को लॉग - स्टोर करें, सटीक, स्मृति में महंगा।

काउंटर: दो आसन्न खिड़कियों (रोलिंग) का औसत, सटीकता और मूल्य का एक समझौता।

कब: मध्यम यातायात के सार्वजनिक एपीआई, आपको जटिल गणित के बिना चिकनाई की आवश्यकता है।

3. 3 टोकन बाल्टी

पैरामीटर: दर 'आर' (टोकन/सेकंड) और क्षमता 'बी' (फट)। प्रत्येक अनुरोध "बर्न" टोकन।

पेशेवरों: प्राकृतिक फट भत्ता, सरल कार्यान्वयन। विपक्ष: कोई सख्त सावधानी नहीं है।

कब: लगभग हमेशा आरपीएस के लिए, अगर 'बी' के भीतर "वॉलीज़" की आवश्यकता होती है।

3. 4 लीकी बाल्टी (ड्रिप)

कतार जिससे एक निश्चित गति से "लीक" होता है।

पेशेवरों: यहां तक कि आउटपुट प्रवाह। विपक्ष: अधिक देरी।

कब: बाहरी "नाजुक" प्रदाताओं को चिकना।

3. 5 जीसीआरए (सामान्यीकृत सेल दर एल्गोरिथ्म)

सैद्धांतिक आगमन समय (TAT) मॉडल:
  • 'TAT _ next = max (, अब) + 1/r', अनुरोध स्वीकार किया जाता है यदि 'अब <= + burstt/r'।
  • पेशेवरों: सख्त, सटीक, थोड़ी मेमोरी (कुंजी द्वारा TAT रखें)। विपक्ष: समझने के लिए कठिन।

कब: सख्त नियंत्रण और चिकनाई की आवश्यकता है, वितरित सीमा।

3. 6 प्रतिस्पर्धी सेमाफोर

सक्रिय ऑपरेशन काउंटर; प्रवेश - यदि "टिकट" हैं; बाहर निकलें - रिलीज़।

कब: लंबे समय से चल रहे संचालन, थ्रेड्स, वेबसॉकेट, डाउनलोड।

4) कुंजी मॉडल को सीमित करें

कुंजी = विशेषता संयोजन:
  • 'client _ id '/' api _ key '/' user _ id '/' org _ id'
  • 'आईपी/एएसएन/जियो' (किसी न किसी सुरक्षा)
  • 'समापन बिंदु/विधि' (गर्म मार्ग)
  • 'स्कोप/प्लान/टियर' (मुद्रीकरण)
  • 'idempotency _ key' (संचालन लिखें)
  • एक पदानुक्रम का उपयोग करें: पहले सख्त प्रति-कुंजी, फिर प्रति-संगठन, फिर वैश्विक।

5) लागत मॉडल

"लागत" 'लागत (q)' को परिभाषित करें:
  • ग्राफक्यूएल: क्षेत्र जटिलता × गहराई।
  • REST: प्रतिक्रिया/अनुरोध आकार, संचालन प्रकार (पढ़ें = 1, लिखें = 3, रिपोर्ट = 10)।
  • बैच: 'लागत = मिनट (n, टोपी)'।
  • हम टोकन को सीमित करते हैं, न कि "अनुरोध": 'बजट - = लागत (क्यू)'।

6) वितरित कार्यान्वयन

6. 1 वाल्ट्स

इन-प्रक्रिया: अल्ट्रा-फास्ट, लेकिन एक सामान्य सीमा नहीं (स्थानीय "नरम" सीमा के लिए उपयुक्त)।

रेडिस: वास्तविक मानक। INCR/EXPIRE, Lua स्क्रिप्ट (परमाणु), स्लाइडिंग विंडो के लिए ZSET, TTL के साथ कुंजियाँ।

दूत/NGINX/Cong/Traefik: बिल्ट-इन फिल्टर; परिधि के लिए सुविधाजनक।

सेवा मेष: साइडकार + वैश्विक तुल्यकालन पर स्थानीय सीमाएं।

6. 2 परमाणु और रेसिंग

रेडिस में लुआ: एक चरण में जाँच और वृद्धिशील।

GCRA: CAS/स्क्रिप्ट के साथ एक TAT संग्रहीत करें।

घड़ी की स्थिरता: एनटीपी, मोनोटोन टाइमर।

शार्डिंग: कुंजी द्वारा लगातार हैश; "गर्म" शार्क से बचें।

6. 3 भू-वितरण

क्षेत्रीय समूहों + ऊपरी वैश्विक (मोटे) पर स्थानीय सीमाएं।

सीआरडीटी/प्रतिकृति - सावधान (देरी, दोहरी खपत)। मार्जिन के साथ क्षेत्रीय सीमाएं बेहतर हैं।

7) नीतियां और प्राथमिकता

योजनाएं: विभिन्न 'आर', 'बी', कोटा के साथ मुफ्त/प्रो/एंटरप्राइज।

प्राथमिकताएं: "महंगे" मार्गों को कम सीमा या अधिक लागत मिलती है।

सूची: एकीकरण के लिए अनुमति-सूची, ASN/प्रॉक्सी/TOP द्वारा इनकार करें।

वृद्धि: यदि आप इसे फिर से पार करते हैं, तो सीमा को कम करें, प्रूफ-ऑफ-वर्क/कैप्चा/चुनौतियां दर्ज करें।

8) कॉन्फ़िग के उदाहरण

8. 1 दूत (HTTP दर सीमा फ़िल्टर, छद्म)

yaml rate_limit:
domain: public-api descriptors:
- key: api_key rate_limit:
unit: second requests_per_unit: 50 burst: 100
- key: api_key value: payments. write rate_limit:
unit: second requests_per_unit: 5 burst: 10

8. 2 NGINX (lua + Redis, छद्म)

nginx lua_shared_dict limits 10m;

location /api/ {
access_by_lua_block {
local key = ngx. var. arg_apikey.. ":".. ngx. var. request_method.. ":".. ngx. var. uri
-- token bucket in Redis (evalsha)
local allowed, retry_after = ratelimit_allow(key, 50, 100) -- r=50/s, b=100 if not allowed then ngx. header["Retry-After"] = retry_after return ngx. exit(429)
end
}
proxy_pass http://backend;
}

8. 3 प्रतिस्पर्धी सीमा (छद्म कोड)

pseudo on_request_start(key):
if redis. incr_with_ttl("sem:" + key, ttl=60) > MAX_CONCURRENCY:
redis. decr("sem:" + key); reject(429)
on_request_finish(key):
redis. decr("sem:" + key)

8. 4 जीसीआरए (स्यूडोकोड)

pseudo params: r tokens/sec, burst b tat = redis. get(key) or now allowed_time = tat - (b / r)
if now < allowed_time: reject(429, retry_after = allowed_time - now)
tat_next = max(tat, now) + 1/r redis. set(key, tat_next, ttl = ceil(b/r) + safety)

9) रिट्रेज़, टाइमआउट और सर्किट ब्रेकर के साथ एकीकरण

पुन: बजट: मुख्य यातायात के एक्स% तक रिट्रे के हिस्से को सीमित करें।

जिटर: जब बैकऑफ़होता है, तो हमेशा जोड़ें - तुल्यकालिक फटने को कम करता है।

सर्किट ब्रेकर: यदि कोई उच्च त्रुटि ('5xx', टाइमआउट) है, तो सीमा को कम करें या कुछ मार्गों को "रीड-ओनली" में स्थानांतरित करें।

हेजिंग: साफ; अपने बजट को दोगुना करने से बचने के लिए लागत पर विचा

10) अवलोकन और प्रबंधन

Метрики: 'आरपीएस _ अनुमोदित', 'आरपीएस _ अवरुद्ध', '429 _ रेट', 'रिट्री _ आफ्टर _ एवीजी', 'बर्स्ट _ यूज्ड', 'कोटा _ शेष', 'सक्रिय _ कॉन्सर्सी'।

लेबल: सीमित कुंजी, क्षेत्र, समापन बिंदु, योजना द्वारा।

निर्णय लॉग (नमूना): विफलता का कारण, वर्तमान काउंटर, कुंजी टीटीएल।

डैशबोर्ड: कीज ़/एंडपॉइंट द्वारा हीट कार्ड, "हॉट" क्लाइंट।

अलर्ट: महत्वपूर्ण मार्गों पर 429> 2-5% की वृद्धि, कोटा की लगातार "थकावट", शार्क का असंतुलन।

11) परीक्षण और सत्यापन

नीतियों के अनुबंध परीक्षण (यदि-तब तालिकाएं)।

लोडिंग: फटने (आर से x10), लंबे पठार, "गंदे" पैटर्न (धीमी गति से पोस्ट, लंबे कनेक्शन)।

अराजकता यातायात: असमान धाराएँ, घड़ी बहाव, रेडिस/मेष बूंद।

A/B-समावेश: समावेश से पहले कैनरी रोलआउट सीमा, छाया-समाधान (लॉग, लेकिन ब्लॉक न करें)।

12) किनारे के मामले और सूक्ष्मताएँ

घड़ी तिरछा: 'अब ()' का उपयोग एकल स्रोत (सर्वर) से करें, क्लाइंट हेडर से नहीं।

Idempotency-Key: लिखने के लिए - रेट्रास में प्रवर्धन को कम करता है।

बैच संचालन: बैच के आकार और कुल लागत को सीमित करें।

लॉन्ग-पोल/वेबसॉकेट: चैनलों/सदस्यता और अवधि की संख्या को सीमित करें।

ठंडी शुरुआत: काउंटरों/प्रीलोड की "गर्म" शुरुआत; अन्यथा झूठे 429 के फटने।

कम्प्यूटेशनल रूप से महंगे अनुरोध: व्यावसायिक तर्क के निष्पादन की सीमा।

टीटीएल: कुंजियों की टीटीएल सीमाएँ विंडो + सुरक्षा मार्जिन को कवर करेंगी।

13) एंटीबॉट वृद्धि

चरण: चेतावनी → 429 + 'रीट्री-आफ्टर' → चुनौती (कैप्चा/पहेली) → अस्थायी ब्लॉक।

सिग्नल: डिवाइस-फिंगरप्रिंट, कर्सर/टाइमिंग व्यवहार, TOR/प्रॉक्सी/होस्टिंग।

नीतियां फोरेंसिक के लिए नियतात्मक और प्रजनन योग्य होनी चाहिए।

14) सुरक्षा और अनुपालन

महत्वपूर्ण मार्गों पर इनकार-दर-डिफ़ॉल्ट (लिखें/वित्त)।

लेखा परीक्षा: नियामक मामलों और घटना समीक्षा के लिए सीमाओं पर निर्णय रखें।

PII: सीमा कुंजियों को लॉग में व्यक्तिगत डेटा का खुलासा नहीं करना चाहिए।

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

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

16) टीएल; डीआर

रेडिस/गेटवे के साथ टोकन बाल्टी या जीसीआरए का उपयोग करें, डिजाइन सीमा कुंजी और अनुरोध लागत, लंबे संचालन के लिए प्रतिस्पर्धी सेमाफोर जोड़ें, रीट्री-बजट और सर्किट ब्रेकर के साथ एकीकृत करें, 429 और "फट क्षमता है", कैनरी/छाया

Contact

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

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

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

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

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

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