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

रेडिस और लुआ के साथ एक स्केलेबल वितरित दर सीमक बनाएं - चरण-दर-चरण मार्गदर्शिका

रेडिस और लुआ के साथ एक स्केलेबल वितरित दर सीमक बनाएं - चरण-दर-चरण मार्गदर्शिका <पी> इस व्यापक गाइड में, आप उच्च-ट्रैफ़िक वातावरण में उपयोगकर्ता अनुरोधों को नियंत्रित करने के लिए रेडिस और लुआ स्क्रिप्टिंग का उपयोग करके एक वितरित दर सीमक का निर्माण करेंगे।

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

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

आप क्या सीखेंगे

  • <पी> Redis का उपयोग करके दर सीमित करने वाली प्रणाली कैसे बनाएं।

  • <पी> परमाणु संचालन को प्राप्त करने के लिए रेडिस के साथ लुआ स्क्रिप्ट का उपयोग कैसे करें।

  • <पी> कुशल अनुरोध ट्रैकिंग के लिए रेडिस डेटा संरचनाओं को समझना।

  • <पी> वितरित प्रणाली में उच्च ट्रैफ़िक को संभालने की तकनीकें।

  • <पी> वितरित दर सीमक को अनुकरण और स्केल करने के लिए डॉकर का उपयोग करना।

आवश्यकताएँ

<पी> शुरू करने से पहले, सुनिश्चित करें कि आपने निम्नलिखित इंस्टॉल कर लिया है:

  • <पी> Node.js (v14 या उच्चतर)

  • <पी> रेडिस

  • <पी> डॉकर (वितरित वातावरण का अनुकरण करने के लिए)

  • <पी> Node.js, Redis और Lua स्क्रिप्टिंग की बुनियादी समझ।

सामग्री तालिका

  • <पी> आप क्या सीखेंगे

  • <पी> पूर्वावश्यकताएँ

  • <पी> परियोजना अवलोकन

  • <पी> चरण 1:प्रोजेक्ट कैसे सेट करें

  • <पी> चरण 2:रेडिस कैसे सेट करें

  • <पी> चरण 3:रेडिस और लुआ के साथ रेट लिमिटर कैसे लागू करें
  • <पी> चरण 4:Node.js API सर्वर कैसे बनाएं

  • <पी> चरण 5:रेट लिमिटर का परीक्षण कैसे करें

  • <पी> चरण 6:दर सीमित मेट्रिक्स की कल्पना कैसे करें

  • <पी> चरण 7:डॉकर के साथ कैसे परिनियोजन करें

  • <पी> निष्कर्ष:आपने क्या सीखा

प्रोजेक्ट अवलोकन

<पी> इस ट्यूटोरियल में, आप:

  1. <पी> अनुरोध कोटा लागू करने के लिए रेडिस और लुआ का उपयोग करके एक दर सीमक बनाएं।

  2. <पी> दौड़ की स्थिति से बचते हुए, परमाणु संचालन सुनिश्चित करने के लिए लुआ स्क्रिप्ट का उपयोग करें।

  3. <पी> दर सीमित करने के लिए एक टोकन बकेट एल्गोरिदम लागू करें।

  4. <पी> उच्च ट्रैफ़िक का अनुकरण करने और कार्रवाई में दर सीमित करने की कल्पना करने के लिए एक इंटरैक्टिव डेमो बनाएं।

सिस्टम आर्किटेक्चर

<पी> आप निम्नलिखित घटकों के साथ सिस्टम का निर्माण करेंगे:

  1. <पी> एपीआई सर्वर :आने वाले उपयोगकर्ता अनुरोधों को संभालता है।

  2. <पी> रेडिस :स्टोर डेटा का अनुरोध करते हैं और दर सीमा लागू करते हैं।

  3. <पी> लुआ स्क्रिप्ट्स :दर सीमित करने के लिए रेडिस को परमाणु अपडेट सुनिश्चित करता है।

  4. <पी> डॉकर :कई उदाहरणों के साथ एक वितरित वातावरण का अनुकरण करता है।

चरण 1:प्रोजेक्ट कैसे सेट करें

