Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Redis

सर्वर रहित दर सीमित

अपने सिस्टम की उपलब्धता को बनाए रखना किसी भी उत्पाद के लिए सबसे महत्वपूर्ण कार्यों में से एक है। दुर्भाग्य से, लोग आपके संसाधनों पर भारी मात्रा में इसका दुरुपयोग कर सकते हैं, या आप इसके उपयोग और शुल्क को सीमित करना चाहते हैं। दर सीमित करना इनमें से कई समस्याओं का एक मानक समाधान है और इसे लीक से हटकर काम करना चाहिए। आखिरकार, आपने अपना सिस्टम पहले ही बना लिया है और आप रेट-लिमिटिंग सिस्टम को डिजाइन करने में और भी अधिक समय नहीं लगाना चाहते हैं जो सर्वर रहित फ़ंक्शन जैसे स्टेटलेस वातावरण में अच्छी तरह से काम करता है।

@upstash/ratelimit की घोषणा

GitHub, npm या Deno

. पर उपलब्ध है

आज हम @upstash/ratelimit releasing जारी कर रहे हैं , सर्वर रहित वातावरण में दर-सीमित करने के लिए एक समाधान, जैसे कि Vercel, Cloudflare, Deno, Fastly और Netlify। यह Upstash Serverless Redis के शीर्ष पर बनाया गया है और दुनिया भर में आपके उपयोगकर्ताओं के लिए कम विलंबता अनुभव प्रदान करने के लिए एक या अधिक डेटाबेस का उपयोग करके दर-सीमित समाधान प्रदान करता है!

आरंभ करें

@upstash/ratelimit अब तक तीन अलग-अलग मानकीकृत एल्गोरिदम लागू करता है, और आप प्रोजेक्ट के रीडमे में उनके बारे में अधिक पढ़ सकते हैं।

हम दो तरीके प्रदान करते हैं:

  • 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";

// Create a new ratelimiter, that allows 10 requests per 10 seconds
const ratelimit = new Ratelimit({
  redis: Redis.fromEnv(),
  limiter: Ratelimit.slidingWindow(10, "10 s"),
});

// Use a constant string to limit all requests with a single ratelimit
// Or use a userID, apiKey or ip address for individual limits.
const identifier = "api";
const { success } = await ratelimit.limit(identifier);

if (!success) {
  return "Unable to process at this time";
}
doExpensiveCalculation();
return "Here you go!";

वैश्विक प्रतिरूपित दर-सीमित

मान लें कि आपके ग्राहक अमेरिका और यूरोप में हैं। इस मामले में, आप अपस्टैश पर दो क्षेत्रीय रेडिस डेटाबेस बना सकते हैं और आपके उपयोगकर्ता जो भी डीबी उनके सबसे करीब है, उसकी विलंबता का आनंद लेंगे।

"@upstash/ratelimit" से
import { GlobalRatelimit } from "@upstash/ratelimit"; // for deno: see above
import { Redis } from "@upstash/redis";

// Create a new ratelimiter, that allows 10 requests per 10 seconds
const ratelimit = new GlobalRatelimit({
  redis: [
    new Redis({
      /* europe */
    }),
    new Redis({
      /* north america */
    }),
  ],
  limiter: Ratelimit.slidingWindow(10, "10 s"),
});

समापन शब्द

यदि आपके कोई प्रश्न हैं, तो कृपया GitHub या नीचे दिए गए चैनलों पर हमसे संपर्क करें।

हमें Discordand Twitter का अनुसरण करें।


  1. Nuxt 3 और Serverless Redis के साथ शुरुआत करना

    परिचय यदि आपको कभी ऐसा ऐप बनाना पड़े जो एप्लिकेशन के उपयोग को ट्रैक करता हो, संसाधनों के उपयोग को प्रतिबंधित करता हो या ऐप के प्रदर्शन को बढ़ाने के लिए कैश से डेटा प्राप्त करता हो, तो आपको पता होगा कि रेडिस इन आवश्यकताओं का उत्तर है! रेडिस इन-मेमोरी, की-वैल्यू डेटाबेस है। यह ओपन सोर्स है और इसका मत

  1. सर्वर रहित और एज के लिए वैश्विक डेटाबेस

    हाल के वर्षों में, सर्वर रहित आर्किटेक्चर और एज कंप्यूटिंग अनुप्रयोग परिनियोजन के लिए बहुत लोकप्रिय हो रहे हैं। लेकिन एप्लिकेशन स्टेट और सर्वर रहित और/या एज फ़ंक्शन के अंदर डेटा संग्रहीत करना एक अलग कहानी है। कई कठिनाइयाँ हैं जैसे; डेटाबेस से कनेक्शन का प्रबंधन, कई स्थानों से डेटा को तेज़ एक्सेस के

  1. सर्वर रहित रेडिस पर पाइपलाइन रेस्ट एपीआई

    Upstash देशी Redis API के अलावा REST API का भी समर्थन करता है। आरईएसटी एपीआई डेवलपर्स को सर्वर रहित और किनारे के कार्यों से कनेक्शन के मुद्दों के बिना अपने रेडिस तक पहुंचने में मदद करता है। लेकिन अगर आप एक ही फ़ंक्शन में कई रेडिस कमांड निष्पादित करते हैं, तो इसका मतलब है कि आप डेटाबेस को कई बार कॉल