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

सर्वरलेस ऐप्स के लिए रेट लिमिटिंग मास्टर करें: संसाधन सुरक्षित करें और लागत नियंत्रित करें

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

1- अपने संसाधनों की रक्षा करें: यदि आप एक सार्वजनिक API प्रदान कर रहे हैं, तो ट्रैफिक स्पाइक्स सेवा की गुणवत्ता को कम कर सकते हैं, और आपके सभी उपयोगकर्ताओं के लिए सेवा आउटेज का कारण बन सकते हैं। आपको अपने सिस्टम को ऐसे कैस्केडिंग विफलताओं के साथ-साथ स्व-प्रेरित DDoS घटनाओं से बचाने की आवश्यकता है। आपके एप्लिकेशन में एक बग आपके सिस्टम में ऐसी समस्याओं को ट्रिगर कर सकता है। एक आंतरिक प्रक्रिया जो विफलता के मामले में एक एंडपॉइंट को अनिश्चित काल तक रीट्राई करती है, आसानी से आपके संसाधनों को समाप्त कर सकती है।

2- उपयोगकर्ता कोटा प्रबंधित करें: आप अपनी सेवाओं के निष्पक्ष उपयोग के लिए अपने उपयोगकर्ताओं के लिए कोटा परिभाषित करना चाह सकते हैं। साथ ही यदि आप अपनी सेवाओं को विभिन्न मूल्य निर्धारण स्तरों में प्रदान करते हैं तो आपको कोटा की आवश्यकता हो सकती है।

3- लागत नियंत्रित करें: ऐसे कई वास्तविक जीवन के उदाहरण हैं कि कैसे एक अनियंत्रित सिस्टम बड़े बिल का कारण बन सकता है। यह सर्वरलेस एप्लिकेशन के लिए काफी जोखिम है इसकी अत्यधिक स्केलेबल प्रकृति के कारण। रेट लिमिटिंग इन लागतों को नियंत्रित करने में आपकी मदद करेगी।

समाधान

विभिन्न लेयर्स में कई वैकल्पिक रेट लिमिटिंग समाधान हैं। मैं संक्षिप्त पेशेवरों/विपक्ष विश्लेषण के साथ 3 मुख्य समाधानों को सूचीबद्ध करूंगा।

1- फ़ंक्शन का Concurrency Level:

क्लाउड प्रदाता आपके सर्वरलेस फ़ंक्शन निष्पादन को स्केल करने के लिए कई कंटेनर बनाते हैं। आप कंटेनर/इंस्टेंस की अधिकतम संख्या की सीमा निर्धारित कर सकते हैं। हालांकि यह concurrency को सीमित करने में मदद कर सकता है, यह नियंत्रित नहीं करता कि आपका फ़ंक्शन एक सेकंड में कितनी बार कॉल किया जाएगा।

यहां बताया गया है कि आप AWS Lambda और Google Cloud Functions के लिए concurrency कैसे सीमित कर सकते हैं।

पेशेवर:

  • कोई ओवरहेड नहीं
  • कॉन्फ़िगर करना आसान

विपक्ष:

  • पूर्ण समाधान नहीं। केवल concurrency नियंत्रित करता है। प्रति सेकंड निष्पादन की संख्या सीमित नहीं है।

2- API Gateway पर रेट लिमिटिंग

यदि आप API Gateway के माध्यम से अपने फ़ंक्शंस तक पहुंच रहे हैं, तो आप अपनी रेट लिमिटिंग नीति को API Gateway पर लागू कर सकते हैं। AWS और GCP दोनों के पास अपने समाधानों को कॉन्फ़िगर करने के तरीके पर गाइड हैं।

पेशेवर:

  • कोई ओवरहेड नहीं
  • कॉन्फ़िगर करना आसान

विपक्ष:

  • केवल तभी लागू होता है जब आप API Gateway का उपयोग कर रहे हों।
  • यह प्रति उपयोगकर्ता या प्रति IP कोटा जैसे अधिक परिष्कृत मामलों का समर्थन नहीं करता।

3- Redis के साथ रेट लिमिटिंग

यह सबसे पूर्ण और शक्तिशाली समाधान है। कई Redis-आधारित रेट लिमिटिंग लाइब्रेरी उपलब्ध हैं। Jeremy Daly के ब्लॉग पोस्ट में, वह Elasticache को संभावित समाधान के रूप में खारिज करते हैं, यह कहते हुए कि यह एक "नॉन-सर्वरलेस" घटक और प्रबंधन के लिए एक और चीज़ जोड़ता है। यहां Upstash अपने सर्वरलेस मॉडल और प्रति-अनुरोध-मूल्य निर्धारण के साथ एक बहुत अच्छा विकल्प बन जाता है।