<पी> आइए अपना Node.js प्रोजेक्ट स्थापित करके शुरुआत करें:

mkdir distributed-rate-limiter
cd distributed-rate-limiter
npm init -y
<पी> इसके बाद, आवश्यक निर्भरताएँ स्थापित करें:

npm install express redis dotenv
  • <पी> व्यक्त करना :एक हल्का वेब सर्वर ढांचा।

  • <पी> रेडिस :रेडिस के साथ बातचीत के लिए।

  • <पी> dotenv :पर्यावरण चर के प्रबंधन के लिए।

<पी> एक .env बनाएं निम्नलिखित सामग्री वाली फ़ाइल:

REDIS_HOST=localhost
REDIS_PORT=6379
PORT=3000
RATE_LIMIT=5
TIME_WINDOW=60
<पी> ये चर रेडिस होस्ट, पोर्ट, दर सीमा (अनुमत अनुरोधों की संख्या), और समय विंडो (सेकंड में) को परिभाषित करते हैं।

चरण 2:रेडिस कैसे सेट करें

<पी> इससे पहले कि हम कोड में उतरें, सुनिश्चित करें कि Redis आपके सिस्टम पर स्थापित और चल रहा है। यदि आपके पास Redis स्थापित नहीं है, तो आप इसे शीघ्रता से सेट करने के लिए डॉकर का उपयोग कर सकते हैं:

docker run -p 6379:6379 --name redis-rate-limiter -d redis

चरण 3:रेडिस और लुआ के साथ रेट लिमिटर कैसे लागू करें

<पी> दर सीमित करने को कुशलतापूर्वक संभालने के लिए, हम एक टोकन बकेट एल्गोरिदम का उपयोग करेंगे। इस एल्गोरिथम में:

  1. <पी> प्रत्येक उपयोगकर्ता के पास टोकन की एक "बाल्टी" होती है।

  2. <पी> प्रत्येक अनुरोध के लिए एक टोकन की आवश्यकता होती है।

  3. <पी> टोकन समय-समय पर एक निर्धारित दर पर पुनः भरे जाते हैं।

<पी> परमाणुता सुनिश्चित करने और दौड़ की स्थिति से बचने के लिए, हम रेडिस के साथ लुआ स्क्रिप्टिंग का उपयोग करेंगे। रेडिस में लुआ स्क्रिप्ट परमाणु रूप से निष्पादित होती हैं, जिसका अर्थ है कि चलते समय उन्हें अन्य परिचालनों द्वारा बाधित नहीं किया जा सकता है।

रेट लिमिटिंग के लिए लुआ स्क्रिप्ट कैसे बनाएं

<पी> rate_limiter.lua नामक एक फ़ाइल बनाएं :

local key = KEYS[1]
local limit = tonumber(ARGV[1])
local window = tonumber(ARGV[2])
local current = redis.call("get", key)
if current and tonumber(current) >= limit then
 return 0
else
 if current then
 redis.call("incr", key)
 else
 redis.call("set", key, 1, "EX", window)
 end
 return 1
end
  1. <पी> इनपुट :

    • <पी> कुंजियाँ[1] :रेडिस कुंजी उपयोगकर्ता की अनुरोध संख्या का प्रतिनिधित्व करती है।

    • <पी> ARGV[1] :दर सीमा (अनुमत अनुरोधों की अधिकतम संख्या)।

    • <पी> ARGV[2] :दर सीमा के लिए समय विंडो (सेकंड में)।

  2. <पी> तर्क :

    • <पी> यदि उपयोगकर्ता दर सीमा तक पहुंच गया है, तो 0 लौटाएं (अनुरोध अवरुद्ध).

    • <पी> यदि उपयोगकर्ता सीमा के भीतर है, तो उनकी अनुरोध संख्या बढ़ाएँ या यदि यह पहला अनुरोध है तो समाप्ति के साथ एक नई गणना सेट करें।

    • <पी> वापसी 1 (अनुरोध स्वीकृत).

चरण 4:Node.js API सर्वर कैसे बनाएं

<पी> server.js नामक एक फ़ाइल बनाएँ :

