Rate Limiting এবং Throttling: একটি পরিচিতি
Rate Limiting এবং Throttling হল দুটি গুরুত্বপূর্ণ কৌশল যা ওয়েব সার্ভিস বা API-এর পারফরম্যান্স এবং নিরাপত্তা বাড়াতে ব্যবহৃত হয়। বিশেষ করে যখন আপনি RESTful ওয়েব সার্ভিস তৈরি করছেন, এই দুটি কৌশল ডেটা ট্রান্সফার এবং ব্যবহারকারীর অভিজ্ঞতা নিয়ন্ত্রণ করতে সাহায্য করে।
- Rate Limiting: এটি ব্যবহারকারীর প্রতি নির্দিষ্ট সময়সীমায় কতটি অনুরোধ (request) গ্রহণ করা যাবে তা নিয়ন্ত্রণ করে। এটি সাধারণত সিস্টেমের উপর অতিরিক্ত লোড কমাতে ব্যবহৃত হয় এবং অত্যাধিক ট্রাফিককে প্রতিরোধ করতে সাহায্য করে।
- Throttling: এটি একই রকম, তবে এটি কিছু সময়ের জন্য সার্ভিসের ব্যবহার সীমিত করে এবং নির্দিষ্ট পরিমাণের পর ব্যবহারকারীকে ডিলে (delay) করা হয়।
Rate Limiting এবং Throttling-এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Rate Limiting | Throttling |
|---|---|---|
| সংজ্ঞা | নির্দিষ্ট সময়ের মধ্যে সর্বাধিক অনুরোধ সীমিত করা। | নির্দিষ্ট অনুরোধের জন্য সময় সীমা রাখা এবং ধীরে ধীরে প্রক্রিয়া করা। |
| ব্যবহার | সাধারণত অতিরিক্ত ট্রাফিক ব্লক করতে ব্যবহার করা হয়। | সিস্টেমের উপর লোড কমাতে এবং সার্ভারের সুনির্দিষ্ট পারফরম্যান্স রাখতে ব্যবহৃত হয়। |
| ফলস্বরূপ | দ্রুত অতিরিক্ত অনুরোধগুলি নিরুৎসাহিত করা। | ব্যবহারকারীকে কিছু সময়ের জন্য ডিলে বা বন্ধ করে দেওয়া। |
| উদাহরণ | API তে প্রতি ঘন্টায় ১০০টি অনুরোধ অনুমোদন। | প্রতি সেকেন্ডে ৫টি অনুরোধ করা যাবে, তার পরে ডিলে হবে। |
Rate Limiting কৌশল
Rate limiting সাধারণত একটি নির্দিষ্ট সময়ে (যেমন প্রতি মিনিট, প্রতি ঘণ্টা) কতটি অনুরোধ গ্রহণ করা যাবে তা নিয়ন্ত্রণ করে। এটি ওয়েব সার্ভিস বা API-এর সক্ষমতা এবং সিস্টেমের স্থিতিশীলতা নিশ্চিত করতে ব্যবহৃত হয়। অনেক API প্রদানকারী যেমন Twitter, Google, এবং GitHub Rate Limiting ব্যবহার করে।
Rate Limiting কৌশলের উদাহরণ
- Fixed Window: প্রতি সময়সীমায় নির্দিষ্ট সংখ্যক অনুরোধ গ্রহণ করা হয়। যেমন, প্রতি ঘণ্টায় ১০০টি অনুরোধ।
- Sliding Window: সময়ের সাথে সাথে গত কয়েক মিনিট বা ঘণ্টায় একটি সীমা প্রযোজ্য হয়।
- Token Bucket: এখানে একটি বালতিতে টোকেন জমা হয় এবং প্রতিটি অনুরোধে একটি টোকেন খরচ হয়। টোকেন পূর্ণ হলে অনুরোধ আটকানো হয়।
উদাহরণ: Express.js-এ Rate Limiting
const express = require('express');
const rateLimit = require('express-rate-limit');
const app = express();
// Rate limiter setup: 100 requests per hour
const limiter = rateLimit({
windowMs: 60 * 60 * 1000, // 1 hour
max: 100, // limit each IP to 100 requests per windowMs
message: 'Too many requests, please try again later.',
});
app.use(limiter); // apply rate limiter to all routes
app.get('/', (req, res) => {
res.send('Welcome to the API!');
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});
এখানে, express-rate-limit প্যাকেজ ব্যবহার করে প্রতি ঘণ্টায় ১০০টি অনুরোধ অনুমোদন করা হয়েছে।
Throttling কৌশল
Throttling ব্যবহৃত হয় যখন API বা সার্ভিসের গতিকে নিয়ন্ত্রণ করতে হয়। এটি ধীর গতিতে অনুরোধ প্রক্রিয়া করে এবং খুব দ্রুত আবর্তিত অনুরোধগুলোকে ব্যালেন্স করে। এই কৌশলটি বিশেষত সার্ভার সাইডে বেশি লোড না ফেলতে ব্যবহৃত হয়।
Throttling কৌশলের উদাহরণ
- Fixed Delay: প্রতিটি অনুরোধের জন্য একটি নির্দিষ্ট দেরি (delay) ইনজেক্ট করা হয়।
- Leaky Bucket: এখানে বালতিতে পানি যেমন বের হয়ে যায় তেমন করে অতিরিক্ত অনুরোধ ধীরে ধীরে আটকে যায়।
উদাহরণ: Express.js-এ Throttling
const express = require('express');
const throttle = require('express-throttle');
const app = express();
// Throttle setup: Limit to 1 request per second
app.use(throttle({ rate: 1, burst: 1 }));
app.get('/', (req, res) => {
res.send('This is a throttled API!');
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});
এখানে, express-throttle প্যাকেজ ব্যবহার করে প্রতি সেকেন্ডে একটিই অনুরোধ গ্রহণের অনুমতি দেওয়া হয়েছে। অতিরিক্ত অনুরোধ ধীরে ধীরে আটকানো হবে।
Rate Limiting এবং Throttling ব্যবহার করার সুবিধা
- সিস্টেমের স্থিতিশীলতা: অতিরিক্ত অনুরোধ সিস্টেমে লোড ফেললে তা সিস্টেমের পারফরম্যান্স কমিয়ে দিতে পারে। Rate Limiting এবং Throttling সিস্টেমকে অতিরিক্ত লোড থেকে রক্ষা করে।
- অতিরিক্ত ট্রাফিক রোধ: এই কৌশলগুলো API বা সার্ভিসকে অযাচিত ট্রাফিক থেকে রক্ষা করতে সাহায্য করে, বিশেষ করে DDoS (Distributed Denial of Service) আক্রমণ থেকে।
- ব্যবহারকারীর অভিজ্ঞতা উন্নয়ন: ডেটা লোড বা প্রসেসিং এর অতিরিক্ত চাপ না দিয়ে ব্যবহারকারীদের জন্য আরও সুস্থ এবং দ্রুত সার্ভিস প্রদান করা যায়।
- নিরাপত্তা: অননুমোদিত ট্রাফিক বা অস্বাভাবিক অনুরোধ থেকে ওয়েব সার্ভিস বা API সুরক্ষিত থাকে।
সারাংশ
Rate Limiting এবং Throttling দুটি গুরুত্বপূর্ণ কৌশল যা ওয়েব সার্ভিস বা API এর সঠিক পারফরম্যান্স বজায় রাখতে সাহায্য করে। Rate Limiting সিস্টেমে কতটি অনুরোধ গ্রহণ করা যাবে তা নিয়ন্ত্রণ করে, যেখানে Throttling অতিরিক্ত অনুরোধকে ধীরে ধীরে প্রক্রিয়া করে সিস্টেমের স্থিতিশীলতা নিশ্চিত করে। এই কৌশলগুলি ব্যবহার করে ওয়েব সার্ভিসের নিরাপত্তা এবং কর্মক্ষমতা বাড়ানো যায় এবং অতিরিক্ত লোড থেকে রক্ষা করা যায়।
Read more