TypeScript में रेट लिमिटिंग: लाइब्रेरीज़, टूल्स और कार्यान्वयन के उदाहरण

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

TypeScript में रेट लिमिटिंग: टूल्स और कार्यान्वयन के लिए संपूर्ण गाइड



रेट लिमिटिंग (अनुरोध दर सीमित करना) वेब एप्लिकेशन और API को दुरुपयोग, DDoS हमलों और अत्यधिक लोड से बचाने की एक प्रमुख तकनीक है। TypeScript में, सख्त टाइपिंग और आधुनिक क्षमताओं के कारण, रेट लिमिटिंग का कार्यान्वयन विशेष रूप से सुरुचिपूर्ण और विश्वसनीय हो जाता है। इस लेख में, हम TypeScript के लिए सर्वश्रेष्ठ लाइब्रेरीज़, एल्गोरिदम और कोड उदाहरणों पर चर्चा करेंगे।



रेट लिमिटिंग की आवश्यकता क्यों है?

अनुरोध दर सीमित किए बिना, आपका एप्लिकेशन निम्नलिखित समस्याओं का सामना कर सकता है:

  • सर्वर ओवरलोड — एक क्लाइंट प्रति सेकंड हजारों अनुरोध भेज सकता है
  • ब्रूट फोर्स हमले — पासवर्ड या टोकन का अनुमान लगाना
  • वित्तीय नुकसान — यदि प्रत्येक अनुरोध के लिए भुगतान वाले संसाधनों की आवश्यकता हो (जैसे, OpenAI API)
  • असमान संसाधन वितरण — एक उपयोगकर्ता सारी बैंडविड्थ ले सकता है


TypeScript में रेट लिमिटिंग के लिए लोकप्रिय लाइब्रेरीज़



1. bottleneck — सार्वभौमिक सीमक

JavaScript/TypeScript में रेट लिमिटिंग के लिए सबसे लोकप्रिय लाइब्रेरीज़ में से एक। यह प्रति सेकंड/मिनट अनुरोधों की संख्या को सीमित करने के साथ-साथ कतार में अनुरोधों को "हैंग" (एकत्रित) करने का भी समर्थन करती है।

import Bottleneck from 'bottleneck';

const limiter = new Bottleneck({ maxConcurrent: 2, // अधिकतम 2 समवर्ती अनुरोध minTime: 1000, // अनुरोधों के बीच न्यूनतम 1 सेकंड reservoir: 10, // अवधि के लिए कुल सीमा reservoirRefreshAmount: 10, reservoirRefreshInterval: 60 * 1000 // हर मिनट रिफ्रेश});

async function fetchData(url: string): Promise<any> { return limiter.schedule(() => fetch(url));}

// उपयोगconst users = await Promise.all([ fetchData('/api/users/1'), fetchData('/api/users/2'), fetchData('/api/users/3'), // यह अनुरोध प्रतीक्षा करेगा]);


2. express-rate-limit — Express.js के लिए

Express एप्लिकेशन में अनुरोधों को सीमित करने का मानक समाधान। TypeScript के साथ बढ़िया काम करता है।

import express from 'express';import rateLimit from 'express-rate-limit';

const app = express();

const apiLimiter = rateLimit({ windowMs: 15 * 60 * 1000, // 15 मिनट max: 100, // अधिकतम 100 अनुरोध standardHeaders: true, // RateLimit-* हेडर लौटाएं legacyHeaders: false, message: { status: 429, message: 'बहुत अधिक अनुरोध, कृपया बाद में प्रयास करें' }});

app.use('/api/', apiLimiter);

app.listen(3000);


3. rate-limiter-flexible — Redis और इन-मेमोरी के लिए लचीला समाधान

विभिन्न स्टोरेज (Redis, Memory, MongoDB, Postgres) और एल्गोरिदम (Token Bucket, Sliding Window) के समर्थन वाली लाइब्रेरी।

import { RateLimiterMemory } from 'rate-limiter-flexible';

const rateLimiter = new RateLimiterMemory({ points: 5, // 5 अनुरोध duration: 1, // 1 सेकंड में});

async function checkRateLimit(key: string): Promise<boolean> { try { await rateLimiter.consume(key); return true; // अनुरोध स्वीकृत } catch (error) { return false; // सीमा पार }}

// Express में उपयोग का उदाहरणapp.post('/api/login', async (req, res) => { const allowed = await checkRateLimit(req.ip); if (!allowed) { return res.status(429).json({ error: 'Too Many Requests' }); } // लॉगिन प्रोसेसिंग...});


रेट लिमिटिंग एल्गोरिदम

  • Token Bucket — एक "बाल्टी" जिसमें टोकन होते हैं जो एक स्थिर दर से भरते हैं। प्रत्येक अनुरोध एक टोकन का उपभोग करता है। यह अल्पकालिक उछाल की अनुमति देता है।
  • Sliding Window — एक स्लाइडिंग टाइम विंडो (जैसे, 1 मिनट)। यह निश्चित अंतराल के बजाय पिछले समय में किए गए अनुरोधों को ध्यान में रखता है।

अनुशंसाएँ