require('dotenv').config();
const express = require('express');
const redis = require('redis');
const fs = require('fs');
const path = require('path');
const app = express();
const client = redis.createClient({
 host: process.env.REDIS_HOST,
 port: process.env.REDIS_PORT
});
const rateLimitScript = fs.readFileSync(path.join(__dirname, 'rate_limiter.lua'), 'utf8');
const RATE_LIMIT = parseInt(process.env.RATE_LIMIT);
const TIME_WINDOW = parseInt(process.env.TIME_WINDOW);
// Middleware for rate limiting
async function rateLimiter(req, res, next) {
 const ip = req.ip;
 try {
 const allowed = await client.eval(rateLimitScript, 1, ip, RATE_LIMIT, TIME_WINDOW);
 if (allowed === 1) {
 next();
 } else {
 res.status(429).json({ message: 'Too many requests. Please try again later.' });
 }
 } catch (err) {
 console.error('Error in rate limiter:', err);
 res.status(500).json({ message: 'Internal server error' });
 }
}
app.use(rateLimiter);
app.get('/', (req, res) => {
 res.send('Welcome to the Rate Limited API!');
});
const PORT = process.env.PORT;
app.listen(PORT, () => {
 console.log(`Server running on port ${PORT}`);
});
  1. <पी> रेट लिमिटर मिडलवेयर :

    • <पी> ग्राहक का आईपी पता प्राप्त करता है और लूआ स्क्रिप्ट का उपयोग करके जांच करता है कि क्या वे दर सीमा के भीतर हैं।

    • <पी> यदि उपयोगकर्ता सीमा पार कर जाता है, तो 429 प्रतिक्रिया भेज दी गई है.

  2. <पी> एपीआई समापन बिंदु :

    • रूट एंडपॉइंट दर-सीमित है, इसलिए उपयोगकर्ता इसे निर्दिष्ट विंडो के भीतर सीमित संख्या में ही एक्सेस कर सकते हैं।

चरण 5:रेट लिमिटर का परीक्षण कैसे करें

  1. <पी> रेडिस प्रारंभ करें :

     docker start redis-rate-limiter
    
  2. <पी> Node.js सर्वर चलाएँ :

     node server.js
    
  3. <पी> अनुरोधों का अनुकरण करें :

    • <पी> curl का प्रयोग करें या दर सीमक का परीक्षण करने के लिए डाकिया:

       curl http://localhost:3000
      
    • <पी> कार्रवाई में दर सीमित करने को देखने के लिए तेजी से कई अनुरोध भेजें।

चरण 6:दर सीमित मेट्रिक्स की कल्पना कैसे करें

<पी> कैश हिट और अवरुद्ध अनुरोधों जैसे दर सीमित करने वाले मेट्रिक्स की निगरानी के लिए, हम server.js में मिडलवेयर में लॉगिंग जोड़ देंगे। :

async function rateLimiter(req, res, next) {
 const ip = req.ip;
 try {
 const allowed = await client.eval(rateLimitScript, 1, ip, RATE_LIMIT, TIME_WINDOW);
 if (allowed === 1) {
 console.log(`Allowed request from ${ip}`);
 next();
 } else {
 console.log(`Blocked request from ${ip}`);
 res.status(429).json({ message: 'Too many requests. Please try again later.' });
 }
 } catch (err) {
 console.error('Error in rate limiter:', err);
 res.status(500).json({ message: 'Internal server error' });
 }
}

चरण 7:डॉकर के साथ कैसे परिनियोजन करें

<पी> आइए इसे वितरित वातावरण में चलाने के लिए एप्लिकेशन को कंटेनरीकृत करें।

<पी> एक Dockerfile बनाएं :

FROM node:14
WORKDIR /app
COPY . .
RUN npm install
EXPOSE 3000
CMD ["node", "server.js"]
<पी> डॉकर कंटेनर बनाएं और चलाएं:

docker build -t rate-limiter .
docker run -p 3000:3000 rate-limiter
<पी> अब आप कई उदाहरण चलाकर दर सीमक को माप सकते हैं।

निष्कर्ष:आपने क्या सीखा

