कोर डेटाAPI

Rate Limiting

Atomic, server-side rate limits। एक कमांड में GCRA, या sliding window, token bucket या leaky bucket वाले नामित limiters। Lua की ज़रूरत नहीं।

atomic कमांड प्रति request
1
algorithms
4
Lua scripts
0
कदम 1 में से 5
Allowed

User 42 के लिए प्रति मिनट 10 requests। जवाब बताता है कि allowed है, limit क्या है और कितनी बची हैं।

उदाहरण सेशनplaying
# Allowed
hotkv> GCRA.LIMIT ratelimit:user:42 60000 10
1) (integer) 0
2) (integer) 10
3) (integer) 9
4) (integer) -1
5) (integer) 6000

असली HotKV कमांड और उदाहरण रिस्पॉन्स के साथ एक एनिमेटेड वॉकथ्रू। किसी भी कदम पर क्लिक करके वहां पहुंचें। कमांड और रिस्पॉन्स अंग्रेज़ी में ही रहते हैं, ठीक वैसे जैसे आप HotKV में टाइप करते और देखते हैं।

समस्या

बिना limits वाली API से आउटेज बस एक गड़बड़ क्लाइंट की दूरी पर है। जाँच application कोड में करने का मतलब है एक read, एक गणना और एक write, और एक साथ आने वाली requests इनके बीच की जगहों से निकल जाती हैं। कई टीमें सिर्फ़ इसे atomic बनाने के लिए एक Lua script संभालती रह जाती हैं।

HotKV इसे कैसे संभालता है

GCRA.LIMIT एक ही चरण में फ़ैसला भी करता है और उसे दर्ज भी करता है। इसलिए एक साथ आए क्लाइंट एक ही state पर दोनों पास नहीं हो सकते, और limit window की सीमाओं पर reset होने की जगह सहज ढंग से refill होती है। जिन limits को आप नाम से संभालते हैं, उनके लिए RATELIMIT.CREATE sliding window, token bucket या leaky bucket limiter बनाता है, जिसमें दर्ज रहता है कि उसने क्या allow किया और क्या deny।

कदम दर कदम

क्या होता है, कमांड दर कमांड

  1. 01

    Allowed

    User 42 के लिए प्रति मिनट 10 requests। जवाब बताता है कि allowed है, limit क्या है और कितनी बची हैं।

    GCRA.LIMIT ratelimit:user:42 60000 10
  2. 02

    Bot की ओर से burst

    Scraper अपनी burst की गुंजाइश खत्म कर देता है, और फिर उसे बताया जाता है कि कितनी देर रुकना है। Denied request से कुछ नहीं बदलता।

    GCRA.LIMIT ratelimit:bot:7 60000 10
  3. 03

    Plan के लिए नामित limiter

    Free-plan ग्राहकों को sliding window पर प्रति मिनट 100 requests मिलती हैं।

    RATELIMIT.CREATE free_plan 100 60000 ALGO sliding_window
  4. 04

    Weighted request

    Export endpoint की लागत 20 units है, इसलिए वह गुंजाइश का ज़्यादा हिस्सा लेता है।

    RATELIMIT.CHECK free_plan customer:881 COST 20
  5. 05

    देखें कि limiter ने क्या किया

    Settings, tracked keys और allowed व denied requests के कुल आँकड़े।

    RATELIMIT.STATS free_plan
कहां फ़िट बैठता है

असली परिदृश्य

Public APIs

हर API key को plan के हिसाब से limit मिलती है, अच्छे व्यवहार वाले क्लाइंट के लिए bursts के साथ और बाकियों के लिए सटीक Retry-After के साथ।

Login और signup forms

Credential stuffing को धीमा करने के लिए प्रति IP और प्रति account कोशिशें सीमित की जाती हैं।

बाहर जाने वाली कॉल

किसी partner API या LLM provider की कॉल उनके quota के भीतर रखी जाती हैं, पूरे fleet के हर worker में।

अंतर्निहित

आपको क्या मिलता है

एक कमांड में GCRA

Bursts के साथ सहज refill, atomic जाँच और update, और deny होने पर retry का समय।

GCRA.LIMITGCRA.RESET

नामित limiters

Sliding window, token bucket या leaky bucket, एक बार बनाए जाते हैं और हर key के लिए जाँचे जाते हैं।

RATELIMIT.CREATERATELIMIT.CHECK

Weighted requests

महँगी कॉल कई requests के बराबर गिनी जा सकती हैं। GCRA.LIMIT count लेता है, RATELIMIT.CHECK एक COST लेता है।

COST

आँकड़े

हर limiter के लिए allowed और denied के कुल आँकड़े।

RATELIMIT.STATS

आम सवाल

क्या rate limiting के लिए मुझे Lua script चाहिए?

नहीं। GCRA.LIMIT और RATELIMIT.CHECK दोनों पूरी जाँच एक atomic कमांड में करते हैं।

मुझे कौन सा इस्तेमाल करना चाहिए?

GCRA.LIMIT को किसी setup की ज़रूरत नहीं और वह हर plan पर काम करता है। RATELIMIT.* नामित limiters algorithm का विकल्प और आँकड़े जोड़ते हैं, और Performance और Scale plans का हिस्सा हैं।

Denied request की क्या कीमत लगती है?

कुछ नहीं। Denied GCRA कॉल limiter को जैसा है वैसा छोड़ देती है, इसलिए दोबारा कोशिश करने वाले क्लाइंट को और सज़ा नहीं मिलती।

संबंधित उपयोग के मामले

इसे अपने वर्कलोड पर आज़माएं

HotKV Redis प्रोटोकॉल बोलता है, इसलिए आप किसी मौजूदा क्लाइंट को इसकी ओर इंगित करके यही कमांड चला सकते हैं।