अपने सिस्टम की उपलब्धता को बनाए रखना किसी भी उत्पाद के लिए सबसे महत्वपूर्ण कार्यों में से एक है। दुर्भाग्य से, लोग आपके संसाधनों को प्रभावित करके इसका दुरुपयोग कर सकते हैं, या आप उपयोग को सीमित करना चाहते हैं और इसके लिए शुल्क लेना चाहते हैं। रेट लिमिटिंग इन कई समस्याओं का एक मानक समाधान है और इसे बॉक्स से बाहर काम करना चाहिए। आखिरकार, आपने पहले ही अपना सिस्टम बना लिया है और सर्वरलेस फंक्शन जैसे स्टेटलेस वातावरण में अच्छी तरह से काम करने वाले रेट-लिमिटिंग सिस्टम को डिजाइन करने में और भी अधिक समय खर्च नहीं करना चाहते हैं।
@upstash/ratelimit की घोषणा
GitHub, npm या Deno पर उपलब्ध
आज हम @upstash/ratelimit जारी कर रहे हैं, जो सर्वरलेस वातावरण जैसे Vercel, Cloudflare, Deno, Fastly और Netlify में रेट-लिमिटिंग का एक समाधान है। यह Upstash सर्वरलेस Redis के शीर्ष पर बनाया गया है और दुनिया भर में आपके उपयोगकर्ताओं के लिए कम विलंबता अनुभव प्रदान करने के लिए एक या अधिक डेटाबेस का उपयोग करके रेट-लिमिटिंग समाधान प्रदान करता है!
शुरू करें
@upstash/ratelimit अब तक तीन अलग-अलग मानकीकृत एल्गोरिदम लागू करता है, और आप परियोजना के README में उनके बारे में अधिक पढ़ सकते हैं।
हम दो विधियां प्रदान करते हैं:
limit(identifier: string): Promise<RatelimitResponse>
limit true या false और शेष अनुरोधों के बारे में कुछ मेटाडेटा लौटाएगा और इसका उपयोग किया जा सकता है यदि आप अपनी सेट सीमा से परे सभी अनुरोधों को अस्वीकार करना चाहते हैं।
blockUntilReady(identifier: string, timeout: number): Promise<RatelimitResponse>
यदि आप किसी अनुरोध को तुरंत अस्वीकार नहीं करना चाहते हैं बल्कि तब तक प्रतीक्षा करना चाहते हैं जब तक इसे संसाधित नहीं किया जा सकता। ध्यान रखें कि कुछ प्लेटफ़ॉर्म आपके फंक्शन के निष्पादन समय के लिए आपसे शुल्क लेते हैं।
सिंगल रीजनल डेटाबेस
सिंगल डेटाबेस के साथ रेटलिमिटिंग सीधी है। आप Upstash पर एक डेटाबेस बनाते हैं और इसका उपयोग करना शुरू करते हैं:
import { Ratelimit } from "@upstash/ratelimit";
import { Redis } from "@upstash/redis";
// एक नया रेटलिमिटर बनाएं, जो 10 सेकंड में 10 अनुरोधों की अनुमति देता है
const ratelimit
= new Ratelimit({
redis: Redis.fromEnv(),
limiter: Ratelimit.slidingWindow(10, "10 s"),
});
// सभी अनुरोधों को एक ही रेटलिमिट के साथ सीमित करने के लिए एक स्थिर स्ट्रिंग का उपयोग करें
// या व्यक्तिगत सीमाओं के लिए userID, apiKey या ip एड्रेस का उपयोग करें।
const identifier
= "api";
const { success }
= await ratelimit.limit(identifier);
if (!success)
{
return "Unable to process at this time";
}
doExpensiveCalculation();
return "Here you go!";
ग्लोबल रेप्लिकेटेड रेट-लिमिटिंग
मान लें कि आपके पास यूएस और यूरोप में ग्राहक हैं। इस मामले में, आप Upstash पर दो रीजनल Redis डेटाबेस बना सकते हैं और आपके उपयोगकर्ता उनमें से जिस भी DB के निकटतम हैं, उसकी विलंबता का आनंद लेंगे।
import { GlobalRatelimit } from "@upstash/ratelimit";
// deno के लिए: ऊपर देखें
import { Redis } from "@upstash/redis";
// एक नया रेटलिमिटर बनाएं, जो 10 सेकंड में 10 अनुरोधों की अनुमति देता है
const ratelimit
= new GlobalRatelimit({
redis: [
new Redis({
/* europe */
}),
new Redis({
/* north america */
}),
],
limiter: Ratelimit.slidingWindow(10, "10 s"),
});
समापन शब्द
यदि आपके कोई प्रश्न हैं, तो कृपया GitHub या नीचे दिए गए चैनलों पर हमसे संपर्क करें।
हमें Discord और Twitter पर फॉलो करें।