<पी> बधाई हो! आपने Redis और Lua स्क्रिप्ट का उपयोग करके सफलतापूर्वक एक वितरित दर सीमक बनाया है। इस पूरे ट्यूटोरियल में, आपने सीखा कि कैसे:

  1. <पी> वितरित सिस्टम में उपयोगकर्ता अनुरोधों को नियंत्रित करने के लिए दर सीमित लागू करें।

  2. <पी> परमाणु संचालन करने के लिए रेडिस में लुआ स्क्रिप्ट का उपयोग करें।

  3. <पी> अनुरोध कोटा प्रबंधित करने के लिए टोकन बकेट एल्गोरिथम लागू करें।

  4. <पी> प्रदर्शन को अनुकूलित करने के लिए दर सीमित करने वाले मेट्रिक्स की निगरानी करें।

  5. <पी> स्केलेबल वितरित वातावरण का अनुकरण करने के लिए डॉकर का उपयोग करें।

अगले चरण:

  1. <पी> उपयोगकर्ता आईडी द्वारा दर सीमा जोड़ें :प्रति उपयोगकर्ता दर सीमा का समर्थन करने के लिए सिस्टम का विस्तार करें।

  2. <पी> Nginx के साथ एकीकृत करें :Redis-समर्थित दर सीमा के साथ रिवर्स प्रॉक्सी के रूप में Nginx का उपयोग करें।

  3. <पी> कुबेरनेट्स के साथ तैनाती :उच्च उपलब्धता के लिए कुबेरनेट्स का उपयोग करके अपने रेट लिमिटर को स्केल करें।

<पी> हैप्पी कोडिंग!

<पी> मुफ़्त में कोड करना सीखें. फ्रीकोडकैंप के ओपन सोर्स पाठ्यक्रम ने 40,000 से अधिक लोगों को डेवलपर्स के रूप में नौकरी पाने में मदद की है। आरंभ करें


  1. HTML में ईमेल लिखें और फिर उन्हें Gmail का उपयोग करके भेजें HTML में ईमेल लिखें और फिर उन्हें Gmail का उपयोग करके भेजें

    HTML ईमेल भी एक ईमेल है, लेकिन यह ग्राफिक्स, रंग, लिंक और टेबल कॉलम का उपयोग करके वेबपेजों की तरह ही फॉर्मेट किया जाता है। अब, किसी भी समाचार पत्र की कल्पना करें जो आपको किसी सेवा से पहले प्राप्त हुआ है, यह HTML ईमेल कैसा दिखता है, जबकि सादा पाठ एक ईमेल है जिसमें केवल पाठ शामिल होता है। विशिष्ट अंतर

  1. सी प्रोग्राम में  X  फॉर्मेट में विषम लंबाई की प्रिंट स्ट्रिंग। सी प्रोग्राम में 'X' फॉर्मेट में विषम लंबाई की प्रिंट स्ट्रिंग।

    एक स्ट्रिंग प्रोग्राम के साथ दिए गए स्ट्रिंग को X प्रारूप में प्रिंट करना चाहिए। संदर्भ के लिए, नीचे दी गई छवि देखें। यहां, एक चर का उपयोग बाएं दाएं (i) से प्रिंट करने के लिए किया जा सकता है और अन्य चर का उपयोग दाएं से बाएं (जे) प्रिंट करने के लिए किया जा सकता है और हम अन्य चर k ले सकते हैं जो अं

  1. सर्वश्रेष्ठ एलिमेंट WooCommerce थीम्स (2022)  सर्वश्रेष्ठ एलिमेंट WooCommerce थीम्स (2022) 

    आपकी WooCommerce साइट बनाते समय एलिमेंट एक शक्तिशाली टूल हो सकता है ... यदि आपके पास एक बढ़िया थीम है। एक थीम आमतौर पर पूर्व-डिज़ाइन किए गए टेम्प्लेट के साथ आती है जिसे आप एलीमेंटर के साथ कस्टमाइज़ कर सकते हैं। तो, कुंजी एक ऐसी थीम ढूंढना है जो आपकी आवश्यकताओं और सौंदर्यशास्त्र के अनुकूल हो। शुक्र ह