पेशेवर:

  • शक्तिशाली, आप अपने उपयोगकर्ता मॉडल के अनुरूप एक अनुकूलित तर्क लागू कर सकते हैं।
  • स्केलेबल समाधान। देखें कि कैसे Github Redis का उपयोग रेट लिमिटिंग के लिए करता है
  • समृद्ध पारिस्थितिकी तंत्र, कई ओपन सोर्स लाइब्रेरी: redis_rate, redis-cell, node-ratelimiter

विपक्ष:

  • Redis का उपयोग करने का ओवरहेड।

कोड: Redis के साथ रेट लिमिटिंग

रेट लिमिटिंग लाइब्रेरी की बदौलत, अपने एप्लिकेशन कोड पर रेट लिमिटिंग लागू करना बहुत आसान है। नीचे दिया गया उदाहरण कोड प्रति IP प्रति सेकंड AWS Lambda फ़ंक्शन के निष्पादन को सीमित करता है:

const RateLimiter = require("async-ratelimiter");
const Redis = require("ioredis");
const { getClientIp } = require("request-ip");

const rateLimiter = new RateLimiter({
  db: new Redis("YOUR_REDIS_URL"),
  max: 1,
  duration: 5_000,
});

module.exports.hello = async (event) => {
  const clientIp = getClientIp(event) || "NA";
  const limit = await rateLimiter.get({ id: clientIp });
  if (!limit.remaining) {
    return {
      statusCode: 429,
      body: JSON.stringify({
        message: "Sorry, you are rate limited. Wait for 5 seconds",
      }),
    };
  }
  return {
    statusCode: 200,
    body: JSON.stringify({ message: "hello!" }),
  };
};

पूरे उदाहरण के लिए ट्यूटोरियल देखें।

पढ़ने की सूची

  1. अपने साधारण पुराने मॉनिटर की रिफ्रेश रेट को कैसे ओवरक्लॉक करें अपने साधारण पुराने मॉनिटर की रिफ्रेश रेट को कैसे ओवरक्लॉक करें

    आपके PC के कई घटकों की तरह, आपके मॉनिटर को इसकी मानक 60 Hz स्टॉक सेटिंग्स से परे इसकी रिफ्रेश रेट को बढ़ाकर ओवरक्लॉक किया जा सकता है ताकि यह स्क्रीन पर प्रति सेकंड अधिक फ्रेम खींचने में सक्षम हो सके। यह आपके मॉनिटर के डिस्प्ले प्रदर्शन को बढ़ाता है, जिससे एक सुखद गेमिंग अनुभव प्राप्त होता है। जो लोग

  1. विंडोज 10 PC पर RAM खाली करने और स्पीड बढ़ाने के आसान तरीके विंडोज 10 PC पर RAM खाली करने और स्पीड बढ़ाने के आसान तरीके

    क्या आपको अपने विंडोज 10 PC पर सिस्टम के मेमोरी पर कम होने का चेतावनी संदेश दिखाई देता है? या आपका सिस्टम उच्च मेमोरी उपयोग के कारण हैंग या फ्रीज होता है? डरें नहीं, हम इन मुद्दों में आपकी मदद के लिए यहां हैं, और इसीलिए इस गाइड में, हम विंडोज 10 कंप्यूटर पर RAM खाली करने के 9 अलग-अलग तरीकों पर चर्चा

  1. मैक पर डिफॉल्ट एप्लिकेशन कैसे बदलें: स्टेप-बाय-स्टेप गाइड मैक पर डिफॉल्ट एप्लिकेशन कैसे बदलें: स्टेप-बाय-स्टेप गाइड

    मैक में डिफॉल्ट एप्लिकेशन उपयोग में आसान हैं। लेकिन, कुछ डिफॉल्ट ऐप्स में कुछ ऐसी फीचर्स की कमी होती है जिनकी हमें सख्त जरूरत होती है। या कुछ ऐसे ऑपरेशन हैं जिन्हें हम करना चाहते हैं लेकिन मैक के डिफॉल्ट प्रोग्राम में उपलब्ध नहीं हैं। तो, ऐसे परिदृश्य में हम क्या कर सकते हैं? हम बस मैक पर डिफॉल्ट ए