Rate Limiting কি?
Rate Limiting হল একটি প্রক্রিয়া যার মাধ্যমে একটি সার্ভার বা অ্যাপ্লিকেশন ক্লায়েন্টদের (ব্যবহারকারীদের) প্রতি নির্দিষ্ট সময়ের মধ্যে কতবার একটি রিকোয়েস্ট পাঠানো যাবে তা সীমাবদ্ধ করে। এটি মূলত API বা সার্ভিসের অবলোপন (overload) রোধ করতে ব্যবহৃত হয়, যাতে সার্ভিসটি অতিরিক্ত লোডের কারণে সঠিকভাবে কাজ না করতে পারে।
Rate Limiting সাধারণত ব্যবহৃত হয় ওয়েব সার্ভিসে, যেমন RESTful APIs এবং GraphQL APIs, যেখানে একাধিক ক্লায়েন্ট একযোগভাবে সার্ভিসের সাথে যোগাযোগ করতে পারে এবং সিস্টেমটি সঠিকভাবে কাজ করার জন্য সেটি সীমাবদ্ধ করা প্রয়োজন। এতে একাধিক রিকোয়েস্টের কারণে সার্ভিস স্লো না হয়ে যায় এবং নিরাপত্তার দিক থেকেও এটি একটি ভাল পদ্ধতি।
Rate Limiting এর প্রয়োজনীয়তা
Rate Limiting এর কিছু মূল প্রয়োজনীয়তা বা সুবিধা হলো:
১. সিস্টেমের স্থিতিশীলতা নিশ্চিত করা
Rate Limiting সার্ভারে অতিরিক্ত লোড কমানোর জন্য কার্যকরী। যখন অনেক রিকোয়েস্ট একসাথে আসতে থাকে, তখন সার্ভার অচল হয়ে পড়তে পারে বা স্লো হয়ে যেতে পারে। Rate Limiting এর মাধ্যমে সার্ভারটি একটি সীমিত সংখ্যক রিকোয়েস্ট গ্রহণ করে, যাতে সিস্টেমটি স্থিতিশীল থাকে।
২. সিকিউরিটি উন্নত করা
Rate Limiting স্প্যাম বা DDoS (Distributed Denial of Service) আক্রমণ থেকে রক্ষা করতে সহায়তা করে। যখন কোন হ্যাকার বা আক্রমণকারী সার্ভারে অতিরিক্ত রিকোয়েস্ট পাঠায়, তখন সেগুলিকে ব্লক করার জন্য Rate Limiting ব্যবহার করা যেতে পারে।
৩. API কোটার প্রয়োগ
অনেক API পরিষেবা তাদের ব্যবহারকারীদের জন্য নির্দিষ্ট সংখ্যক রিকোয়েস্ট সীমিত করে। যেমন, ফ্রি API প্ল্যানের জন্য ১০০০ রিকোয়েস্ট প্রতি মাসে সীমিত থাকতে পারে। Rate Limiting এই ধরনের কোটার প্রয়োগে সাহায্য করে এবং অবাঞ্ছিত খরচ নিয়ন্ত্রণে রাখে।
৪. কাস্টমার এক্সপিরিয়েন্স উন্নত করা
Rate Limiting এর মাধ্যমে সার্ভারটি অত্যধিক চাপ এড়াতে পারে, ফলে ব্যবহারকারীরা একটি স্থিতিশীল এবং দ্রুত অভিজ্ঞতা পেতে পারেন। খুব বেশি রিকোয়েস্ট গ্রহণের কারণে সার্ভারের স্লো রেসপন্স টাইম এবং টাইমআউট সমস্যা দূর হয়।
৫. অতিরিক্ত খরচ কমানো
যখন API সার্ভিস স্লো হয়ে যায়, তখন সেই সার্ভিসের সাথে যোগাযোগ করা ব্যবহারকারীদের জন্য খরচ বৃদ্ধি পেতে পারে। Rate Limiting প্রয়োগের মাধ্যমে এই খরচ কমানো সম্ভব হয়, কারণ সার্ভারের প্রতি নির্দিষ্ট সময়ের মধ্যে রিকোয়েস্টের সংখ্যা সীমিত থাকে।
Rate Limiting এর ধরন
Rate Limiting বিভিন্ন ধরণের হতে পারে, যেমন:
১. Fixed Window Limiting
এটি একটি নির্দিষ্ট সময়ের মধ্যে একটি নির্দিষ্ট সংখ্যক রিকোয়েস্ট গ্রহণ করে। যেমন, প্রতি মিনিটে ১০০ রিকোয়েস্ট অনুমোদিত।
২. Sliding Window Limiting
এটি একটি চলমান সময়সীমার মধ্যে রিকোয়েস্ট সংখ্যা নির্ধারণ করে, যেমন, প্রতি ৫ মিনিটে সর্বোচ্চ ১০০ রিকোয়েস্ট।
৩. Token Bucket Limiting
এটি একটি "টোকেন" ব্যবহার করে রিকোয়েস্ট সংখ্যা সীমাবদ্ধ করে। প্রতি নির্দিষ্ট সময় পর একটি নতুন টোকেন তৈরি হয়, যা ব্যবহারকারীরা ব্যবহার করে সার্ভারে রিকোয়েস্ট পাঠাতে পারে। এটি কিছুটা লচিল এবং গতিশীল।
৪. Leaky Bucket Limiting
এটি Token Bucket-এর মতো, তবে এখানে টোকেনগুলি "পাতলা" হয়ে থাকে, অর্থাৎ অতিরিক্ত রিকোয়েস্ট যদি আসে তবে সে গুলো সরাসরি ফেলে দেওয়া হয়, সুতরাং এটি নির্দিষ্ট সীমা ছাড়িয়ে যাওয়ার আগে রিকোয়েস্ট প্রক্রিয়া করে।
Rate Limiting কিভাবে কাজ করে?
Rate Limiting সাধারণত HTTP হেডার ব্যবহার করে নির্দিষ্ট করা হয়। এই হেডারে সাধারণত ৩টি প্রধান ফিল্ড থাকে:
- X-RateLimit-Limit: এটি দেখায় যে, মোট কতটি রিকোয়েস্ট একজন ব্যবহারকারী নির্দিষ্ট সময়ে পাঠাতে পারবে।
- X-RateLimit-Remaining: এটি দেখায় কতটি রিকোয়েস্ট বাকি আছে, যা ব্যবহারকারী পাঠাতে পারে।
- X-RateLimit-Reset: এটি জানায় কখন রেট লিমিট রিসেট হবে, অর্থাৎ পরবর্তী সময় কবে থেকে নতুন রিকোয়েস্ট পাঠানো যাবে।
Rate Limiting API Response উদাহরণ:
HTTP/1.1 200 OK
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1615152331
এখানে, প্রতি ঘণ্টায় ১০০০ রিকোয়েস্ট গ্রহণ করা যাবে, বর্তমানে ৯৯৯টি রিকোয়েস্ট বাকি রয়েছে এবং পরবর্তী রিসেট সময় UNIX টাইমস্ট্যাম্প হিসাবে 1615152331।
Rate Limiting কিভাবে Implement করবেন?
Rate Limiting সঠিকভাবে কার্যকর করতে হলে, সাধারণত API সার্ভারে এটি কনফিগার করতে হয়। বিভিন্ন লাইব্রেরি এবং প্রযুক্তি ব্যবহার করে আপনি Rate Limiting প্রয়োগ করতে পারেন, যেমন:
১. Node.js এ Rate Limiting
Node.js এর জন্য express-rate-limit লাইব্রেরি ব্যবহার করা যায়, যা API রিকোয়েস্টে Rate Limiting প্রয়োগ করতে সাহায্য করে।
npm install express-rate-limit
const express = require('express');
const rateLimit = require('express-rate-limit');
const app = express();
// Rate limiter middleware
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 মিনিট
max: 100, // প্রতি 15 মিনিটে সর্বোচ্চ ১০০ রিকোয়েস্ট
message: "Too many requests, please try again later."
});
// সকল রিকোয়েস্টে Rate Limit প্রযোজ্য
app.use(limiter);
// API Route
app.get("/", (req, res) => {
res.send("Hello, world!");
});
app.listen(3000, () => {
console.log("Server running on port 3000");
});
২. Rate Limiting API Gateway
অনেক বড় অ্যাপ্লিকেশন ও মাইক্রোসার্ভিস আর্কিটেকচারে API Gateway ব্যবহার করা হয়, যেখানে Rate Limiting API Gateway এর মাধ্যমে প্রযোজ্য হয়। এটি সার্ভিসগুলোকে অতিরিক্ত লোড থেকে রক্ষা করে।
সারাংশ
Rate Limiting একটি গুরুত্বপূর্ণ পদ্ধতি যা ওয়েব অ্যাপ্লিকেশন বা API-কে অতিরিক্ত লোড এবং আক্রমণ থেকে রক্ষা করতে সাহায্য করে। এটি সার্ভারের পারফরম্যান্স বজায় রাখে, API সিকিউরিটি উন্নত করে এবং ব্যবহারকারীদের জন্য একটি স্থিতিশীল অভিজ্ঞতা প্রদান করে। Rate Limiting প্রয়োগের মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনের বা সার্ভিসের নিরাপত্তা, পারফরম্যান্স এবং রিলায়েবিলিটি বৃদ্ধি করতে পারবেন।
Read more