दर सीमा और लोड नियंत्रण
टीएल; डीआर
एक विश्वसनीय सर्किट कई स्तरों (edge→BFF→servis), निष्पक्ष संसाधन आवंटन (प्रति-किरायेदार/कुंजी/मार्ग), एसएलओ-अनुकूली थ्रॉटलिंग और मूक समय के बजाय बैकप्रेशर पर सीमाओं और कोटा का एक संयोजन है। "गति" के लिए टोकन/लीकी बाल्टी का उपयोग करें, लेखांकन कोटा के लिए फिसलने वाली खिड़की, भारी संचालन के लिए प्रतिस्पर्धी सीमा, गिरावट पर गतिशील थ्रॉटलिंग और अपस्ट्रीम को नाजुक बनाने के लिए सर्किट-ब्रेकर। सब कुछ अवलोकन के तहत और प्लेबुक के साथ है।
1) iGaming/fintech में सीमा क्यों
एसएलओ और स्थिरता: रिट्रे हिमस्खलन, टूर्नामेंट/इवेंट चोटियों, भुगतान स्पाइक्स के खिलाफ सुरक्षा।
निष्पक्षता: एक किरायेदार या साथी पूरे बजट को "चूसता" नहीं है।
एंटी-एब्यूज/बॉट्स: लॉगिन/पंजीकरण, स्पैम, निर्देशिका स्क्रैपिंग।
लागत: महंगी कॉल (केवाईसी, रिपोर्ट, एकत्रीकरण) का नियंत्रण।
अनुपालन/उचित उपयोग: अनुबंध में औपचारिक "उचित उपयोग" कोटा।
2) टैक्सोनॉमी को सीमित करें
3) एल्गोरिदम और जहां आवेदन करना है
3. 1 टोकन बाल्टी (डिफ़ॉल्ट)
पैरामीटर: 'दर' (टोकन/सेकंड), 'बर्स्ट' (अधिकतम मार्जिन)।
एपीआई पढ़ ने, भुगतान/स्थिति, बीएफएफ के लिए महान।
एक खाली बाल्टी के साथ → 429 + 'रेट्री-आफ्टर'।
3. 2 लीकी बाल्टी (औसत)
आरपीएस के "विध्वंस" की गारंटी, वेबहुक के लिए उपयोगी ताकि श्रमिकों को स्कोर न करना पड़े।
3. 3 फिक्स्ड विंडो बनाम स्लाइडिंग विंडो
निश्चित - सरल, लेकिन "सीमाएँ"; विंडो में स्लाइडिंग - मेला लेखांकन (न्यूनतम/घंटा/दिन)।
संविदात्मक कोटा के लिए स्लाइडिंग लागू करें।
3. 4 समवर्ती सीमाएँ
एक साथ सक्रिय कार्यों की सीमा। निर्यात/रिपोर्ट, केवाईसी पैकेज, पुनर्संसाधन के लिए आदर्श।
कमी के मामले में - 429/503 + कतार/मतदान।
3. 5 लागत/जटिलता लिमिटर
GraphQL/खोज: गहराई/कार्डिनैलिटी/एक्सटेंशन द्वारा "लागत" पर विचार करें।
"महंगे" अनुरोधों की क्लिपिंग/गिरावट, एक संकेत के साथ प्रतिक्रिया।
4) आयामी कुंजियाँ
प्रति किरायेदार (बहु-पट्टा, इक्विटी),
per-api_key/client_id (भागीदार),
प्रति-मार्ग (अधिक गंभीर महत्वपूर्ण उत्
प्रति-उपयोगकर्ता/उपकरण/आईपी/एएसएन/जियो
प्रति-बिन/देश (भुगतान के तरीके, जारीकर्ताओं और प्रदाताओं की सुरक्षा),
प्रति-विधि (GET नरम, POST/PUT सख्त)।
रचना: मुख्य कुंजी + "जोखिम गुणक" (नया खाता, TOR/प्रॉक्सी, उच्च चार्जबैक जोखिम)।
5) एसएलओ-अनुकूली थ्रॉटलिंग
जब एसएलओ खतरे में हो तो गतिशील थ्रॉटलिंग सक्षम करें:- ट्रिगर्स: 'p95 ', ' ', 'कतार', 'सीपीयू/आईओ संतृप्ति'।
- क्रियाएं: कम दर/फटना, बाहरी-अस्वीकृति को सक्षम करना, "महंगा" मार्ग काटना, अस्थायी अपमान (भारी क्षेत्रों/एकत्रीकरण के बिना)।
- वापसी: लगातार अंतराल के संकेतों को सामान्य करते समय स्टेपवाइज (%)।
6) वास्तुकला एकीकरण
एपीआई गेटवे (एज): प्राथमिक दर/कोटा, भू/एएसएन, एचएमएसी/जेडब्ल्यूटी सत्यापन, 429/' रेट्री-आफ्टर '।
BFF/Service Mesh: पतली प्रति-मार्ग/प्रति-किरायेदार सीमा, समवर्ती-सीमा, सर्किट-ब्रेकर ऊपर की ओर।
सेवा के अंदर: भारी संचालन के लिए सेमाफोर, कतारों में एक बैकप्रेशर, एक बाध्य आकार के साथ "काम पूल"।
वेबहूक: लीक बाल्टी और रिट्रे बफर के साथ एक अलग इंग्रेस एंडपॉइंट।
7) कॉन्फ़िगरेशन (टुकड़े)
कोंग/NGINX-शैली (दर + फट):yaml plugins:
- name: rate-limiting config:
policy: local minute: 600 # 10 rps limit_by: consumer fault_tolerant: true
- name: response-ratelimiting config:
limits:
heavy: { minute: 60 }
दूत (सर्किट + बाहरी + दर):
yaml circuit_breakers:
thresholds: { max_connections: 1000, max_requests: 800 }
outlier_detection:
consecutive_5xx: 5 interval: 5s base_ejection_time: 30s http_filters:
- name: envoy. filters. http. local_ratelimit typed_config:
token_bucket: { max_tokens: 100, tokens_per_fill: 100, fill_interval: 1s }
filter_enabled: { default_value: 100% }
filter_enforced: { default_value: 100% }
समवर्ती-सीमा (छद्म):
pseudo sema = Semaphore(MAX_ACTIVE_EXPORTS_PER_TENANT)
if! sema. tryAcquire(timeout=100ms) then return 429 with retry_after=rand(1..5)s process()
sema. release()
ग्राफक्यूएल लागत गार्ड (विचार):
pseudo cost = sum(weight(field) cardinality(arg))
if cost > tenant. budget then reject(429,"query too expensive")
8) विभिन्न चैनलों के लिए नीतियां
REST
GET - नरम, POST/PATCH/DELETE - सख्त; "आइडेम्पोटेंट" स्टेटस/चेक को वापस लिया जा सकता है।
भुगतान के लिए: 'ऑथ/कैप्चर/रिफंड' प्रति-उपयोगकर्ता/किरायेदार/बिन/देश पर सीमा।
ग्राफ़क्यूएल
गहराई/जटिलता कैप, स्थिर/सफेदी वाले प्रश्न, उपनाम पर सीमा।
WebSocket/SSE
आवृत्ति सीमा 'सदस्यता/सदस्यता', विषयों की संख्या पर टोपी, घटनाओं के आकार का नियंत्रण और भेजें-कतार - जब 'policy _ disconnect' ओवरफ्लो।
वेबहूक
रिसेप्शन पर लीकी बाल्टी, प्रति-प्रेषक कोटा, मृत-अक्षर कतार, नियतात्मक 2xx/429।
9) ग्राहक प्रतिक्रिया
हमेशा शीर्षकों के साथ एक स्पष्ट 429 वापस करें:- 'पुनः प्रयास करें: <सेकंड>'
- 'एक्स-रेटलिमिट-लिमिट/शेष/रीसेट'
- कोटा के लिए - कोड 'कोटा _ पार' के साथ 403 और योजना उन्नयन के लिए एक लिंक।
- प्रलेखन: OpenAPI/SDL + "फेयर यूज" पृष्ठों में सीमाएँ।
10) निगरानी और डैशबोर्ड
मेट्रिक्स:- हिट्स सीमा: 'दर। सीमा। कुंजी/राउट/किरायेदारों द्वारा हिट।
- 429/503 доля, विलंबता p50/p95/p99, त्रुटि दर, कतार की लंबाई, खुले सर्किट।
- फेयर-शेयर: खपत में शीर्ष किरायेदार, "धमकाने वाला डिटेक्टर।"
- वेबहूक: रिसेप्शन/रेट्राई, ड्रॉप-रेट, मिडिल लैग।
- 429 कुल आरपीएस (बॉट के बिना) के 1-3% से अधिक नहीं।
- p95 सीमित योजक ≤ 5-10 एमएस प्रति किनारे।
- गिरावट वसूली समय ≤ 10 मिनट।
sql
SELECT ts::date d, tenant, route,
SUM(hits) AS limit_hits,
SUM(total) AS total_calls,
SUM(hits)::decimal/NULLIF(SUM(total),0) AS hit_rate
FROM ratelimit_stats
GROUP BY 1,2,3
ORDER BY d DESC, hit_rate DESC;
11) हादसा प्लेबुक
रिट्रे तूफान (अपस्ट्रीम फॉल): वैश्विक थ्रॉटलिंग चालू करें, बैकऑफ़, ओपन सर्किट-ब्रेकर, टाइमआउट के बजाय "त्वरित गलतियाँ" वापस करें।
बॉट अटैक/स्क्रैपिंग: आईपी/एएसएन/जियो द्वारा हार्ड कैप, डब्ल्यूएएफ/जेएस चुनौती सक्षम करें, निर्देशिका/खोज को प्रतिबंधित करें।
टूर्नामेंट/इवेंट पीक: पहले से पढ़ ने की सीमा बढ़ाएं, कम "महंगे क्षेत्र", कैश/डेनोर्मलाइजेशन को सक्षम करें।
PSP से जोड़े गए वेबहुक: अस्थायी लीक बाल्टी, महत्वपूर्ण प्रकारों की प्राथमिकता, मृत-पत्र और रिट्रे का विस्तार।
12) परीक्षण और यूएटी
लोड: आरपीएस सीढ़ी, मोती × 10 सामान्य।
निष्पक्षता: 1 "लालची" किरायेदार का अनुकरण - वैश्विक बजट के एक्स% से अधिक नहीं।
गिरावट: SLO अनुकूलन सीमाओं को कम करता है और गलियारे में p95 रखता है।
सीमा मामले: विंडो परिवर्तन (min→chas), घड़ी शेक (घड़ीतिरछा), रेडिस स्केलिंग/कुंजी शार्डिंग।
अनुबंध: 429 और रीट्री-आफ्टर हेडर मौजूद हैं, एसडीके सही ढंग से बैक-ऑफ है।
13) सीमा के लिए भंडारण
स्थानीय सीमाओं (छोटे समूहों) के लिए इन-मेमोरी।
वितरित के लिए रेडिस/मेमकैच (परमाणु के लिए लुआ स्क्रिप्ट)।
हैश द्वारा शार्डिंग कुंजी; विंडो के नीचे टीटीएल; कैश हानि के लिए बैकअप मीट्रिक।
पहचान: लिमिटर को दोहराए गए कॉल (अनुरोध कुंजी द्वारा लेखांकन) को नहीं तोड़ ना चाहिए।
14) शासन
कैटलॉग को सीमित करता है: कौन मालिक है, कौन सी कुंजी/सीमा/राशन।
फास्ट स्विच (संकट मोड) के लिए फीचर-फ्लैग।
संविदात्मक कोटा में परिवर्तन के लिए नीतियां और आरएफसी प्रक्रिया।
इष्टतम थ्रेसहोल्ड के चयन पर ए/बी प्रयोग।
15) एंटी-पैटर्न
वैश्विक एक सीमा "सभी एपीआई के लिए"।
केवल निश्चित खिड़कियां → "किनारे" कूदती हैं।
फीडबैक के बिना सीमा (कोई 'Retry-After '/headers नहीं).
उपवास 429/503 के बजाय मूक समय।
प्रति-किरायेदार निष्पक्ष-शेयर की कमी - एक ग्राहक बाकी का गला घोंट देता है।
कोई ग्राफ़क्यूएल/जटिलता खोज सुरक्षा नहीं।
समवर्ती-गार्ड में शून्य DB/PSP "वैक्यूम क्लीनर"।
16) पसंद की मिनी धोखा शीट
डिफ़ॉल्ट टोकन बाल्टी (दर + फट) प्रति-किरायेदार + मार्ग है।
पैसे/रिपोर्ट द्वारा कोटा: फिसलने वाली खिड़की दिन/महीना।
भारी संचालन: समवर्ती-सीमा + कतार।
GraphQL/поиск: जटिलता-बजट + प्रश्न बने रहे।
डब्ल्यूएस/वेबहूक: लीक बाल्टी + बैकप्रेशर।
Кризис: गतिशील थ्रॉटलिंग + सर्किट-ब्रेकर + अपमानित।
सारांश
लोड नियंत्रण एक बहु-स्तरीय अनुशासन है: सही एल्गोरिदम (बाल्टी/विंडो/प्रतिस्पर्धा), उचित सीमा कुंजी, एसएलओ अनुकूलन और पारदर्शी प्रतिक्रिया। प्रवेश द्वार/जाल/सेवाओं में सीमाएं सिलने से, प्रोफ़ाइल नीतियों के साथ ग्राफ़क्यूएल/डब्ल्यूएस/वेबहूक को हटाकर और प्लेबुक के साथ अवलोकन को जोड़ कर, आप चरम घटनाओं और अन्य लोगों की विफलताओं को नियंत करते हैं।