Rate limiting: token bucket, sliding window ও বানানোর উপায়

Rate limiting আপনার সার্ভিসকে অপব্যবহার, বাগ ও traffic spike থেকে রক্ষা করে। চার মূল algorithm এবং অনেক server জুড়ে চালানোর উপায় জানুন।

একটি গেট request-কে একে একে ছাড়ছে

Rate limiter নির্দিষ্ট সময়ে একজন client কতগুলো request করতে পারবে তার সীমা বাঁধে। এটি অপব্যবহার ও brute-force login ঠেকায়, shared resource বাঁচায়, আর একজন গোলমেলে client-কে বাকিদের ক্ষতি করতে দেয় না।

কীসের ভিত্তিতে সীমা দেবেন

User ID, API key, IP address, বা মিশ্রণ। শুধু IP দুর্বল: অনেকে একই IP ভাগ করে, আর আক্রমণকারী IP বদলায়।

মূল algorithm

  • Fixed window: প্রতি মিনিটে গুনে মিনিটের শেষে শূন্য করা। সহজ, কিন্তু সীমানার দুই পাশে burst হলে প্রায় দ্বিগুণ request ঢুকতে পারে।
  • Sliding window: এখন থেকে গত ৬০ সেকেন্ডের request গোনা। মসৃণ ও নিখুঁত, কিন্তু বেশি memory লাগে।
  • Token bucket: বালতিতে নির্দিষ্ট হারে token ভরে; প্রতি request একটি নেয়। বালতির আকার পর্যন্ত ছোট burst চলে, আর গড় হার স্থির থাকে। খুব জনপ্রিয়।
  • Leaky bucket: request queue-তে ঢোকে আর নির্দিষ্ট হারে বের হয়। মসৃণ output, কিন্তু burst অপেক্ষা করে বা বাদ যায়।

অনেক server-এ চালানো

প্রতিটি server-এর memory-র counter যোগ হয় না। Redis-এর মতো shared দ্রুত store ব্যবহার করুন atomic operation দিয়ে (INCR সাথে expiry, বা Lua script), যাতে যাচাই ও আপডেট একসাথে হয়।

Client কী দেখবে

HTTP 429 Too Many Requests ফেরত দিন, সাথে Retry-After header এবং সীমা ও বাকি সংখ্যার header। Client তখন ঠিকভাবে পিছিয়ে যেতে পারে।

কোথায় বসাবেন

Edge বা API gateway-তে, যাতে খারাপ traffic আগেই বাদ যায়। Login ও password reset-এর মতো সংবেদনশীল কাজে আরও কড়া সীমা রাখুন।

আগে ঠিক করুন

Redis ডাউন থাকলে খোলা রাখবেন না বন্ধ? Plan অনুযায়ী আলাদা সীমা? Burst চলবে? এগুলো লিখে রাখুন।

মূল কথা: Redis-এ token bucket, user বা API key দিয়ে, 429 ও Retry-After সহ, একটি শক্ত ডিফল্ট।


System Design সিরিজের 11 নম্বর পর্ব (মোট ১৫)। আগের পর্ব: Consistent hashing: server বাড়ালে সব নড়ে না কেন.

আরও পড়ুন

Recursion ও backtracking সহজ উদাহরণে

Recursion সমস্যার ছোট কপি সমাধান করে সমাধান করে। অনেক interview সমস্যায় ব্যবহৃত চিন্তার ধাপ ও backtracking টেমপ্লেট শিখুন।

Interview ও DSA•৩ মিনিটে পড়া